作者:程姚根,华清远见嵌入式培训中心讲师。
关于Bootloader一些常用参数的使用以及在NAND FLASH里面固化整个嵌入式系统
工作这段时间以来,常常有许多学员为用H-JTAG向FLASH中烧写文件而苦恼。难道我们每次都要用这种方法去烧写文件?呵呵,答案必须不是。
我建议大家在做系统移植时要保证自己的板子NOR FLASH有一个好的Bootloader,这样当NAND FLASH里面的Bootloader要更换或者崩溃时就可以使用NOR FLASH里面的Bootloader向NAND FLASH烧写Bootloader,从而避免使用H-JTAG进行烧写的一连串的复杂动作,最给力的是它有效的避免了H-JTAG硬件自身的缺陷,“有时好使,有时不好使”的问题,呵呵,用过H-JTAG的人,大多数应该遇到过这种情况。
下面以FS2410板子像NAND FLASH 烧写Bootloader为例子:
1. 从NOR FLASH启动Bootloader,准备好要向NAND FLASH烧写的文件
2.设置好Bootloader的一些参数,确保Bootloader和主机之间能ping的通.
3.下载烧写文件到内存中
Tftp 30008000 u-boot.bin(自己要烧写Bootloader文件);
4.把内存中的数据拷贝到NAND FLASH里面
(1)nand erase擦除NAND FLASH.
(2)nand write 0x30008000 0x00000000 0x00040000
把内存地址的0x30008000中的数据写到NAND FALSH存储空间的0x000地址,大小 0x00040000(确保这个大小比要烧写的文件u-boot.bin大一点).
5.重新打开电源,从NAND FLASH启动,这个时候你可以看到NAND FLASH里面的Bootloader正常启动了
下面在给出将内核,根文件系统镜像固化在NAND FLASH中的操作流程
1.给nandflash分区(修改arch/arm/plat-s3c24xx/common-smdk.c)
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader u-boot-2010.03",
.size = 0x40000,
.offset = 0,
},
[1] = {
.name = "kernel linux-2.6.35",
.offset = 0x40000,
.size = 0x400000,
},
[2] = {
.name = "rootfs buysbox-1.17.3",
.offset = 0x440000,
.size = 0x800000,
},
[3] = {
.name = "usrfs",
.offset = 0xc40000,
.size = 0xa00000,
},
};
分好区以后,重新编译内核(以上分区,指示参考,可以根据自己的需要进行分区)
2.烧制内核和文件系统
下载内核到内存地址为30008000上
tftp 30008000 zImage
擦除flash
nand erase 0x00040000(从这个地址开始擦除,被忘记这个地址以前我们放了Bootloader)
从内存拷贝到flash上
nand write 0x30008000 0x00040000 0x00400000
下载文件系统镜像到内存地址为30008000上
tftp 30008000 rootfs.cramfs
从内存拷贝到flash上
nand write 0x30008000 0x00440000 0x00800000
3.设置u-boot参数
setenv ipaddr 192.168.1.222 (随意设置)
setenv serverip 192.168.1.79(虚拟机ip)
setenv ethaddr 11:22:33:44:55:66
setenv gatewayip 192.168.1.1
setenv bootcmd nand read 0x33000000 0x00040000 0x00400000\; go 0x33000000
setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 devfs=mount display=sam240
4.重新启动开发板
嵌入式及3G相关资源及学习请点击:嵌入式开发视频 android开发视频 android培训 3G培训 QT培训 QT开发视频 物联网培训 物联网技术视频 嵌入式学习