在Common-smdk.c中对Nand Flash进行分区规划,规则bootloader在什么位置,占多少空间,kernel在什么位置,占多少空间,以
及rootfs等等。
Flash做为MTD设备使用(Memory Technology Device)
static struct mtd_partition smdk_default_nand_part[]={
[0]={
name:"bootloader", //分区1,名称bootloader,引导程序
size:0x00100000, //大小,1M
offset:0x0 //起始地址(偏移量:0)
},
[1]={
name:"kernel", //分区2,名称kernel,内核
size:0x00300000, //大小3M
offset:0x00100000 //编移量1M(正好接在上一分区之后)
},
[2]={
name:"rootfs", //分区3,名称rootfs,根文件系统
size:0x02800000, //大小40M
offset:0x00400000 //编移量0x00100000+0x00300000
},
[3]={
name:"user", //分区4,名称user,其他空间
size:0x00f00000, //大小15M
offset:0x02d00000 //偏移量0x00100000+0x00300000+0x02800000
}
};
这样就规划好了NandFlash的分区而我们的Flash正好是60M的,这样一样,我们在烧写的时候就要按号入座,
bootloader烧写在0x0位置,因为bootloader一般较小超不过1M,所以我们预留的空间足够了。
而内核就要烧在0x00100000的位置上,最大占空间为3M,而内核一般为1.5M~1.9M之间,所以也足够了。
做好uboot后用H-JTag烧写到目标板NandFlash的0x0处,然后启动u-boot,
设置好参数
setenv ipaddr 192.168.1.2
setenv serverip 192.168.1.10
saveenv
tftp 0x30008000 zImage
go 0x30008000
测试好内核可完成跑开了以后就成功一半了。
如果解压完内核到了.................Done.Boot the kernel.
DNW就没有输出了,这是没向内核传参造成的。
setenv bootargs 'console=ttySAC0,115200'
saveenv
这样就好了。
应该能看到内核打印出来的分区信息,如果跟我们自定义的一样,那就正确了。
当然也可以在make menuconfig配置内核的时候,自定义command line.
|
|