1. 程式人生 > >關於MIUI在小米手機上WiFi無法使用IPv6的解決方法

關於MIUI在小米手機上WiFi無法使用IPv6的解決方法

小米科技的 MIUI 經過對 android 深度優化後,顯得更加中國化[1]。但小米手機從 MIUI v4 之後就會出現 WiFi 無法使用 IPv6 的情況[2]。經測試,小米 2 和 2S 都無法正常使用 IPv6。

經過確認,是因為 MIUI 封裝的 init.qcom.sh 程式碼中有如下語句,導致高通晶片的手機無法正確配置 IPv6 路由[2]
#
# Suppress default route installation during RA for IPV6; user space will take
# care of this
#
for file in /proc/sys/net/ipv6/conf/*
do
echo 0 > $file/accept_ra_defrtr
done

臨時解決方法就是自己進入 /proc/sys/net/ipv6/conf/ 下,把 default、all 等資料夾下面的 accept_ra_defrtr 的值手動改成1,但 init.qcom.sh 啟動後會存於 ramdisk 中,即使手動修改相關的檔案,手機重啟後就會失效。

徹底解決這跟問題的方法有兩個,一是等待 MIUI 開發組更新相關程式碼,二是自己修改重新打包 boot.img。這些對於沒有任何程式設計經驗的使用者來說都不是個好方法。事實上,我們可以通過一些指令碼執行應用,比如SManager[3],設定開機執行特定指令碼改動相關檔案的取值。具體步驟如下:

1、Root MIUI 系統。開發版可以直接在「授權管理」中開啟 Root 許可權。穩定版的 MIUI 也可以取得 Root 許可權
[4],但一切因為 Root 後導致的問題,可能失去小米科技對手機的保修。

2、在 /system/etc/ 目錄下查詢 sysctl.conf 檔案,沒有的話新建一個,並編輯新增如下程式碼:
net.ipv6.conf.default.accept_ra_defrtr = 1

net.ipv6.conf.all.accept_ra_defrtr = 1

一般情況下,小米手機新增這兩條就可以,如果最後不行,而且 /proc/sys/net/ipv6/conf/ 目錄下還有 wlan0 資料夾的話,可以再新增如下語句:
net.ipv6.conf.wlan0.accept_ra_defrtr = 1

儲存關閉 sysctl.conf 檔案,並設定其許可權為 rw-r--r--;


3、安裝 SManager,執行 system/bin/ 中的 sysctl 檔案,如果目錄下沒有該檔案,可以安裝 busybox 解決[5]。具體配置如下圖:



4、設定允許 SManager 開機自啟動,問題解決。

歡迎討論,我的微博:@cnfy,我的Twitter:@cnfeiyang,我的Facebook:@cnfeiyang

參考資料:

[1] Wikipedia contributors, 'MIUI', Wikipedia, The Free Encyclopedia, 9 April 2013, 14:17 UTC, <http://en.wikipedia.org/w/index.php?title=MIUI&oldid=549515101> [accessed 16 April 2013]
[2] http://www.miui.com/thread-869982-1-1.html
[
3] https://play.google.com/store/apps/details?id=os.tools.scriptmanager
[4] http://bbs.xiaomi.cn/thread-7157132-1-1.html
[5] https://play.google.com/store/apps/details?id=stericson.busybox