DM36x使用串口和NAND启动完成NAND Flash烧写(二)

来源:互联网 发布:手机图片渲染软件 编辑:程序博客网 时间:2024/05/04 01:01

接上一篇,完成UBL,U-Boot和kernel烧写以后,还剩下文件系统烧写,就完成了Nand Flash的系统启动。

根据DM36x所支持的文件系统格式,我们选择了jffs2格式。

在Ubuntu10.04系统上,并没有安装jffs2文件系统的镜像生成工具。

使用U-Boot烧写文件系统,nand write/nand read等等命令,能操作文件是特定的,需要上述工具来制作。

一,安装制作镜像的工具命令:

sudo apt-get install mtd-utils

二,制作文件系统的镜像命令:

sudo mkfs.jffs2 -x lzo -r=rootfs/ --faketime -o=rootfs.jffs2 --little-endian --eraseblock=0x20000 -n

使用 mkfs.jffs2的help查看这个具体参数的配置。

三,准备一个sd卡,把刚刚制作好的镜像文件rootfs.jffs2拷贝到sd卡中

四,给开发版上电启动,进入U-boot命令行模式,插入sd卡

五,执行如下命令:

mmc initmmc rescan 0nand erase clean 0x900000 0xc900000mw.b 0x81000000 0xFF 0x6400000fatload mmc 0 0x81000000 rootfs.jffs2nand write.jffs2 0x81000000 0x900000 0x4D20000

依次完成的作用:
sd卡初始化;
sd卡的序号为0;
擦写nand flash从地址0x900000开始大小为0xc900000的区域,也就是将值变成1;
将文件系统镜像加载到DDR内存的0x81000000地址处;
将DDR内存0x81000000处的镜像内容写到nand flash的0x900000地址处,往后大小为0x4D20000

在这里,需要说明0x4D20000是怎么计算得到的?
由于fs_root.jffs2镜像的实际大小为80859312bytes,换算成十六进制为0x4D1D0B0;在就是因为烧写的时候块对齐,现在每块大小为128K,换算成十六进制是0x20000,按照向上对齐,也就是0x4D20000。

做到这里,如果没有任何错误,就代表linux系统启动的所有需要步骤全部完成了。

下面,我们还需要完成最后一步,设置启动参数:
接下来就是修改bootargs和bootcmd的启动参数:

//(只列出了需要修改的)setenv bootargs root=/dev/mtdblock3 rw rootfstype=jffs2 setenv bootcmd "read 0x81000000 0x500000 0x1b1aac;bootm 0x81000000"setenv bootdelay 6 //设置等待进入加载内核的秒数

最后,记得saveenv,然后断电上电重新启动。

注意:在烧写文件系统完成以后,系统怎么也启动不起来,并且每次都会报下面错误:

mtd->read(0x400 bytes from 0x0) returned ECC error

这表示Nand Flash芯片的ECC校验没有通过,如果为了快速测试,只需要把ECC校验关闭即可。但是,关闭会有其他什么问题,都是未知的。。。。。。。。

0 0
原创粉丝点击