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等等命令,能操作文件是特定的,需要上述工具来制作。
一,安装制作镜像的工具命令:
二,制作文件系统的镜像命令:
使用 mkfs.jffs2的help查看这个具体参数的配置。
三,准备一个sd卡,把刚刚制作好的镜像文件rootfs.jffs2拷贝到sd卡中
四,给开发版上电启动,进入U-boot命令行模式,插入sd卡
五,执行如下命令:
依次完成的作用:
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的启动参数:
最后,记得saveenv,然后断电上电重新启动。
注意:在烧写文件系统完成以后,系统怎么也启动不起来,并且每次都会报下面错误:
这表示Nand Flash芯片的ECC校验没有通过,如果为了快速测试,只需要把ECC校验关闭即可。但是,关闭会有其他什么问题,都是未知的。。。。。。。。
根据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校验关闭即可。但是,关闭会有其他什么问题,都是未知的。。。。。。。。
相关文章推荐
- DM36x使用串口和NAND启动完成NAND Flash烧写(一)
- [NAND]UBOOT从NAND FLASH启动分析
- CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit() 收回COM库。MFC 程序不用这一步,它自动完成。 CoUninitialize();
- Hi3531用SPI FLASH启动 使用Nand做文件系统
- Ubuntu12.04下使用Jlink Command烧写u-boot到mini2440 nand flash
- ICETEK-OMAP_L138串口启动烧写内核的问题总结
- 如何使用U-Boot通过串口烧写uClinux
- jz2440 win7 64位系统mini usb驱动无法兼容的解决方案,及其使用u-boot烧写Nand-flash的方法
- 使用JLINK间接烧写NAND FLASH
- OK6410之使用串口烧写运行全裸程序
- TMS320F28335项目开发记录4_28335之启动模式(串口烧写Flash)
- 使用JLink间接烧写s3c6410 nand_flash的方法
- 自己动手写J-LINK脚本,烧写NAND启动代码
- 使用JLink间接烧写s3c6410 nand_flash的方法[转]
- Hi3531用SPI FLASH启动 使用Nand做文件系统 分类: HI3531 2013-08-28 10:26 884人阅读 评论(0) 收藏
- 深度分析NandFlash—start.s中添加从Nand Flash启动的代码分析
- DM36x的UBL分析以及串口启动
- 烧写NAND Flash时出现错误:*** Warning - bad CRC or NAND, using default environment
- Hi3531用SPI FLASH启动 使用Nand做文件系统
- DM8168 nand flash烧写与启动步骤