一、参考资料与信息:
jetson xavier nx使用jetpack sdk 5.0.2,20.04ubantu。
CONFIG_USB_CONFIGFS_F_FS=y
(通过 ConfigFS 的 FunctionFS 支持)。在较新的内核版本中,CONFIG_USB_FUNCTIONFS
已被 CONFIG_USB_CONFIGFS_F_FS
替代。
请连接host设备后再启动程序
https://developer.dji.com/doc/payload-sdk-tutorial/cn/basic-introduction/whats-psdk.html
二、下载安装usb-bulk-configuration
三、配置nx板子原始usb脚本
1. 备份
cd /opt/nvidia/l4t-usb-device-mode/ #usb配置目录
sudo cp nv-l4t-usb-device-mode-start.sh nv-l4t-usb-device-mode-start.sh.bak #备份
sudo vim nv-l4t-usb-device-mode-start.sh
2.修改配置nv-l4t-usb-device-mode-start.sh
vim /你的目录/to/usb-bulk-configuration/psdk-usb-configure.sh
#将其中关于usb bulk的代码复制到 /opt/nvidia/l4t-usb-device-mode/nv-l4t-usb-device-mode-start.sh中,代码如下:
enable_bulk=1
if [ ${enable_bulk} -eq 1 ]; then
mkdir -p /dev/usb-ffs
cfg_str="${cfg_str}+BULK1"
mkdir -p /dev/usb-ffs/bulk1
func=functions/ffs.bulk1
mkdir -p "${func}"
ln -sf "${func}" "${cfg}"
mount -o mode=0777 -o uid=2000 -o gid=2000 -t functionfs bulk1 /dev/usb-ffs/bulk1
/home/dji/Desktop/startup_bulk/startup_bulk /dev/usb-ffs/bulk1 & #修改为自己的目录
sleep 3
cfg_str="${cfg_str}+BULK2"
mkdir -p /dev/usb-ffs/bulk2
func=functions/ffs.bulk2
mkdir -p "${func}"
ln -sf "${func}" "${cfg}"
mount -o mode=0777 -o uid=2000 -o gid=2000 -t functionfs bulk2 /dev/usb-ffs/bulk2
/home/dji/Desktop/startup_bulk/startup_bulk /dev/usb-ffs/bulk2 & #修改为自己的目录
sleep 3
fi
3.修改 nv-l4t-usb-device-mode-config.sh配置
sudo vim /opt/nvidia/l4t-usb-device-mode/nv-l4t-usb-device-mode-config.sh
#添加
enable_bulk=1
四、 开启方法(请事先连接设备)
1.方法一(官方):直接重启
sudo reboot
2. 方法二:在线运行脚本
cd /opt/nvidia/l4t-usb-device-mode
sudo chmod 777 nv-l4t-usb-device-mode-start.sh
sudo ./nv-l4t-usb-device-mode-start.sh
3.开启成功标志
#查看是否开启,若开启则会显示bulk1和bulk2的信息
ps -aux | grep startup_bulk
#查看端口ep0,ep1,ep2是否正确创建
ls /dev/usb-ffs/bulk*
五、错误解决
1. 写错误!!!
sudo /opt/nvidia/l4t-usb-device-mode/nv-l4t-usb-device-mode-start.sh
/opt/nvidia/l4t-usb-device-mode/nv-l4t-usb-device-mode-start.sh: 第 136 行: echo: 写错误: 设备或资源忙
原因:functions/ffs.bulk1 或 functions/ffs.bulk2 目录已存在或被占用
解决:强制清理残留的 USB Gadget 配置,再重新运行
# 1.1在删除配置前,必须先拔出micro-usb,停用 USB Gadget 控制器
sudo sh -c 'echo "" > /sys/kernel/config/usb_gadget/l4t/UDC'
# 1.2解除所有配置的关联
# 遍历所有 configs 目录,删除其中的符号链接
for config in /sys/kernel/config/usb_gadget/l4t/configs/*; do
sudo find "$config" -type l -exec rm -fv {} \;
done
# 清空 bmAttributes(写入默认值)
sudo sh -c 'echo "0x80" > /sys/kernel/config/usb_gadget/l4t/configs/c.1/bmAttributes'
# 重置 MaxPower
sudo sh -c 'echo "0" > /sys/kernel/config/usb_gadget/l4t/configs/c.1/MaxPower'
# 移除 strings/0x409 子目录
sudo rmdir /sys/kernel/config/usb_gadget/l4t/configs/c.1/strings/0x409
# 删除配置目录
sudo rmdir /sys/kernel/config/usb_gadget/l4t/configs/c.1
# 1.3卸载所有功能模块
# 卸载 ACM (串口调试)
sudo rmdir /sys/kernel/config/usb_gadget/l4t/functions/acm.GS0
# 卸载 Mass Storage (大容量存储)
sudo rmdir /sys/kernel/config/usb_gadget/l4t/functions/mass_storage.0
# 卸载 NCM (网络控制模型)
sudo rmdir /sys/kernel/config/usb_gadget/l4t/functions/ncm.usb0
# 卸载 RNDIS (远程网络驱动接口规范)
sudo rmdir /sys/kernel/config/usb_gadget/l4t/functions/rndis.usb0
# 1.4清理描述信息
sudo rmdir /sys/kernel/config/usb_gadget/l4t/strings/0x409
# 1.5删除 OS 描述符(os_desc)
sudo rmdir /sys/kernel/config/usb_gadget/l4t/os_desc 2>/dev/null
# 1.6删除顶层目录
sudo rmdir /sys/kernel/config/usb_gadget/l4t
进行挂载操作但未成功的,需要删除相关文件:
sudo umount /dev/usb-ffs/bulk* 2>/dev/null
sudo rm -rf /dev/usb-ffs/bulk*
2.ls: 无法访问 '/dev/usb-ffs/bulk/': 没有那个文件或目录
原因:Bulk 模式未正确启用,配置文件中的 enable_bulk=1
未生效或脚本执行失败
解决:修改 nv-l4t-usb-device-mode-config.sh配置,如上文 三、3内容
3. ffs: -2
xiao@xiao-desktop:~$ /home/xiao/Public/usbfile/startup_bulk /dev/usb-ffs/bulk1 &
[1] 6462 xiao@xiao-desktop:~$ unable to open ep0 Unable to prepare ffs: -2
[1]+ 退出 254 /home/xiao/Public/usbfile/startup_bulk /dev/usb-ffs/bulk1
原因:Bulk 模式未正确启用,配置文件中的 enable_bulk=1
未生效或脚本执行失败
解决:修改 nv-l4t-usb-device-mode-config.sh配置,如上文 三、3内容
4. ffs: -3
xiao@xiao-desktop:~$ sudo /home/xiao/Public/usbfile/startup_bulk /dev/usb-ffs/bulk1
[sudo] xiao 的密码:
unable do write descriptors Unable to prepare ffs: -3
原因::Jetson 必须通过 OTG 口连接到主机(如 PC)以激活 Gadget 模式
解决:连接host设备