- /sys/kernel/config/usb_gadget/camera 目录介绍
- /sys/kernel/config/usb_gadget:这是USB gadget配置的根目录(USB gadget是指那些能够模拟成USB设备的嵌入式系统)
- camera:这是创建的一个特定的USB gadget实例的名字,代表了一个虚拟的USB设备,你可以通过配置它来模拟一个真实的USB设备,可以创建多个实例如
创建第一个实例(摄像头)
sudo mkdir /sys/kernel/config/usb_gadget/camera# 创建功能目录:uvc.usb0:表示USB Video Class (UVC) 功能,用于模拟摄像头 # 如果是 mass_storage.usb0 表示你希望在这个USB gadget实例中启用一个Mass Storage功能(因为是mass_storage前缀)。Mass Storage功能通常用于模拟USB存储设备,如U盘或SD卡 sudo mkdir /sys/kernel/config/usb_gadget/camera/functions/uvc.usb0#设置设备类(bDeviceClass): 0x00:未指定、0x01:音频设备、0x02:通信设备、0x03:人机接口设备(HID)、0x05:物理层设备 # 0x06:图像设备、0x08:存储设备、0x09:Hub设备、0x0E:视频设备、0xEF:杂项设备 sudo echo 0x0E > /sys/kernel/config/usb_gadget/camera/bDeviceClass#设置设备子类(bDeviceSubClass) 具体的子类代码取决于设备类 sudo echo 0x03 > /sys/kernel/config/usb_gadget/camera/bDeviceSubClass#设置设备协议(bDeviceProtocol)具体的协议代码也取决于设备类和子类 sudo echo 0x02 > /sys/kernel/config/usb_gadget/camera/bDeviceProtocol
配置第二个实例(存储设备)
sudo mkdir /sys/kernel/config/usb_gadget/storage sudo mkdir /sys/kernel/config/usb_gadget/storage/functions/mass_storage.usb1 sudo echo 0x08 > /sys/kernel/config/usb_gadget/storage/bDeviceClass sudo echo 0x06 > /sys/kernel/config/usb_gadget/storage/bDeviceSubClass sudo echo 0x50 > /sys/kernel/config/usb_gadget/storage/bDeviceProtocol
- mkdir /sys/kernel/config/usb_gadget/camera/functions/ffs.adb 用于在内核配置接口中定义一个新的USB功能。这里内核会识别这是一个FunctionFS功能,因为 ffs 是FunctionFS的缩写(mass_storage 前缀表示Mass Storage功能),当你创建一个名为 ffs.adb 的子目录时,内核会认为你希望启用一个FunctionFS功能,并为其创建相应的文件系统接口。并且执行这个它会去默认目录寻找 g_ffs.ko 并加载(如果自己加载就是 insmod g_ffs.ko idVendor=0x1D6B idProduct=0x0001 iSerialNumber=123456789012 functions=adb)
- 为了让这个新的功能可以被用户空间使用,要把它挂载出去 : mkdir -p /dev/usb-ffs/adb -> mount -t functionfs adb /dev/usb-ffs/adb
/dev/usb-ffs/adb
:这个路径是内核为FunctionFS功能提供的一致性挂载点。内核会自动创建这个路径,并且它是一个临时的文件系统挂载点,用于用户空间程序与USB设备进行通信,/dev/usb-ffs/adb
是由内核动态生成的,通常与你在/sys/kernel/config/usb_gadget/camera/functions
目录下创建的子目录名称相对应
- 为了让这个新的功能可以被用户空间使用,要把它挂载出去 : mkdir -p /dev/usb-ffs/adb -> mount -t functionfs adb /dev/usb-ffs/adb