您的位置:首页 > 其它

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

2017-02-18 16:22 417 查看
接上一篇,完成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 init
mmc rescan 0
nand erase clean 0x900000 0xc900000
mw.b 0x81000000 0xFF 0x6400000
fatload mmc 0 0x81000000 rootfs.jffs2
nand 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校验关闭即可。但是,关闭会有其他什么问题,都是未知的。。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息