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
总共有这些驱动
挂载虚拟的盘(内存)
- mkdir /akfs/ mkdir /akfs/tmp
- dd if=/dev/zero of=/akfs/disk.img bs=1M count=15
- mkdosfs /akfs/disk.img
- mount -t vfat -o sync /akfs/disk.img /akfs/tmp/ 可以往里写数据
- insmod g_mass_storage.ko file=/akfs/disk.img stall=1 removable=1
- 需要获取disk数据重新mount 。
模拟串口
CONFIG_USB_CONFIGFS -》CONFIG_USB_CONFIGFS_SERIAL
CONFIG_USB_G_SERIAL前提是tty需要使能
编译有这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端也能看到