usb-gadget

udc

内核支持usb 的配置nt9856
支持usb 的驱动

USB做dev的一般都在小东西里面CONFIG_USB_GADGET在这里插入图片描述

小东西里面一般有三块
CONFIG_USB_CONFIGFS
在这里插入图片描述

这个一般是选着平台的usb控制器驱动
在这里插入图片描述

模拟U盘

比如我想usb做设备当一个U盘用那么用这个config CONFIG_USB_CONFIGFS_MASS_STORAGE
在这里插入图片描述

挂载实盘(flash)

下面这个就是一个工具让你挂载的目录配置这个驱动一挂载pc上就会出现一个U盘

insmod g_mass_storage.ko file=/dev/mtdblock6 stall=0 removable=1在这里插入图片描述
和实盘相关操作的其实就
usb_f_mass_storage.ko
g_mass_storage.ko
总共有这些驱动
在这里插入图片描述

挂载虚拟的盘(内存)

  1. mkdir /akfs/ mkdir /akfs/tmp
  2. dd if=/dev/zero of=/akfs/disk.img bs=1M count=15
  3. mkdosfs /akfs/disk.img
  4. mount -t vfat -o sync /akfs/disk.img /akfs/tmp/ 可以往里写数据
  5. insmod g_mass_storage.ko file=/akfs/disk.img stall=1 removable=1
  6. 需要获取disk数据重新mount 。

模拟串口

CONFIG_USB_CONFIGFS -》CONFIG_USB_CONFIGFS_SERIAL
CONFIG_USB_G_SERIAL前提是tty需要使能
801924c19a0ca07aee2bc1cea.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAa2FsYW5lcnlvaw==,size_19,color_FFFFFF,t_70,g_se,x_16)

在这里插入图片描述
编译有这5个ko
在这里插入图片描述
在之前这4个基本驱动的基础上
在这里插入图片描述
insmod usb-common.ko
insmod udc-core.ko
insmod fotg211-udc.ko
insmod libcomposite.ko
在继续添加这5个驱动
insmod u_serial.ko
insmod usb_f_obex.ko
insmod usb_f_serial.ko
insmod usb_f_acm.ko
insmod g_serial.ko 这个驱动一挂载pc就开始烧苗到一个设备同时dev也多了一个设备
在这里插入图片描述
在这里插入图片描述

假如pc这边识别不了需要更新配置(我环境不需要这不直接能用)

配置文件在Documentation\usb目录下
linux-cdc-acm.inf
可以在pc端连接上这个口通过echo往tty写数据测试。

模拟键盘

CONFIG_USB_CONFIGFS-》CONFIG_USB_CONFIGFS_F_HID
CONFIG_USB_G_HID
在这里插入图片描述
编译后这些ko
在这里插入图片描述

在之前这4个基本驱动的基础上在这里插入图片描述
继续加载新的驱动
insmod usb_f_hid.ko
insmod g_hid.ko
发现挂载不上,根据modules_install 查看dep文件发现依赖也正常
在这里插入图片描述
查看kenel doc文档 /usb/gadget_hid.txt发现内核只是提供了plat form 驱动 dev并没有提供
所以按照文档补上dev的补丁,同时在init的时候添加上dev的注册即可,记得卸载的地方hidg_cleanup添加unreg代码
platform_device_unregister(&hid_keyboard_dev);
在这里插入图片描述
修改后编译再吃insmod g_hid.ko 就会发现不会报错了而且pc机有反应了。
mdev -s
也能看到 /dev/hidg0 设备
利用\kernel\Documentation\usb\gadget_hid.txt 有hid的测试demo编译app
在你的板子上可以验证。
./a.out /dev/hidg0 keyboard
最好usb接其他电脑,串口这边输入字母[a-z] 或者输入–tab回车usb就会输出一个tab
,采用两台电脑方便查看,不然这边会叠加
在这里插入图片描述

模拟网络

linux内核支持各种模拟网络的协议

rndis(微软定的协议)

CONFIG_USB_CONFIGFS-》CONFIG_USB_CONFIGFS_RNDIS
CONFIG_USB_ETH->CONFIG_USB_ETH_RNDIS
在这里插入图片描述

编译出来后
在这里插入图片描述
在这里插入图片描述
insmod u_ether.ko
insmod usb_f_ecm_subset.ko
insmod usb_f_ecm.ko
insmod usb_f_rndis.ko
insmod g_ether.ko
ifconfig 就能看到一个usb的网卡
在这里插入图片描述
同样在pc端也能看到
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41884251/article/details/120005809