Phytec中国的wiki
support@phytec.cn
热线:0755-61802110-803
模拟磁盘设备
otg模拟磁盘设备做为外设时, 需要使用USB Mass Gadget Storage的驱动.
kernel usb mass-storage 模块说明文档: https://www.kernel.org/doc/html/latest/usb/mass-storage.html
通过镜像文件作为磁盘设备
nandflash上的文件系统是ubifs格式, 一般PC上不能够直接识别UBI文件系统格式. 因此需要使用镜像文件, 可以在nandflash上使用/dev/loop来创建一个虚拟的快设备, 然后将镜像文件挂载上去:
开发板默认镜像没有mkdosfs,需要在yocto安装dosfstools包
yocto安装软件参考: 在yocto中怎样为系统安装/删除软件 / yocto how to add/remove packages
mkdir /usb cd /usb mkdir files dd if=/dev/zero of=/usb/disk.img bs=1M count=100 # 生成100M的镜像文件 mkdosfs disk.img # 镜像文件格式化为fat32格式 mount -t vfat -o sync /usb/disk.img /usb/files # 使用/dev/loop设备节点来挂载disk.img到/usb/files目录下
开发板加载g_mass_storage模块, 使用file参数可设置存储设备节点
modprobe g_mass_storage file=/usb/disk.img removable=1
此时使用otg线连接开发板和PC时, PC可识别出一个磁盘设备
更新disk.img:
- 当开发板需要更新文件时
- 往/usb/files/目录下写入文件
- PC需要重新连接开发板后, PC端识别出来的磁盘文件才会更新.
- PC端更新文件时
- 在PC上往挂载的优盘写入文件
- 开发板需要重新挂载disk.img
- 可在/usb/目录下创建一个sync脚本来执行更新操作,执行后/usb/files与img文件同步。
- /usb/sync
#!/bin/sh umount /usb/files mount -t vfat -o sync /usb/disk.img /usb/files
将SD卡作为磁盘设备
sdcard文件系统为fat32格式时, PC可以识别出来, 当使用otg线连接时开发板时, g_mass_storage模块的设备节点设置为sdcard设备时, PC就能识别出来.
modprobe g_mass_storage file=/dev/mmcblk0p1 removable=1
而对sdcard的更新操作可参考上面的nandflash中更新disk.img内容来操作.
模拟串口设备
otg模拟串口设备需要使用USB Gadget Serial 驱动, 内核驱动文档参考:
https://www.kernel.org/doc/Documentation/usb/gadget_serial.txt
加载otg串口驱动:
root@phyboard-segin-imx6ul-2:~# modprobe g_serial [ 27.376194] g_serial gadget: Gadget Serial v2.4 [ 27.380903] g_serial gadget: g_serial ready [ 27.788629] g_serial gadget: high-speed config #2: CDC ACM config
驱动加载后, 开发板otg的模拟串口设备节点为/dev/ttyGS0
模拟网络设备
otg模拟网络设备需要加载g_ether驱动:
root@phyboard-mira-imx6-3:~# modprobe g_ether [ 343.735172] using random self ethernet address [ 343.739649] using random host ethernet address [ 343.745990] usb0: HOST MAC 82:e6:4b:e1:c2:b3 [ 343.750868] usb0: MAC 36:b0:d8:6f:46:64 [ 343.754935] using random self ethernet address [ 343.759429] using random host ethernet address [ 343.764077] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008 [ 343.769091] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready [ 343.776724] g_ether gadget: g_ether ready
加载驱动后, 开发板会有usb0的网络节点.
root@phyboard-mira-imx6-3:~# ifconfig usb0 Link encap:Ethernet HWaddr 36:B0:D8:6F:46:64 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
使用systemd-networkd来配置usb0的ip和开启dhcp服务, 需要创建/lib/systemd/network/20-usb0.network文件配置网络.
[Match] Name=usb0 [Network] Address=192.168.4.11/24 DHCPServer=yes
配置好usb0后, 重启网络服务即可.
root@phyboard-mira-imx6-3:~# systemctl restart systemd-networkd
otg连接PC后, 就能连接到开发板的网络.