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




