usb适配

最后更新于:2022-04-01 23:27:11

# usb适配简记 ##usb调试信息太多,删减之 ~~~ [ 232.061924] [sw_hcd]: sw_hcd_urb_dequeue, sw_hcd(df8a28ec, 0x0, 0x3f),urb(dbd34f00, 1514, 0), dev = 3, ep = 2, dir = in [ 232.071179] sw_hcd_cleanup_urb: qh(0xd0df6e40,0x2,0x2), urb(0xdbd34f00,1514,0), ep(0xdf8a2a00,3,0xd0df6e40,0x (null)) ~~~ 出处在 ~~~ ./linux-3.0/drivers/usb/sun5i_usb/hcd/core/sw_hcd_host.c: DMSG_INFO("[sw_hcd]: sw_hcd_urb_dequeue, sw_hcd(%p, 0x%d, 0x%x)," ./linux-3.0/drivers/usb/sun5i_usb/hcd/core/sw_hcd_host.c: DMSG_INFO("sw_hcd_cleanup_urb: qh(0x%p,0x%x,0x%x), urb(0x%p,%d,%d), ep(0x%p,%d,0x%p,0x%p)\n", ~~~ 修改linux-3.0/drivers/usb/sun5i_usb/include/sw_usb_debug.h ~~~ /* 普通信息打印 */ #if 0 #define DMSG_INFO DMSG_PRINT #else #define DMSG_INFO(...) #endif ~~~ ##3g网卡适配 安卓下开启3g网卡主要步骤是 1. 在驱动中勾选usb串口,pppd等 2. 调试通过usb_modeswitch, 模式切换后自动或者手动出现3个ttyUSBx设备 3. evdo脚本拨号 4. ###在内核配置里开启串口驱动,pppd驱动等 `Device Drivers -> USB support -> USB Serial Converter support USB driver for GSM and CDMA modems` ~~~ <*> PPP (point-to-point protocol) support [*] PPP multilink support (EXPERIMENTAL) [*] PPP filtering <*> PPP support for async serial ports <*> PPP support for sync tty ports <*> PPP Deflate compression <*> PPP BSD-Compress compression <*> PPP MPPE compression (encryption) (EXPERIMENTAL) <*> PPP over Ethernet (EXPERIMENTAL) <*> PPP over IPv4 (PPTP) (EXPERIMENTAL) <*> PPP over L2TP (EXPERIMENTAL) <*> PPP on L2TP Access Concentrator <*> PPP on PPTP Network Server ~~~ ###先在电脑上试着驱动3g网卡 : 插上后查看内核信息: ~~~ [ 8497.458906] usb 2-2.1: new full-speed USB device number 12 using uhci_hcd [ 8497.726318] usb 2-2.1: New USB device found, idVendor=1d09, idProduct=1000 [ 8497.726323] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 8497.726325] usb 2-2.1: Product: USB MMC Storage [ 8497.726327] usb 2-2.1: Manufacturer: Qualcomm, Incorporated [ 8497.726329] usb 2-2.1: SerialNumber: 000000000002 [ 8497.729026] usb-storage 2-2.1:1.0: USB Mass Storage device detected [ 8497.729192] scsi host43: usb-storage 2-2.1:1.0 [ 8498.732291] scsi 43:0:0:0: Direct-Access Qualcomm MMC Storage 2.31 PQ: 0 ANSI: 2 [ 8498.738204] scsi 43:0:0:1: CD-ROM Qualcomm MMC Storage 2.31 PQ: 0 ANSI: 2 [ 8498.741198] sd 43:0:0:0: Attached scsi generic sg3 type 0 [ 8498.835612] sd 43:0:0:0: [sdb] Attached SCSI removable disk [ 8500.089041] sr 43:0:0:1: [sr2] scsi3-mmc drive: 357x/308x writer cdda [ 8500.089184] sr 43:0:0:1: Attached scsi CD-ROM sr2 [ 8500.089287] sr 43:0:0:1: Attached scsi generic sg4 type 5 [ 8500.361385] sr 43:0:0:1: [sr2] CDROM (ioctl) error, command: [ 8500.361391] Xpwrite, Read disk info 51 00 00 00 00 00 00 00 02 00 [ 8500.361395] sr 43:0:0:1: [sr2] Sense Key : Hardware Error [current] [ 8500.361397] sr 43:0:0:1: [sr2] Add. Sense: No additional sense information ~~~ lsusb看网卡型号: > Bus 002 Device 007: ID 1d09:1000 TechFaith Wireless Technology Limited 可以看到被识别成了安装光盘,sr2,手动弹出光盘后就变为正常的设备: eject sr2 //有些网卡需要发送特别的指令,需要使用usb_modeswitch切换模式 > Bus 002 Device 013: ID 1d09:e003 TechFaith Wireless Technology Limited 这就和usb_modeswitch的效果一样 ~~~ [ 8662.455084] usb 2-2.1: USB disconnect, device number 12 [ 8666.948103] usb 2-2.1: new full-speed USB device number 13 using uhci_hcd [ 8667.220302] usb 2-2.1: New USB device found, idVendor=1d09, idProduct=e003 [ 8667.220305] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=4 [ 8667.220307] usb 2-2.1: Product: CDMA 1x/EVDO Rev.A Device [ 8667.220309] usb 2-2.1: Manufacturer: Co.,Ltd [ 8667.220310] usb 2-2.1: SerialNumber: 000000000002 [ 8667.240512] usb-storage 2-2.1:1.3: USB Mass Storage device detected [ 8667.246943] scsi host44: usb-storage 2-2.1:1.3 [ 8668.253167] scsi 44:0:0:0: Direct-Access Qualcomm MMC Storage 2.31 PQ: 0 ANSI: 2 [ 8668.255704] sd 44:0:0:0: Attached scsi generic sg3 type 0 [ 8668.271240] sd 44:0:0:0: [sdb] Attached SCSI removable disk ~~~ PID=0x1D09, VID=0xe0003 在drivers/usb/serial/option.c里加入PID,VID(转换后的) ~~~ //发现华为一个型号的PID一样。。 #define HUAWEI_PRODUCT_ET128 0x1D09 #define HUAWEI_VENDOR_ID 0x12D1 //自己加一个吧 595 static const struct usb_device_id option_ids[] = { 596 { USB_DEVICE(0xe0003, 0x1d09) }, //ID 1d09:1000 TechFaith Wireless Technology Limited ~~~ Device Monitoring Studio抓取3G网卡MessageContent http://blog.chinaunix.net/uid-29764914-id-5181529.html usb_modeswitch的使用(新版下的规则文件下载) http://blog.csdn.net/yang1982_0907/article/details/45969179 但是切换后仍然没有ttyUSBx, 需要手工增加: ~~~ modprobe usb_wwan modprobe option echo "1d09 e003" > /sys/bus/usb-serial/drivers/option1/new_id ~~~ 运行后出现了ttyUSB0~2 可以将它加入到udev规则中,在/lib/udev/rules.d/50-udev-default.rules(也可能再etc目录中)后面添加 ACTION=="add", SUBSYSTEM=="usb",SYSFS{idVendor}=="1d09", SYSFS{idProduct}=="1000", RUN+="/usr/sbin/usb_modeswitch -c /etc/usb_modeswitch.conf" RUN+="echo '1d09 e003' > /sys/bus/usb-serial/drivers/option1/new_id" //安卓下已经自带 ~~~ vim /etc/usb_modeswitch.d/1d09_1000 DefaultVendor= 0x1d09 DefaultProduct= 0x1000 TargetVendor= 0x1d09 TargetProduct= 0xe003 StandardEject=1 CheckSuccess= 10 #wait 10s ~~~ 然后进行拨号,在/etc/ppp/peers目录下创建新文件evdo: ~~~ mkdir /etc/ppp/peers/ busybox vi /etc/ppp/peers/evdo ~~~ ~~~ /dev/ttyUSB0 115200 nodetach lock user "ctnet@mycdma.cn" password "vnet.mobi" crtscts show-password usepeerdns noauth noipdefault novj novjccomp noccp defaultroute ipcp-accept-local ipcp-accept-remote connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/evdo-connect-chat' #connect '/system/bin/chat -s -v -f /etc/ppp/peers/evdo-connect-chat' #android ~~~ 再创建evdo-connect-chat `busybox vi /etc/ppp/peers/evdo-connect-chat` ~~~ TIMEOUT 2 ABORT 'NO CARRIER' ABORT 'ERROR' ABORT 'NO DIALTONE' ABORT 'BUSY' ABORT 'NO ANSWER' "" ATE1 "" "AT+CFUN=1" OK-AT-OK ATD#777 CONNECT '' ~~~ 输入命令pppd call evdo&就可以上网了,断开网络就输入poff。 输出的拨号信息: ~~~ pppd call evdo timeout set to 2 seconds abort on (NO CARRIER) abort on (ERROR) abort on (NO DIALTONE) abort on (BUSY) abort on (NO ANSWER) send (ATE1^M) send (AT+CFUN=1^M) expect (OK) ^M OK -- got it send (ATD#777^M) expect (CONNECT) ^M AT+CFUN=1^M^M OK^M ATD#777^M^M CONNECT -- got it send (^M) Serial connection established. Using interface ppp0 Connect: ppp0 <--> /dev/ttyUSB0 CHAP authentication succeeded: OK CHAP authentication succeeded local IP address 10.100.35.16 remote IP address 125.88.103.85 primary DNS address 114.114.114.114 secondary DNS address 223.5.5.5 ^CTerminating on signal 2 Connect time 0.2 minutes. Sent 355 bytes, received 126 bytes. Connection terminated. ~~~ ###安卓上驱动 安卓上串口和dmesg的信息有限,主要看logcat 首次尝试pppd call evdo,log信息如下: `pppd ( 1230): Can't create lock file /var/lock/LCK..ttyUSB0` 排查发现根本没有/var/lock目录,于是新建/var/run和/var/lock目录 ~~~ mkdir /var mkdir /var/run mkdir /var/lock ~~~ 重新拨号,dmesg提示: ~~~ timeout set to 2 seconds abort on (NO CARRIER) abort on (ERROR) abort on (NO DIALTONE) abort on (BUSY) abort on (NO ANSWER) send (ATE1^M) send (AT+CFUN=1^M) expect (OK) ATE1^M^M OK -- got it send (ATD#777^M) expect (CONNECT) ^M AT+CFUN=1^M^M OK^M ATD#777^M^M CONNECT -- got it send (^M) ~~~ logcat -v time提示 ~~~ 01-02 08:01:51.419 I/pppd ( 1195): Serial connection established. 01-02 08:01:51.429 D/pppd ( 1195): using channel 1 01-02 08:01:51.479 I/pppd ( 1195): Using interface ppp0 01-02 08:01:51.479 I/pppd ( 1195): Connect: ppp0 <--> /dev/ttyUSB0 01-02 08:01:52.179 I/pppd ( 1195): CHAP authentication succeeded: OK 01-02 08:01:52.299 I/pppd ( 1195): local IP address 10.100.34.51 01-02 08:01:52.299 I/pppd ( 1195): remote IP address 125.88.103.85 01-02 08:01:52.299 I/pppd ( 1195): primary DNS address 114.114.114.114 01-02 08:01:52.299 I/pppd ( 1195): secondary DNS address 223.5.5.5 ~~~ ifconfig可见ppp0设备: ~~~ ppp0 Link encap:Point-to-Point Protocol inet addr:10.100.46.132 P-t-P:125.88.103.85 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1430 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:54 (54.0 B) TX bytes:54 (54.0 B) ~~~ 此时已经可以ping 通114.114.114.114,但无法解析域名 ~~~ busybox vi init.sun5i.rc setprop "net.dns1" "8.8.8.8" setprop "net.dns2" "8.8.4.4" ~~~ ###安卓上3g网卡自动加载总结 0. 切换上网卡状态(/etc/usb_modeswitch.d/1d09_1000自动完成) 1. 创建ttyUSB0等串口 `echo "1d09 e003" > /sys/bus/usb-serial/drivers/option1/new_id` 2. /etc/ppp/peers/evdo /etc/ppp/peers/evdo-connect-chat 拨号脚本(创建一次即可) 3. mkdir /var /var/run /var/lock 创建临时目录 4. pppd call evdo& 拨号上网,并设置dns 0,已经自动完成 1,需要在init.sun5i.rc里加上初始化 ~~~ on boot #echo "1d09 e003" > /sys/bus/usb-serial/drivers/option1/new_id //太早执行无效 exec /system/bin/sh /system/etc/ppp.sh //这里延时到开机执行 ~~~ 2, 在sdk里加上对应的脚本 相关文件在device/softwinner/common/rild里,需要修改上层的sw-common.mk来拷贝文件到system分区 ~~~ PRODUCT_COPY_FILES += \ device/softwinner/common/rild/ip-down:system/etc/ppp/ip-down \ device/softwinner/common/rild/ip-up:system/etc/ppp/ip-up \ device/softwinner/common/rild/call-pppd:system/etc/ppp/call-pppd \ device/softwinner/common/rild/peers/evdo:system/etc/ppp/peers/evdo\ device/softwinner/common/rild/peers/evdo-connect-chat:system/etc/ppp/peers/evdo-connect-chat\ ~~~ 3, 需要在init.sun5i.rc里加上初始化 ~~~ mkdir /var 0770 root system mount tmpfs none /var mode=0770,uid=0,gid=1000 mkdir /var/run 0750 root system mkdir /var/lock 0750 root system ~~~ 4, 需要在init.sun5i.rc里加上初始化 ~~~ service ppp /system/bin/pppd call evdo user root group system radio disabled oneshot setprop "net.dns1" "8.8.8.8" setprop "net.dns2" "8.8.4.4" ~~~
';