设备初始化:

/kernel/arch/arm/mach-msm/board-msmxxxx.c

USB驱动文件文件:

/kernel/drivers/usb/gadget/android.c-------复合设备,所有的f开头的接口设备向android.c注册,由android.c控制enable/disable

/kernel/drivers/usb/gadget/f_mass_storage.c--------cdrom/u盘设备,由cdrom参数控制,如果为1上报cdrom,否则上报u盘。

/kernel/drivers/usb/gadget/f_ecm.c--------ecm网络设备,设备侧枚举为usb0

/kernel/drivers/usb/gadget/f_adb.c--------adb驱动

/kernel/drivers/usb/gadget/f_serial.c--------比较常用和通用的一个驱动程序,可以枚举出一个ttyGS*的设备在设备侧,它可以作为诊断口,modem口,at口来使用。

/kernel/drivers/usb/gadget/f_diag.c--------诊断口,msm7x27a作为一个双cpu共享外设的soc,这个口比较特别,还没有来得及了解。

/kernel/drivers/usb/gadget/f_rndis.c--------remotendis设备驱动。Rndis不同于ecm驱动,它需要固定的占据interface 0和interface1两个接口,否则无法正常工作,但rndis的优势也是明显的,在windows下,它可以实现“免驱”,vista以后,设备上报rndis类型接口,可以不用写pc侧驱动程序。

驱动parameter设置:

Static intset_pid(const char *val, struct kernel_param *kp);

Static intget_pid(char *buffer, struct kernel_param *kp);

Module_param_call(product_id,set_pid,get_pid);

MODULE_PARM_DESC(product_id,”USBdevice product id”);

为module android(android.c)增加一个parameter,通过读取这个parameter,获取当前android复合设备采用的是哪一个pid,通过设置pid,可以达到重新枚举usb复合设备,使用不同的功能组合。如pid:1000对应rndis,pid:1001对应rndis+u盘。

增加完以后,我们会看到多出一个/sys/module/android/parameters/ product_id的文件。

查看当前的设备pid:cat/sys/module/android/parameters/g_product_id

设置当前的设备pid:echo 9024> /sys/module/android/parameters/g_product_id

设备属性设置:

通过增加设备属性,可以达到设备的灵活配置,为f_mass_storage增加一个cdrom和description的设备属性,第一个用于将设备配置成为cdrom和光盘;第二个用于配置设备描述符,8+16+4个字符组成,用于设备的描述符。

StaticDEVICE_ATTR(cdrom,0644,fsg_show_cdrom,fsg_store_cdrom);

Rc=device_create_file(&curlun->dev,&dev_attr_cdrom);

增加完以后,我们会看到多出一个/sys/devices/platform/usb_mass_storage/lun0/cdrom文件,

设置当前的设备的cdrom属性为1—光盘:

echo 1>/sys/devices/platform/usb_mass_storage/lun0/cdrom

 

更多相关文章

  1. 使用adb出现假emulator的解决方法
  2. android things中与标准android系统不同的地方
  3. Qt on Android(安卓)Episode 2(翻译)
  4. android 接入USB输入设备后应用重跑onCreate
  5. Android(安卓)EditText 增加自定义过滤
  6. Mac系统中,Eclipse没有显示设备
  7. 如何判断Android设备是否为模拟器
  8. Android-低功耗蓝牙(BLE)-客户端(主机/中心设备)和服务端(从机/
  9. cubieboard刷机

随机推荐

  1. 锁住余额,为何还会更新异常?
  2. Spring 注解编程之模式注解
  3. 分享一些 Windows 平台上的神器
  4. 缘起 Dubbo ,讲讲 Spring XML Schema 扩展
  5. 聊聊对账系统的设计方案
  6. 还不知道如何使用 IDEA ?教你三招快速掌握
  7. 聊聊如何从零开始自学编程
  8. 从源码解析 Spring JDBC 异常抽象
  9. 为什么将 Intellij IDEA 作为日常开发的
  10. 支付路由系统演进史