1. 程式人生 > >marsboard Android 4.4 新增開機自動設定靜態IP地址

marsboard Android 4.4 新增開機自動設定靜態IP地址

最近在幫忙除錯Android裝置marsboard,需求就是開機設定靜態IP地址。

除錯過程與查找了很多資料,經過兩天的測試終於成功了。

首先,init.rc檔案最後新增開機自啟動:

on property:sys.boot_completed=1    //系統啟動完成後會執行以下命令設定靜態IP
 /sbin/busybox ifconfig eth0 up
    /sbin/busybox ifconfig eth0 192.168.1.48 netmask 255.255.255.0 up
    /sbin/busybox route add default gw 192.168.1.1 dev eth0
    setprop net.eth0.dns1 218.30.19.40 
    setprop net.eth0.dns2 59.75.42.2

這樣啟動後,系統本來應該可以設定靜態IP的了。可惜init.rc裡有這樣一個服務:

service dhcpcd_eth0 /system/bin/dhcpcd -ABKL  
    class main
    disabled
    oneshot

這個服務在插拔網線時都會執行一次 /system/bin/dhcpcd,設定動態IP,就這樣導致eth0一直沒有IP地址。

後面想了個折中的辦法,就是修改這個服務:

service dhcpcd_eth0 /system/bin/setStaticIP.sh //把原先的“ /system/bin/dhcpcd -ABKL”改為我們自己的靜態IP地址指令碼/system/bin/setStaticIP.sh
    class main
    disabled
    oneshot

#on property:sys.boot_completed=1    //系統啟動完成後會執行以下命令設定靜態IP
#  /sbin/busybox ifconfig eth0 up
#    /sbin/busybox ifconfig eth0 192.168.1.48 netmask 255.255.255.0 up
#    /sbin/busybox route add default gw 192.168.1.1 dev eth0
#    setprop net.eth0.dns1 218.30.19.40 
#    setprop net.eth0.dns2 59.75.42.2

這樣自己每次插拔網線就會執行一次我們自己的指令碼/system/bin/setStaticIP.sh

記得把指令碼setStaticIP.sh放到/system/bin/目錄,並且設定好執行許可權:chmod 777 /system/bin/setStaticIP.sh

/system/bin/setStaticIP.sh內容如下:

#!/system/bin/sh

# eth0 network setting static ip address
    /sbin/busybox ifconfig eth0 up
    /sbin/busybox ifconfig eth0 192.168.1.48 netmask 255.255.255.0 up
    /sbin/busybox route add default gw 192.168.1.1 dev eth0
    setprop net.eth0.dns1 218.30.19.40 
    setprop net.eth0.dns2 59.75.42.2
    echo "set static ip done"

注意:千萬別用windows上編輯器編寫setStaticIP.sh,不然會出現no such file。原因就是window編輯後每行都有一個^M結尾的(推薦使用VIM編寫,VIM可以看到^M字元)。

我就是因為這樣,出現no such file。解決辦法:fromdos setStaticIP.sh

除錯過程使用過的一些編譯命令:

Android比較重要的三個img檔案:
make systemimage - system.img
make userdataimage - userdata.img
make ramdisk - ramdisk.img
make snod - 快速打包system.img (with this command, it will build a new system.img very quickly. well, you cannot use “make snod” for all the situations. it would not check the dependences. if you change some code in the framework which will effect other applications)
因為
system.img 是 從 out/target/product/xxxx/system 做出來的。
如果改了 這個 folder 的內容,想要重新產生 system.img。不要管 system folde 裡面的 file 的 dependency,可以用 snod 這個 target:
make snod

除錯命令:

start dhcpcd_eth0 //手動執行一次這個服務

stop dhcpcd_eth0 //手工停止這個服務

掛載分割槽命令:

# mount //檢視掛載分割槽情況和許可權

# mount -o remount,rw rootfs /

# mount -o remount,ro /dev/block/mtdblock0 /system 

能否掛載成功,涉及許可權問題。init.rc有相關的設定,可以參考以下:


參考網頁:

http://blog.chinaunix.net/uid-24856020-id-3389654.html

http://www.360doc.com/content/11/1213/19/3700464_172018977.shtml

http://www.tuicool.com/articles/Nbu6Bv