1 开发环境
宿主机:Ubuntu14.04.2(32bit)
开发板:Mini2440
系统:Linux
2 Nand Flash分区表
为了使得系统能正常启动,需要将内核与根文件系统烧写到指定的位置(由Nand Flash的分区表指定)根据参考资料[10]的提示,在Mini2440光盘的已移植的Linux内核的arch/arm/mach-s3c2440/mach-mini2440.c源文件中有如下结构,定义了Nand Flash的分区表:
- static struct mtd_partition friendly_arm_default_nand_part[] = {
- [0] = {
- .name = "supervivi",
- .size = 0x00040000,
- .offset = 0,
- },
- [1] = {
- .name = "param",
- .offset = 0x00040000,
- .size = 0x00020000,
- },
- [2] = {
- .name = "Kernel",
- .offset = 0x00060000,
- .size = 0x00500000,
- },
- [3] = {
- .name = "root",
- .offset = 0x00560000,
- .size = 1024 * 1024 * 1024, //
- },
- [4] = {
- .name = "nand",
- .offset = 0x00000000,
- .size = 1024 * 1024 * 1024, //
- }
- };
3 烧写Bootloader
3.1 读取Bootloader到SDRAM
通过《U-Boot串口下载》的方法将Bootloader下载到SDRAM。
![](https://img-blog.csdn.net/20160508110120340)
上图命令意为通过串口将数据下载到SDRAM的0x33000000地址中。
3.2 擦除Nand Flash
在进行写操作前,需要先擦除,否则容易导致写失败!
(1)擦除整个Nand Flash
(2)擦除0地址开始0x20000大小的块(至少擦除一块):
3.3 将SDRAM内容烧写到NAND Flash
![](https://img-blog.csdn.net/20160508105658146)
上图命令意为将SDRAM起始地址0x33000000数据块下载到Nand Flash 0偏移地址处,数据块大小为0x40000。
4 烧写Kernel
与烧写Bootloader的方法相同,先将Kernel下载到SDRAM 地址0x33000000处,然后将其烧写到Nand Flash偏移地址0x60000处:
![](https://img-blog.csdn.net/20160508143308574)
5 烧写根文件系统
烧写根文件系统时,使用nand write.yaffs[9][12]代替上述nand write即可,过程同上,详见参考资料[14]。需要注意的时候,最后一个参数size的大小必须为2112的整数倍,否则会出错,详见《Attempt to write error length data》。
6 启动参数设置
要想正常的启动所烧写的系统,还需要在U-Boot中设置环境变量(为Kernel设置启动参数),Tekkaman所移植U-Boot的环境变量如如下:
- [u-boot@MINI2440]# printenv
- bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
- bootcmd=nfs 0x30008000 192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
- bootdelay=1
- baudrate=115200
- ethaddr=08:08:11:18:12:27
- ipaddr=192.168.0.2
- serverip=192.168.0.1
- gatewayip=192.168.0.1
- netmask=255.255.255.0
- tekkaman=bmp d 70000
- stdin=serial
- stdout=serial
- stderr=serial
- ethact=dm9000
-
- Environment size: 470/131068 bytes
由前2行可知,当前设置是从nfs从加载根文件系统,这里需要将其改为从Nand Flash加载根文件系统,可执行下面命令对其进行修改:
- setenv bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M
- setenv bootargs noinitrd root=/dev/mtdblock3 rw console=ttySAC0,115200 init=/linuxrc mem=64M
(1)烧写到Nand Flash的是zImage时,使用下面启动命令参数
- setenv bootcmd nboot 0x30008000 0 0x60000\;go 0x30008000
(2)烧写到Nand Flash的是uImage时,使用下面启动命令参数:
- setenv bootcmd nboot 0x30008000 0 0x60000\;bootm 0x30008000
分号需要使用反斜杠"\"进行转义,其余各参数的具体意义见《U-Boot内核启动参数》,最后别忘了保存: