野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 921|回复: 1

[经验\资料] 野火鲁班猫zeroN--使用USB/IP协议

[复制链接]
发表于 2023-8-17 09:36:38 | 显示全部楼层 |阅读模式
本帖最后由 机器小狗史努比 于 2023-8-17 09:55 编辑

  • 前言

在做机器人开发的时候经常遇到一个问题,就是机载电脑(如鲁班猫、树莓派等嵌入式设备)上面插入的USB设备,我们如果想把其连接在自己的电脑上面调试,有时候还要拆开机器人。我们一般都是在wifi或者网线下连接调试机器人,那有没有什么办法把USB也通过网络载上来呢?这就是USB/IP协议。


USB/IP是一种基于网络的设备共享机制,可将电脑A(server端)连接的USB设备通过网络共享给远程电脑B(client端)。


  • 启用USB/IP
  • 内核版本和发行版版本一致

这里的内核版本和发行版一致指的是ubuntu版本对应和linux内核版本一致,比如你是Ubuntu18,那么内核版本需要为4.15。
野火论坛202308170924192534..png 野火论坛202308170919522255..png
一般的,烧录完整的ubuntu镜像(.iso),里面就包含了和发行版本对应的内核,所以不要担心。
这种情况下,只需要输入



  1. sudo apt install linux-tools-virtual hwdata
复制代码


然后输入usbip help即可看到安装成功,各个命令的用法在此不再赘述。

  • 内核和发行版版本不一致或者内核没有使能USB/IP驱动

由于笔者手里的开发板是野火鲁班猫zero,linux的内核版本为4.19.232。按照野火自己的说法是由于rk356x/rk3588推出时间并不是很久,所以Rockchip提交给kernel官方的适配也较少, 就导致芯片的很多功能并没有被实现,所以目前我们只能使用Rockchip较旧的kernel版本。但是由于我的发行版是Ubuntu22,所以没有办法直接通过apt安装,所以这就很尴尬。而且野火给的内核是没有使能USB/IP驱动的,所以我们还是需要自己重新编译、安装。


  • 使能内核中USB/IP驱动

关于如何重新编译自己的内核,野火的文档已经写的比较详细,对嵌入式linux有研究的可以去仔细看看,我在这里只说几个重要步骤。
野火官方文档


首先进入内核的图形化配置


  1. make menuconfig Kmake menuconfig KCONFIG_CONFIG=arch/arm64/configs/lubancat2_defconfig ARCH=arm64
复制代码

野火论坛202308170923077661..png
在设备驱动的USB_support里面把相关的选项都打钩
野火论坛202308170923327109..png
截图太麻烦我就直接文字标表述了



Device Drivers -> USB Support
Device Drivers -> USB Support -> USB announce new devices
Device Drivers -> USB Support -> USB Modem (CDC ACM) support
Device Drivers -> USB Support -> USB/IP
Device Drivers -> USB Support -> USB/IP -> VHCI HCD
Device Drivers -> USB Support -> USB/IP -> Host driver
Device Drivers -> USB Support -> USB/IP -> VUDC driver
Device Drivers -> USB Serial Converter Support
Device Drivers -> USB Serial Converter Support -> USB FTDI Single port Serial Driver

这里我直接把它们都编译进了kernel,不缺这点内存,免得还要手动mrobpe。


接下来编译、制作deb包之类的看野火文档即可,如果需要提供编译好的deb包,可以回帖下面留下邮箱,因为项目需要,我选择的是RT-Linux的内核。
野火论坛202308170924287277..png
更换内核后,查看编译时间已经改变。


  • 安装usbip工具

使能了内核的驱动,我们还需要安装一下usbip工具。也就是原材料有了,我们需要个厨师。如前面所说,因为种种原因,我没有办法通过apt直接安装,会产生内核不适配的问题。因为apt源是为ubuntu22对应版本服务的。所以这里我们只能从usbip工具的源码进行安装。
找到我们刚刚的linux内核源码,在 tools/usb/ 下找到usbip ,这个文件夹内就是该内核的usbip源码,我们拷贝到开发板上
由于4.19内核对应的gcc的版本是7.5,我用Ubuntu22自带的gcc11编译会报错,所以需要下载gcc-7。我们在/etc/apt/sources.list文档中添加可以下载gcc-7的源。


  1. deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
  2. #更新一下
  3. apt update
  4. sudo apt install gcc-7 hwdata
复制代码

安装好后,由于可执行文件里面的gcc还是指向gcc-11,所以我们需要修改一下,让它暂时指向gcc-7。

  1. #备份一下
  2. mv /usr/bin/gcc /usr/bin/gcc.bak
  3. #让gcc指向gcc-7
  4. ln -s /usr/bin/gcc-7 /usr/bin/gcc</font></font></pre>
复制代码


我们再gcc -v可以查看到gcc版本已经变成了7.5
野火论坛202308170925026187..png
接下来我们可以开始正式安装了,在开发板上进入usbip目录,依次输入以下命令


  1. sudo apt-get install libudev-dev
  2. sudo chmod 777 autogen.sh configure
  3. ./autogen.sh
  4. ./configure
  5. make -j4 && make install
  6. #暴露动态库
  7. echo "/usr/local/lib" >> /etc/ld.so.conf
  8. ldconfig
复制代码


再次输入usbip help
我们就可以找到了
野火论坛202308170925233672..png
笔者在这给鲁班猫插入了一个u盘
野火论坛202308170925457994..png
输入usbip list -l 查看本地挂载的usb设备,可以看到我的U盘

如果你是虚拟机linux安装usbip,可以直接通过命令行安装,也在windows下安装,这里推荐一个我参考的教程,开源项目usbip-win里面的文档说的也比较清楚。
windows下使用usb/ip工具



因为U盘是插在鲁班猫上面的,所以需要鲁班猫开发板作为主机,所以需要在开发板上开启监听


#绑定usb设备,1-1为设备的id可以通过usbip list查看
usbip bind -b 1-1#开启监听usbipd

野火论坛202308170927546383..png
可以看到,在端口3240开启了usb/ip的监听这个时候我们在Windows下查看远程的端口
需要保证主机和开发板可以互相ping通
在windows主机下powershell输入usbip list -r <开发板ip地址>可以看到我们的设备
野火论坛202308170928293754..png
然后输入usbip attach -r <开发板ip地址> -b <busid>,显示成功,然后插在鲁班猫上的u盘仿佛是直接插在了我们自己的电脑上面一样了
野火论坛202308170929072526..png

野火论坛202308170929223174..png
关闭连接的话,需要先 usbip port查看远程连接的usb设备端口号,然后usbip detach -r <ip> -p <端口号>

野火论坛202308170929583287..png


  • 总结

本文笔者以手头的鲁班猫zero为例,讲述了如何在这款开发板上面如何使能usb/ip功能。限笔者水平有限,文中的错误还希望读者不吝啬的批评指正。




回复

使用道具 举报

发表于 2023-8-22 08:30:42 | 显示全部楼层
666666666666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-10 16:03 , Processed in 0.052208 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表