关于小米2SC 不支持IPV6的问题

魅族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。话说最好刷到系统一上面,系统二没成功过。。。。