/******************************************************************
* author: 卢浩
* time: 12.03.08
* environment: ubuntu10.04LTS +TI DM8186
* kernel version: linux-2.6.37
******************************************************************/
这个还是比较纠结的...
当时看ti的文档,如图
但是我输入mmc init 却没反应...后来再看文档才发现TI坑人啊...mmc init 应该更换为Mmc rescan 0
而下面的fatloadmmc 1 0x81000000 uImage 应该把其中的1改成0
fatload mmc 0 0x81000000 uImage
好了,现在可以在uboot阶段初始化mmc了...我们可以开始烧写了
首先,拨码开关调至从sd卡启动,按空格进入uboot状态输入mmc rescan 0。然后会显示如图
然后再输入
mw.b 0x81000000 0xFF 0x260000  //初始化使用的内存,全部置1
输入
fatload mmc 0 81000000 u-boot.noxip.bin[从SD卡中下载u-boot.noxip.bin到内存81000000处
输入
nand erase 0x0 0x260000 对将要使用的区域进行擦除操作
输入
nandecc hw 2
请看图,下图是TI对于ecc的一段说明
接下来输入
nand write.i 0x81000000 0x0 0x260000 [把内存81000000处的内容写到nand里面,从0x0开始,到0x260000结束]
接下来输入
nandecc hw 0
OK,至此,uboot烧写完毕
接下来烧写kernel
输入
mw.b 0x81000000 0xFF 0x440000 [初始化使用的内存,全部置1]
输入
Fatload mmc 0 81000000 uImage [从SD卡下载uImage到内存]
输入
nand erase 0x00280000 0x00440000 [对要使用的区域进行擦除操作]
输入
nand write 0x81000000 0x00280000 0x00251000 [从内存把uImage写入nand里面]
接下来烧写filesystem
输入
mw.b 0x81000000 0xFF 0x0C820000 [初始化使用的内存,全部置1]
输入
Fatload mmc 0 81000000 rd-jffs2.bin [从SD卡下载rd-jffs2.bin到内存]
输入
nand erase clean 0x006C0000 0x0C820000 [对要使用的区域进行擦除操作]
输入
nand write 0x81000000 0x006C0000 0x000e0700 [从内存把rd-jffs2.bin写入nand里面]
这里有个需要注意的就是我们的镜像文件的size
这个nand是2K对齐的。
尝试写入非对齐页失败
后来我改了下,稍微比0xe06128大一点用的是0xe07000。于是成功了。
设置拨码开关从nand启动
Setenv bootcmd 'nandecc sw;nand read81000000 280000 440000;bootm 81000000'
Setenv bootargs 'console=ttyO2,115200n8root=/dev/mtdblock 7 rw rootfstype=jffs2 mem=100M earlyprintk'
如果root=/dev/mtdblock7启动不了的话尝试换成root=/dev/mtdblock3
然后记得saveenv
重启开发板,可以从nand启动linux系统了。
这里有个插曲
TI的uboot默认是nandecc是硬件校验,结果启动kernel的时候出错,显示crc校验失败
后来我在bootcmd 里面加入了一句 nandecc sw ,变成从软件校验,结果通过了。
输入root登录即可