本文来源http://blog.csdn.net/gt945/article/details/12209105
由于openwrt编译出来的文件默认为通用格式的uImage,squashfs根文件系统是lzma压缩过的,这样的镜像烧到机器上是启动不起来的,Magic Number和Checksum无法通过。
解决方案有二:
1.修改uboot,使其支持openwrt的默认格式。
2.将镜像和根文件系统按照wnr2200的方式打包。
由于没有编程器,uboot刷坏了就砖了,而且修改uboot之后想要再换回官方固件非常麻烦,因此我采取的是方案2。
官方uboot在启动的时候,先检验flash中0x50000处的Magic Number,然后对整个分区进行校验。 0x50000处对应的其实是一个squashfs文件系统,当校验正确之后,就会通过fsload命令加载内核并启动。
我们要做的就是依葫芦画瓢,生成一个合法的分区即可,我将0x50000指定为kernel分区,大小为1.5M,能放下大部分内核了。kernel分区是一个squashfs文件系统,里面只放一个uImage,方便起见,弄了一个脚本。要注意,${BASE_DIR}/bin/目录下的程序一定要官方代码中生成的。
#!/bin/bash
BASE_DIR=${PWD}
OPENWRT_BIN=/home/tao/workspace/OpenWRT/openwrt/bi