openwrt典型的有两种布局方式,一种是KR(kernel在前,rootfs在后),另一种是RK(rootfs在前,kernel在后)。
AP1_mtdlayout_8M=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6336k(rootfs),1408k(kernel),64k(mib0),64k(art),7744k@0x50000(firmware)
AP2_mtdlayout_16M=mtdparts=spi0.0:128k(u-boot)ro,1408k(kernel),14784k(rootfs),64k(art)ro,16192k@0x20000(firmware)
布局:
例:
AP2,它的启动地址是9f020000,其实就是从flash的128k的位置加载kernel,这种就是需要使用KR的固件布局。前128k是uboot。
AP1,它的启动地址是在flash的中间位置0x9f680000,这样就需要使用RK的布局。320K uboot,6336K rootfs。
启动地址始终需要读取到kernel的头部,才能正常启动。
firmware:
firmware=kernel+rootfs
AP1,6336K(rootfs)+1408K(kernel)=7744K(firmware)
AP2,1408K(kernel)+14784K(rootfs) = 16192K(firmware)
地址推算:
AP1:
uboot 9F000000--9F050000
rootfs 9F050000--9F680000
kernel 9F680000--9F7E0000
mib0 9F7E0000--9F7F0000
art 9F7F0000--9F800000
AP1
uboot 9F000000--9F020000
kernel 9F020000--9F180000
rootfs 9F180000--9FFF0000
art 9FFF0000--A0000000
可以从uboot和原固件的启动信息来确定FLASH布局
AP1_mtdlayout_8M=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6336k(rootfs),1408k(kernel),64k(mib0),64k(art),7744k@0x50000(firmware)
AP2_mtdlayout_16M=mtdparts=spi0.0:128k(u-boot)ro,1408k(kernel),14784k(rootfs),64k(art)ro,16192k@0x20000(firmware)
布局:
例:
AP2,它的启动地址是9f020000,其实就是从flash的128k的位置加载kernel,这种就是需要使用KR的固件布局。前128k是uboot。
AP1,它的启动地址是在flash的中间位置0x9f680000,这样就需要使用RK的布局。320K uboot,6336K rootfs。
启动地址始终需要读取到kernel的头部,才能正常启动。
firmware:
firmware=kernel+rootfs
AP1,6336K(rootfs)+1408K(kernel)=7744K(firmware)
AP2,1408K(kernel)+14784K(rootfs) = 16192K(firmware)
地址推算:
AP1:
uboot 9F000000--9F050000
rootfs 9F050000--9F680000
kernel 9F680000--9F7E0000
mib0 9F7E0000--9F7F0000
art 9F7F0000--9F800000
AP1
uboot 9F000000--9F020000
kernel 9F020000--9F180000
rootfs 9F180000--9FFF0000
art 9FFF0000--A0000000
可以从uboot和原固件的启动信息来确定FLASH布局
FLASH采用什么布局都无所谓,最根本只需要确定uboot从哪个地方去加载kernel,只要这个确定了,那固件要怎么布局也就基本确定了
可以修改,printenv里的bootm的启动地址修改后,就可以任意使用自己想用的布局了。
可以修改,printenv里的bootm的启动地址修改后,就可以任意使用自己想用的布局了。