AndroidUSB驱动分析一、USB驱动代码架构和使用1、代码简介USB驱动代码在/drivers/usb/gadget下,有三个文件:android.c,f_adb.c,f_mass_storage.c;g_android.ko是由这三个文件编译而来,其中android.c依赖于f_adb.c和f_mass_storage.c(这两个文件之间无依赖关系)。可在android.c中看到:staticint__initandroid_bind_config(structusb_configuration*c){structandroid_dev*dev=_android_dev;intret;printk(KERN_DEBUGandroid_bind_config\n);ret=mass_storage_function_add(dev-cdev,c,dev-nluns);if(ret)returnret;returnadb_function_add(dev-cdev,c);}2、驱动使用要使USBmassstorage连接到主机:打开/sys/devices/platform/usb_mass_storage/lun0/file文件,向file文件写入一个存储设备的路径,例如/dev/block/vold/179:0(major:minor)路径;这里的usb_mass_storage根据实际应用可以改的,由platform_device_register函数的参数决定。例如:staticstructplatform_devicefsg_platform_device={.name=usb_mass_storage,.id=-1,};staticvoid__inittegra_machine_init(void){....(void)platform_device_register(&fsg_platform_device);....}能够连接的设备数,由驱动中的nluns变量来控制,最多支持8个。二、USB插入检测三、USB代码分析1、USB初始化在android.c中分别注册adb和massstorage:staticint__initandroid_bind_config(structusb_configuration*c){structandroid_dev*dev=_android_dev;intret;printk(KERN_DEBUGandroid_bind_config\n);ret=mass_storage_function_add(dev-cdev,c,dev-nluns);if(ret)returnret;returnadb_function_add(dev-cdev,c);}2、往驱动写入lun信息在驱动中有staticDEVICE_ATTR(file,0444,show_file,store_file);这是负责读(cat/read)或直写(echo/write)设备属性文件的宏。3、USB连接到主机echo/dev/block/vold/179:0/sys/devices/platform/usb_mass_storage/lun0/file4、USB从主机断开echo/sys/devices/platform/usb_mass_storage/lun0/file