U-Boot中include/configs/mini2440.h头文件定义的bootloader地址范围是0x0-0x60000,params地址范围是0x60000-0x80000,kernel地址范围是0x80000-0x500000。
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:384k(bootloader)," \
"128k(params)," \
"5m(kernel)," \
"-(root)"
Supervivi中bootloader是0x0-0x40000,param是0x40000-0x60000,kernel是0x60000-0x500000,如果用supervivi的k选项将linux kernel传到nand flash那么这个地址就会和u-boot中的params冲突。
解决办法,编辑linux kernel中的arch/arm/mach-s3c2440/mach-mini2440.c将friendly_arm_default_nand_part中的地址修改成与u-boot一致。
然后启动开发版进入u-boot:
1.执行usbslave 1 0x30008000将linux kernel的uImage上传至内存中(在主机上执行dnw ...)
2.执行nand erase 0x80000 0x500000消除此区域,以便接下来将上述内存中的linux kernel写至此
3.执行nand write 0x30008000 0x80000 0x500000
4.修改u-boot引导参数
1)setenv bootcmd 'nand read 0x30008000 0x80000 0x500000;bootm 0x30008000'
2)setenv bootargs 'noinitrd root=/dev/mtdblock3 initrd=/linuxrc console=ttySAC0'
3)saveenv
5.重启开发板