You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

NanoPi NEO LTS(DietPi/Armbian)配置USB串口与USB大容量存储功能求助

NanoPi NEO LTS(DietPi/Armbian)配置USB串口与USB大容量存储功能求助

Hey,针对你在NanoPi NEO LTS上配置USB串口和存储功能遇到的问题,我来给你一步步拆解解决方案,不管是DietPi还是Armbian环境都能搞定:


一、DietPi环境下的修复方案

1. 先搞定micro USB串口功能

你之前创建的u-serial.service只加载了u_serial模块,但这只是基础模块,还需要配合g_acm(USB ACM串口模块),并且要先启用USB OTG模式:

步骤1:启用USB OTG驱动

编辑Armbian/DietPi通用的boot配置文件:

echo "dtoverlay=dwc2" >> /boot/armbianEnv.txt
echo "modules-load=dwc2" >> /boot/armbianEnv.txt

重启系统让配置生效。

步骤2:修正串口服务文件

把你原来的/etc/systemd/system/u-serial.service替换成下面的内容,确保加载完整的串口模块:

[Unit]
Description=Load USB ACM serial modules

[Service]
Type=oneshot
ExecStart=/sbin/modprobe u_serial
ExecStart=/sbin/modprobe g_acm
RemainAfterExit=yes  # 确保模块在服务启动后保持加载状态

[Install]
WantedBy=multi-user.target

然后启用并启动服务:

sudo systemctl enable u-serial.service
sudo systemctl start u-serial.service

现在电脑应该能识别出USB串口了——Linux下一般是/dev/ttyACM0,Windows会弹出COM口,macOS则是/dev/tty.usbmodemxxx

2. 修复USB 2.0存储Gadget功能

你之前的配置有两个关键错误:一是modprobe命令里的参数连写(iSerialNumber="1234567890"iProduct="$IPRODUCT"没空格),二是file=/usb_storage指向的是目录,但usb_f_mass_storage模块需要的是镜像文件(模拟块设备)。

步骤1:创建存储镜像文件

先创建一个指定大小的镜像并格式化:

# 创建1GB的空镜像(可根据需求调整count值,1024=1GB)
sudo dd if=/dev/zero of=/usb_storage bs=1M count=1024
# 格式化为FAT32(兼容性最好)
sudo mkfs.vfat /usb_storage
# 开放权限让模块能读写
sudo chmod 666 /usb_storage

步骤2:修正存储服务文件

更新/etc/systemd/system/gadget-storage.service内容:

[Unit]
Description=USB gadget storage service
After=sys-subsystem-net-devices-eth0.target  # 确保网络启动后再加载

[Service]
Type=oneshot
ExecStart=/sbin/modprobe dwc2
ExecStart=/sbin/modprobe usb_f_mass_storage file=/usb_storage stall=0 removable=1 idVendor=0x0781 idProduct=0x5567 iManufacturer="NanoPi" iProduct="NanoPi Drive" iSerialNumber="1234567890"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl enable gadget-storage.service
sudo systemctl start gadget-storage.service

现在USB 2.0口应该能被电脑识别成U盘了。

3. 更优方案:micro USB同时实现串口+存储

如果想让micro USB口同时搞定串口和存储,直接用g_acm_ms模块就行,不用分开配置:

步骤1:确保已经创建好/usb_storage镜像文件(前面的dd/mkfs步骤)

步骤2:创建组合服务文件

新建/etc/systemd/system/g_acm_ms.service

[Unit]
Description=Load USB ACM + Mass Storage combo gadget

[Service]
Type=oneshot
ExecStart=/sbin/modprobe g_acm_ms file=/usb_storage stall=0 removable=1 idVendor=0x0781 idProduct=0x5567 iManufacturer="NanoPi" iProduct="NanoPi Combo" iSerialNumber="1234567890"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

步骤3:启用服务

sudo systemctl enable g_acm_ms.service
sudo systemctl start g_acm_ms.service

这样micro USB口会同时弹出串口和存储设备,完美满足你的需求。


二、Armbian环境下的问题修复

1. 解决USB存储不被检测的问题

你已经配置了g_acm_ms,但同样犯了“指向目录而非镜像文件”的错误,按下面步骤修正:

步骤1:创建存储镜像

sudo dd if=/dev/zero of=/mnt/usb_storage bs=1M count=1024
sudo mkfs.vfat /mnt/usb_storage
sudo chmod 666 /mnt/usb_storage

步骤2:重新加载模块

sudo rmmod g_acm_ms
sudo modprobe g_acm_ms file=/mnt/usb_storage stall=0

重启系统后,电脑就能识别出存储设备了。

2. 修改TTY设备名称

你现在的串口设备是/dev/tty.usbmodem14301(macOS下的默认命名),可以通过udev规则自定义名称:

步骤1:创建udev规则文件

sudo nano /etc/udev/rules.d/99-nanopi-serial.rules

写入以下内容(注意idVendor和idProduct要和你配置的一致):

SUBSYSTEM=="tty", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5567", SYMLINK+="ttyNanoPiSerial"

步骤2:重载udev规则

sudo udevadm control --reload-rules
sudo udevadm trigger

之后macOS下会新增一个/dev/ttyNanoPiSerial的符号链接,你可以用这个自定义名称连接串口。


通用注意事项

  • 所有模块加载命令一定要检查参数空格,这是你之前配置里最容易忽略的错误;
  • USB OTG模式必须启用(即dwc2驱动加载),否则任何USB Gadget功能都无法工作;
  • 存储Gadget必须使用镜像文件,不能直接绑定目录——模块需要的是块设备,镜像文件会被系统识别为虚拟块设备。

备注:内容来源于stack exchange,提问作者Manitoba

火山引擎 最新活动