usb idVendor和idProduct,分别代表一个usb设备的 厂商编 号 产品编号 。也就是常说的Vid Pid。这个是唯一的,需要向USB Org缴费维持。 咱们的产品模拟了Google Nexus One的PID VID也就 是 18d1 4e12. 但是BP相关acm功能,因为BP申请了271f的VID,所以与BP相关的usb复合设备,功 能设定就不一样。 我们来看一下咱们的usb配置脚本,init.nufront-tl7689.usb.rc,里面的内容很 容易理解,在不同的 sys.usb.config下,配置不同的pid vid function.贴两段代码: //咱们模仿Google Nexus One的 adb,ums功能组合 on property:sys.usb.config=mass_storage,adb write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 18d1 //vid write /sys/class/android_usb/android0/idProduct 4e12 //pid write /sys/class/android_usb/android0/functions ${sys.usb.config} // function , gadget usb driver的配置信息 write /sys/class/android_usb/android0/enable 1 stop tty_trans_1 stop tty_trans_2 stop audio_tool_d start adbd setprop sys.usb.state ${sys.usb.config} // BP开启acm通讯的 gadget acm,adb功能组合,倍催的是,咱们的BP校准,用了 另外一个很相似的组合,audio-test, #for audio test on property:sys.usb.config=adb,acm write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 271f write /sys/class/android_usb/android0/idProduct 8703 write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/f_acm/instances 1 write /sys/class/android_usb/android0/enable 1 stop tty_trans_1 stop tty_trans_2 start audio_tool_d start adbd setprop sys.usb.state ${sys.usb.config} 所以,安全机,烧写系统完毕之后,变成了vid/pid 271f/8703。这个配置,在很 多人的机器里面,并不认识,所以ubuntu并不能帮助你的adb连接。这个时候,需 要配置一些信息: 第一步:检查udev udev简单介绍,是linux管理外部plug设备的子系统,能够自动识别插入系统的设 备,尤其是usb设备。它的识别规则放在/etc/udev /rules.d/目录下,都是一些 *.rules文件 里面包含规则。我们在这个目录下创建一个 51-android.rules的文件,并赋予操 作权限。 # sudo vim /etc/udev/rules.d/51-android.rules //why 51? 因 为rules文件头两个字符都是数字,规则是按照数字从小到大检索,很多发行版有 50-udev.rules,放50后面就是51,你可以随便改. 贴出我的51-android.rules,应该都能看懂吧,遇到不同的设备pid/vid就添加一 条。OWNER是你的登录用户名称。这个文件让你的登 录用户可以有udev下发现列表 中的设备的权限。 但是这样有可能不够,需要第二步。 SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4e12",MODE="0666",OWNER="nufront0182" SUBSYSTEM=="usb",ATTRS{idVendor}=="271f",ATTRS{idProduct}=="8702",MODE="0666",OWNER="nufront0182" SUBSYSTEM=="usb",ATTRS{idVendor}=="271f",ATTRS{idProduct}=="8703",MODE="0666",OWNER="nufront0182" 第二步:配置android主机默认目录 创建 ~/.android/adb_usb.ini,这个是和Google android 的adb server/client的检索相关。 # sudo vim ~/ .android/ adb_usb.ini 规则简单,#后面是注释,每一行代表一个vid,0xABCD类型,贴出 我的: #adb 0x271f 0x18d1 第三步:生效udev,插拔usb, kill adb server,最终adb 可以用。 # sudo service udev restart # sudo adb kill-server # sudo adb start-server # sudo adb shell