解决usb虚拟u盘⽆法probe驱动的问题--Apple的学习笔记
1.前⾔:
⼀开始想使⽤usb gadget来虚拟⽹卡的,结果按⽹上的简单配置后,⽆法使⽤,Document中貌似没看到什么特别有帮助的,所以先降低难度使⽤usb gadget来虚拟⼀个u盘。其它的之后再慢慢深⼊。先进⼊Kernel驱动实战
2.在使⽤modprobe时候思考如何⽤insmod
modprob⽐insmod好⽤,但是需要知道原理
linux设备驱动有两种加载⽅式insmod和modprobe,下⾯谈谈它们⽤法上的区别
1、insmod⼀次只能加载特定的⼀个设备驱动,且需要驱动的具体地址。
2. modprobe则可以⼀次将有依赖关系的驱动全部加载到内核。不加驱动的具体地址,但需要在安装⽂件系统时是按照make modues_install的⽅式安装驱动模块的。驱动被安装在/lib/modules/$(uname -r)/...下。写法为:
modprob drv
modprobe 和insmod⼀样都是⽤来加载内核module的
不过modprobe⽐较智能,它可以根据module的依赖性来⾃动为你加载;⽽insmod就做不到这点。智能识别的原理是什么呢!
⼿⼯⼜应该如何加载模块呢!随意加载就会报错。
香菇滑鸡粥⽅法⼀
在编译后,modinfo xx.ko可以查看详细信息。其中depends ⼀项我们可以看到该模块依赖 x模块。
⽅法⼆
modules.dep⽂件是⼀个依赖关系图,在此⽂件的⽬录中,通过搜索命令可以知道依赖关系。
grep -nr phy-am335x.ko modules.dep
2. 添加模块后不成功,需要调试
常⽤的就是打印信息,为了输出pr_debug和dev_debug驱动加载的调试信息配置kernel
image.png
7.总结
通过如下3个步骤,完成bb black虚拟u盘的操作
modprobe usbcore
modprobe usb_f_mass_storage
modprobe g_mass_storage file=/dev/mmcblk0p1 removable=1
Welcome to Buildroot
buildroot login: root
# cd /sys/bus
# ls
clockevents  gpio          mmc_rpmb      scsi          virtio
clocksource  hid          nvmem        sdio          workqueue
container    i2c          pci          serial
cpu          mdio_bus      pci-epf      soc
event_source  mmc          platform      spi
# modprobe usbcore
[  71.089616] bus: 'usb': registered
[  71.093291] bus: 'usb': add driver usbfs
[  71.097310] usbcore: registered new interface driver usbfs
[  71.102893] bus: 'usb': add driver hub
[  71.106705] usbcore: registered new interface driver hub
[  71.112118] bus: 'usb': add driver usb
[  71.115924] usbcore: registered new device driver usb
趋势的近义词
# cd /sys/bus/usb
# ls
devices            drivers_autoprobe  uevent
败笔
drivers            drivers_probe
# cd devices/
# ls
# cd ..巧舌如簧的意思
# ls
devices            drivers_autoprobe  uevent气象万千
drivers            drivers_probe
# cd /sys/class/udc
# ls
musb-hdrc.0
# cd musb-hdrc.0/
# ls
a_alt_hnp_support  device            is_selfpowered    srp
a_hnp_support      function          maximum_speed      state
b_hnp_enable      is_a_peripheral    power              subsystem
current_speed      is_otg            soft_connect      uevent
# cd ..
# cd ..
# cd /sys/bus/usb
# ls
devices            drivers_autoprobe  uevent
drivers            drivers_probe
# cd devices/
# modprobe usb_f_mass_storage
# [  167.200445] random: crng init done松花蛋拌豆腐
# modprobe g_mass_storage file=/dev/mmcblk0p1 removable=1
[  173.939807] driver_name is g_mass_storage
[  173.939818] go 2
[  173.945862] myUDC is found
[  173.948592] udc musb-hdrc.0: registering UDC driver [g_mass_storage]
[  173.955089] Mass Storage Function, version: 2009/09/11
[  173.960261] LUN: removable file: (no medium)
[  173.964622] device: 'lun0': device_add
[  173.968444] PM: Adding info for No Bus:lun0
[  173.972823] lun0: open backing file: /dev/mmcblk0p1
[  173.977734] LUN: removable file: /dev/mmcblk0p1
[  173.982322] Number of LUNs=1
[  173.985233] g_mass_storage gadget: adding config #1 'Linux File-Backed Storage'/c7b2a844
[  173.993389] g_mass_storage gadget: adding 'Mass Storage Function'/d03f0dd3 to config 'Linux File-Backed Storage'/c7b2a844 [  174.006354] g_mass_storage gadget: I/O thread pid: 116
[  174.011679] g_mass_storage gadget: cfg 1/c7b2a844 speeds: high full