我在android4.0.4上面添加的ethernet支持,做法是按照android-x86的patch来加的。现在出现了网线不能热插拔的问题,第一次热插拔网是通的,从第二次开始网就断了。
以下是开机时候的信息:
V/EthernetStateTracker( 892): Starts...
V/EthernetStateTracker( 892): Successed
V/EthernetStateTracker( 892): start to monitor the ethernet devices
I/EthernetStateTracker( 892): reset device eth0
I/EthernetStateTracker( 892): trigger dhcp for device eth0
D/EthernetStateTracker( 892): DhcpHandler: DHCP request started
I/EthernetStateTracker( 892): reset device eth0
I/EthernetStateTracker( 892): trigger dhcp for device eth0
E/EthernetStateTracker( 892): DhcpHandler: DHCP request failed: Timed out waiting for dhcpcd to start == mzhu property_set( ctl.start ==dhcpcd_eth0==)TOE2: toe2_isr()=>isr(0x00001C23).
D/EthernetStateTracker( 892): DhcpHandler: DHCP request started
I/EthernetStateTracker( 892): report new state DISCONNECTED on dev eth0
V/EthernetStateTracker( 892): update network state tracker
I/EthernetStateTracker( 892): report new state DISCONNECTED on dev eth0
V/EthernetStateTracker( 892): update network state tracker
I/EthernetStateTracker( 892): received disconnected events, stack=false HW=false
I/EthernetStateTracker( 892): received disconnected events, stack=false HW=false
V/EthernetStateTracker( 892): report interface is up for eth0
I/EthernetStateTracker( 892): interface up event, kick off connection request
I/EthernetStateTracker( 892): trigger dhcp for device eth0
I/EthernetStateTracker( 892): report new state CONNECTED on dev eth0
V/EthernetStateTracker( 892): update network state tracker
I/EthernetStateTracker( 892): received HW connected, stack=false HW=false
D/EthernetStateTracker( 892): DhcpHandler: DHCP request succeeded: addr: 192.168.9.192/24 mRoutes: 0.0.0.0/0 -> 192.168.9.254 | dns: 192.168.9.11,192.168.9.10 dhcpServer: 192.168.9.250 leaseDuration: 7200
I/EthernetStateTracker( 892): received configured succeeded, stack=false HW=true
D/EthernetStateTracker( 892): DhcpHandler: DHCP request started
E/EthernetStateTracker( 892): DhcpHandler: DHCP request failed: Timed out waiting for DHCP to finish
以下是第一次热插拔信息。
I/EthernetStateTracker( 892): report new state DISCONNECTED on dev eth0
V/EthernetStateTracker( 892): update network state tracker
I/EthernetStateTracker( 892): received disconnected events, stack=false HW=true
I/EthernetStateTracker( 892): stop dhcp and interface
V/EthernetStateTracker( 892): report interface is up for eth0
I/EthernetStateTracker( 892): interface up event, kick off connection request
I/EthernetStateTracker( 892): trigger dhcp for device eth0
D/EthernetStateTracker( 892): DhcpHandler: DHCP request started
D/EthernetStateTracker( 892): DhcpHandler: DHCP request succeeded: addr: 192.168.9.192/24 mRoutes: 0.0.0.0/0 -> 192.168.9.254 | 0.0.0.0/0 -> 192.168.9.254 | dns: 192.168.9.11,192.168.9.10 dhcpServer: 192.168.9.250 leaseDuration: 7200
I/EthernetStateTracker( 892): received configured succeeded, stack=false HW=false
以下是第二次热插拔信息:
I/EthernetStateTracker( 892): report new state DISCONNECTED on dev eth0
V/EthernetStateTracker( 892): update network state tracker
I/EthernetStateTracker( 892): received disconnected events, stack=true HW=false
V/EthernetStateTracker( 892): report interface is up for eth0
I/EthernetStateTracker( 892): interface up event, kick off connection request
I/EthernetStateTracker( 892): trigger dhcp for device eth0
D/EthernetStateTracker( 892): DhcpHandler: DHCP request started
E/EthernetStateTracker( 892): DhcpHandler: DHCP request failed: Timed out waiting for DHCP to finish
    我追了一下源码,发现rundhcp后好像会读到/system/etc/dhcpcd/dhcpcd.conf这个文件,但是我的这个文件只有一下两行:
interface wlan0
option subnet_mask, routers, domain_name_servers
   是不是应该在这里加入ethernet的信息?如果是,应该怎么加?
   麻烦各位大侠指点下,谢谢

解决方案 »

  1.   

    请参考以下链接的第 八 部分http://blog.csdn.net/kitty6620/article/details/7986852
      

  2.   


    按照上面改了之后,waitforevent返回来一个不知道什么东西啊,也不是空值:
    V/EthernetMonitor(  892): get event 
    V/EthernetMonitor(  892): go poll events
    网还是不通。请问你有尝试过这样修改吗?
      

  3.   


    我在没有参照你给的链接修改之前,每次插拔网线都能收到PHY_UP这个事件的,就是收到这个事件之后,现在是前面两次热插拔都能正常,从第三次开始,拔掉网线后,EthernetStateTracker收到EVENT_HW_DISCONNECTED事件后不执行setState这个函数来执行stopInterface去挺到dhcp这个服务了(前面两次热插拔是有执行这些的),再接上网线网就不通了,报E/EthernetStateTracker( 892): DhcpHandler: DHCP request failed: Timed out waiting for DHCP to finish这个错误。但是这个时候如果手动停到dhcp再启动它,网又能正常工作了。非常奇怪的地方是EthernetStateTracker收到EVENT_HW_DISCONNECTED事件后只有执行setState这条路可以走,不晓得它为什么不走了
      

  4.   


    错了,是有到setState这里的,只是因为mNetworkInfo.isConnected() != state这个条件不成立,所以什么事情都没做
      

  5.   

    在4.1.1上按照这个思路修改,测试不可以。Joyce_Qin_1986,到最后搞定了没?