Ubuntu Linux中连接Android真机调试

首先确保用数据线链接后能识别设备,输入:lsusb,可以看到类似输出

dorole@ubuntu:~$ lsusb
Bus 002 Device 006: ID 0bb4:0c87 High Tech Computer Corp.
Bus 002 Device 004: ID 0402:9665 ALi Corp.
Bus 002 Device 003: ID 04fc:05da Sunplus Technology Co., Ltd
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0951:1643 Kingston Technology
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

这样手机的vendor id和描述就出来了,第一条即是,htc的机器硬件id一般都是0bb4。

在/etc/udev/rules.d/目录下建立50-android.rules规则文件,内容如下:

SUBSYSTEM==”usb”, ATTR{idVendor}==”0bb4″, MODE=”0666″

修改后重启udev服务

dorole@ubuntu:/$ sudo /etc/init.d/udev restart

切换到android sdk的platform-tools目录下,重启adb服务,再输入adb devices就应该能找到设备了。

dorole@ubuntu:~/android-sdk-linux_x86/platform-tools$ sudo ./adb kill-server
dorole@ubuntu:~/android-sdk-linux_x86/platform-tools$ sudo ./adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
dorole@ubuntu:~/android-sdk-linux_x86/platform-tools$ sudo ./adb devices
List of devices attached
SH0CDPL00575    device

这样就可以在eclipse中的DDMS来调试android真机了,有些步骤是需要root权限的。

在DD-WRT上调整PPPoE拨号参数

  继上次将路由刷到dd-wrt后,一直琢磨着如何绕过网管对路由的限制。开始以为是对非windows主机拨号都有限制,后来用wireshark抓包发现只是接入设备对echo请求没有响应,导致超时后自动断开。在windows下默认不发送请求,只回应来自对方的echo请求,大约6秒一次。找到问题的根源后,在ubuntu下修改了ppp配置选项,文件位于/etc/ppp/options,找到如下两行:

lcp-echo-interval 30

lcp-echo-failure 4

  这两个参数表示在一个lcp链路协议中,pppd会每隔30秒发出一个echo请求包到对方。一般来说对方在收到echo请求后需要回应一个echo应答。如果发送4次请求后都没有收到有效的回应,pppd便会中断这次连接,也就是在两分钟左右就会断网,与之前遇到的现象一致。既然用不到这两个参数,就可以在前面加#号注释掉,保存后重新拨号一切正常了。

  既然在ubuntu下成功了,那基于linux系统的TEW-652BRP路由器应该也是可以这样搞定,在web管理界面将路由器的广域网设置为PPPoE拨号上网,输入正确的账号密码,保存后再通过ssh登录,查看进程发现pppd已经运行了,后面的参数可以看到调用的配置文件路径。

root@Dorole Network:~# ps | grep ppp
1074 root      1324 S    pppd file /tmp/ppp/options.pppoe

  打开/tmp/ppp/options.pppoe

root@Dorole Network:~# cat /tmp/ppp/options.pppoe
plugin /usr/lib/rp-pppoe.so
nic-eth1
noccp
nomppc
noipdefault
noauth
defaultroute
noaccomp
nobsdcomp
nodeflate
nopcomp
nomppe
usepeerdns
user ‘…’
password ‘…’
default-asyncmap
mtu 1492
mru 1492
persist
lcp-echo-interval 5
lcp-echo-failure 10

  最后面的两行就是要修改的地方了,不过这里要修改比较麻烦。/tmp目录下的东西是在开机后自动生成的,每次重启都要修改那也太麻烦了,/etc/config目录下也有个配置文件存在,且无法修改,后来想把固件在电脑上解开修改完再刷进去,但是现有的工具只支持linksys的固件,拿源代码编译更麻烦。最后想到dd-wrt是支持脚本的,于是弄了一段shell让它每次开机都自动运行。

cat /tmp/ppp/options.pppoe | sed -e "s/lcp/#lcp/g" > /tmp/ppp/options.pppoe.new
if [ -f "/tmp/ppp/options.pppoe.new" ]; then
killall redial
killall pppd
sleep 10
/usr/sbin/pppd file /tmp/ppp/options.pppoe.new > /dev/null
fi

  将options.pppoe文件中的lcp替换成#lcp也就是注释了那两个参数,重启pppd加载新的配置文件,经过这样处理后上网正常了。