给小度路由换16M Flash

3787

给小度路由换了16M的flash,重新编译了Uboot。但下载固件时出下如下情况:

Bytes transferred = 6291460 (600004 hex)
NetBootFileXferSize= 00600004
raspi_erase_write: offs:50000, count:600004
Abort: image size larger than 3866624!

## Booting image at bc050000 ...
raspi_read: from:50000 len:40
Bad Magic Number,FFFFFFFF

从uboot的config看,在非dual image模式下Uboot应该是不会受flash大小影响的,估计是openwrt固件的分区表的问题。

以上分析是完全错误的,经王工提醒,在之前的Uboot启动信息中还有一句警告被我忽视了:

Warning: un-recognized chip ID, please update bootloader!

原来是没检测到flash芯片的ID,于是我查看了/driver下的spi_flash.c

发现果然没有我使用的winboard芯片,于是我将我芯片写入了其中

{ "W25Q128BV", 0xef, 0x40180000, 64 * 1024, 256,  0 },

编译之,烧写之,再运行~

OK了~~~成功进入系统

但rootfs仍然只有2M多点,很奇怪的是在dts中并没有看到rootfs分区,观察rootfs的数值,我猜想rootfs是不是就是firmware-kernel的剩余空间,于是乎我将firmware分区改到了最大。

果然,rootfs变多了。

 

另外在4-debug模式下,还看到如下警告:

Sat Feb 22 08:02:56 2014 kern.warn kernel: [    0.930000] mtd: partition "rootfs" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only

dq给出的答案:

firmware分区是刷 kernel+rootfs
kernel现在大小不是64k的整数倍,比如 大小996k,这样紧跟着的rootfs,就不是从64k的整数倍开始的,就会提示错误。
在kernel后补一个996k%64k – 64(64是uImage header的大小)大小的内容,kernel大小就可以是64k的整数倍了。

 

5 意见

回复 杨帆

Please enter your comment!
Please enter your name here