WNR2200可以正常地使用OpenWRT了。

本文来源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下载到WNR2200上并跑起来,由于根文件系统还没有搞定,只能跑到文件系统挂载那一步。

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,
	}

我只修改了两个地方,去掉官方固件中的greendownload分区,这样就可以使用大概14M的空间,然后将空间分为kernel和rootfs,kernel用来放uImage,rootfs即为根文件系统。

为了能够刷写系统,我在编译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


进入linux系统之后

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

此次固件为基本固件,没有web图形化界面,还没研究怎么加。





你可能感兴趣的:(openwrt,移植,WNR2200)