本文来源http://blog.csdn.net/gt945/article/details/12165569
早在一个多月前,我就开始了给WNR2200移植OpenWRT,那时候WNR2200还没有得到OpenWRT的官方支持。WNR2200的配置是AR7241+AR9287的,16M ROM,64M RAM, 跑OpenWRT应该是非常爽的。但是由于没有官方支持,因此很多东西需要自己修改,其中最主要的是arch/mips/ath79/mach-wnr2200.c。
移植很容易,很快,WNR2200的内核就搞定了,由于WNR2200的uboot在image的使用上有所不同,为了兼容其uboot,uImage镜像的打包要使用官方的mkimage程序,该程序可以在编译官方固件的时候生成。
mkimage -A mips -O linux -T kernel -a 80060000 -e 80060000 -C lzma -d openwrt-ar71xx-generic-vmlinux.lzma uImage设置启动参数为:
console=ttyS0,115200 board=WNR2200 root=31:3 rootfstype=squashfs
tftpboot 80800000 uImage bootm 80800000
{ .name = "u-boot", .offset = 0, .size = 0x040000, .mask_flags = MTD_WRITEABLE, }, { .name = "u-boot-env", .offset = 0x040000, .size = 0x010000, }, { .name = "kernel", .offset = 0x050000, .size = 0x180000, }, { .name = "rootfs", .offset = 0x1d0000, .size = 0xcf0000, }, { .name = "config", .offset = 0xec0000, .size = 0x010000, }, { .name = "language_table", .offset = 0xed0000, .size = 0x100000, }, { .name = "pot", .offset = 0xfd0000, .size = 0x010000, }, { .name = "traffic_meter", .offset = 0xfe0000, .size = 0x010000, },{ .name = "ART", .offset = 0xff0000, .size = 0x010000, .mask_flags = MTD_WRITEABLE, }
为了能够刷写系统,我在编译openwrt的时候加入initramfs,这样即使没有根文件系统,也能使用大部分功能。
mkimage -A mips -O linux -T kernel -a 80060000 -e 80060000 -C lzma -d openwrt-ar71xx-generic-vmlinux-initramfs.lzma uImage-initramfs
tftpboot 80800000 uImage-initramfs bootm 80800000
进去之后想办法将openwrt-ar71xx-generic-root.squashfs刷写到rootfs分区,tftp也好,http也好。
刷入rootfs之后,之前不带initramfs的内核就能正常启动了
到现在,我们启动路由的方法只能使用uboot的tftpboot。
为了能够达到路由器自动启动OpenWRT,还需要将uImage刷到kernel分区。经过多日努力,终于达成,并附上刷机流程:
下载固件
电脑设置固定IP 192.168.1.27
电脑开启tftp server,并将三个文件放到tftp服务器根目录
串口连接WNR2200, 开机, 回车进入Uboot的命令行
设置bootargs为console=ttyS0,115200 board=WNR2200 root=31:3 rootfstype=squashfs,并保存
tftpboot 80800000 uImage-initramfs bootm 80800000
cd /tmp tftp -g -l image.img -r image.img 192.168.1.27 tftp -g -l root.fs -r root.fs 192.168.1.27 mtd write image.img kernel mtd -r write root.fs rootfs