Android 设备侧usb驱动开发
2012-06-19 19:43
169 查看
设备初始化:
/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
/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
相关文章推荐
- Android 设备侧usb驱动开发
- Android字符设备驱动开发基于高通msm8916【原创 】
- 初入android驱动开发之网络设备以太网(一)
- WDF开发USB设备驱动教程(1)
- 转 Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- Android/Linux驱动开发之使用dev_dbg调试设备驱动
- USB设备驱动开发-USB协议相关(一)
- WDF开发USB设备驱动教程(2)
- USB设备驱动开发-USB协议相关
- B4A 或其它Android开发平台连接USB设备进行调试
- Linux USB 驱动开发(一)—— USB设备基础概念
- Android内核开发 Linux C编程调用内核模块设备驱动
- Windows CE下USB设备驱动开发的一些基础知识
- usb驱动开发4之总线设备驱动模型
- WDF开发USB设备驱动教程(3)
- 初入android驱动开发之字符设备(四-中断)
- Linux USB 驱动开发(一)—— USB设备基础概念
- 学习windows驱动(WDF USB设备驱动开发)
- 四极管: Android开发调试I2C设备驱动 i2cdetect 工具的使用
- Windows CE下USB设备驱动开发的一些基础知识