魅族M9买了一年半了吧,机器卡的厉害,尤其刷4.0之后连接电话都成问题。。。。表示很无奈也没辙,所以就换了个手机,想想穷?丝一枚还想玩,水果就算了吧,就买了个小米2S电信版(三网通吃,GSM WCDMA CDMA2000)。
但是回来用的都挺好,家里面路由上开了IPV6隧道,试试Google IPV6,找不到服务器,然后去小米论坛也没有相关修改,但是有个 wifi在ipv6环境下无法通过DHCP自动配置默认路由 里写到:
找到bug所在了,在根目录的/init.qcom.sh文件里有这么一段:
#
# 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
accept_ra_defrtr控制是否接受路由通告(RA, router anouncement)中的默认路由配置,设置成0则不接受路由通告中的默认路由,所以手机无法正确配置默认路由,导致了此帖子所述情况。
我查看了其它能够正确设置默认路由的手机,其启动脚本中没有类似的语句,且/proc/sys/net/ipv6/conf/*/accept_ra_defrtr的值均为1。所以,结论是,这段话导致了手机不能正确配置ipv6的默认路由。
经过在网上搜索,许多高通芯片的手机均存在无法正确配置ipv6默认路由的情况,因其启动脚本/init.qcom.sh中均有上述语句代码。
解决方案:
1. 删除上述代码。
2. 或者将其中的”echo 0″修改为“echo 1″
p.s:/init.qcom.sh启动后存在于ramdisk中,所以直接修改是无效的,需要在rom包中修改boot.img
p.s: 再顺便鄙视一下小米的码农们,这么一个小bug,搞了一个多月都没修复,效率堪忧啊!!!
这个应该是在MIUIV5之前就有的问题,目前最新开发版仍然存在IPV6不支持的问题,所以只能自己动手修改boot.img解决(需要用到linux系统)
P.S.:需要工具请自行百度……
首先解包boot.img
在终端中找到boot.img所在目录,输入命令split_bootimg.pl boot.img
这个时候在当前目录下会生成boot.img-kernel和boot.img-ramdisk.gz
这个时候建立一个文件夹,进入这个文件夹后输入命令
gzip -dc ../boot.img-ramdisk.gz | cpio -i
所有文件已经解包到当前文件夹
找到init.qcom.sh,将ipv6
echo 0 > $file/accept_ra_defrtr中的echo 0 改成echo 1
即
echo 1 > $file/accept_ra_defrtr
保存退出
然后对文件进行打包
find . | cpio -o -H newc | gzip > ../boot.img-ramdisk.gz
在这里说下基址相关情况
上来修改打包完成的boot.img的时候刷入后,机器卡到银色MI界面。。。后来参照的http://hi.baidu.com/lovebabycase/item/01d8d6a42be1329e151073ba
对boot.img进行修改,其实问题出现在基址不对。。。
基地址计算方法出自上面百度空间
圈一:安卓的boot.img标准的文件头格式:ANDROID!(8字节) 圈二:kernel_size(4字节)
圈三:kernel_addr(4字节)圈四:ramdisk_size(4字节)
圈五:ramdisk_addr(4字节) 圈六:second_stage_size(4字节)
圈七:second_stage_addr(4字节)图八:tags_addr(4字节)圈九:page_size(4字节)
kernel地址,应为base+0x00008000
ramdisk地址,应为base+0x01000000
secondstage地址,应为base+0x00f00000
tags地址,应为base+0x00000100
page是页长,为1k(1024)的整数倍。此处为0x00000800,十进制为2048。
其中base为基址
后来针对原始boot.img分析计算出
ram算出基址81200000
kernel算出基址80200000
secondstage算出基址80200000
secondstage算出基址80200000
完成之后返回到boot.img相关文件所在目录执行(由于ram算出基址不同,所以少数服从多数)
mkbootimg –cmdline ’console=null androidboot.hardware=qcom ehci-hcd.park=3 maxcpus=2’ –kernel boot.img-kernel –ramdisk boot.img-ramdisk.gz –base 0x80200000 -o boot.img
由于ram的和其余的不一样,所以需要用winhex修改boot.img,将offset17处的81改成82,然后再刷入手机,正常进入并可以使用IPV6了!
上图!
注意:修改完boot.img升级后可能失效,所以。。。。新版本出现后每次都要重新弄下,还是希望MIUI团队可以修复这个bug。话说最好刷到系统一上面,系统二没成功过。。。。