移植u-boot-2015.07-rc3之修改代码支持NorFlash启动并真正支持No
上一节中讲到,以spl方式启动的uboot和以NorFlash启动的代码不能共用一套u-boot代码,所以这一节讲解修改目前的uboot代码支持NorFlash启动。当然你得先保存修改到目前的uboot代码,并且由于有前面修改的铺垫,这一节修改尽量言简意赅。
? 在修改之前啰嗦两句,uboot从NandFlash启动的主流程是:垫脚石中的代码拷贝NandFlash中的u-boot代码到内存A处并跳转到A处运行,在A处的uboot自动计算新的内存地址B并把A处的uboot代码拷贝至B处,跳转到B处执行。 uboot从NorFlash启动时由于cpu在NorFlash中就可以完成寻址、取指,所以uboot直接就可以在NorFlash中运行。因此uboot从NorFlash启动的话就没必要把NorFlash中的代码拷贝到内存A处了,NorFlash启动的uboot直接在NorFlash中运行后会自动计算出一个内存地址B,然后把NorFlash中的uboot拷贝到内存B处并跳转到B处的uboot执行。 ???????? 下面就来修改现有的代码以支持NorFlash启动: ?
?
?
?
?
? 修改到这里,make编译,编译通过。使用JLink/JTag下载到NorFlash中,以nor启动就能看到uboot已经正常输出了。同样的,在drivers/mtd/cfi_flash.c中添加debug的宏定义以输出uboot读取到的NorFlash信息:
? 在上图中我们可以看到读取到NorFlash的ID已经不是f0 ea00 0了,现在读取到的是1 2249 0,对比这张NorFlash芯片的命令时序图可以确定现在读取到的NorFlash信息已经正确: 在上一节中我们讲到,uboot是拿读取到的这个Manufacturer ID、Device ID与drivers/mtd/jedec_flasf.c文件中的jedec_table[]数组比较,有匹配的数组元素uboot就认为支持这款NorFlash芯片,并根据数组元素中的信息来操作NorFlash。那么我们现在根据NorFlash的信息自己来添加一个数组元素,为了这个元素一定会被遍历到,把这个元素添加在宏开关之外。
结果上面的修改,uboot已经能支持NorFlash读写了,现在来测试一下:
? 本节实现了uboot从NorFlash启动,并能够支持NorFlash读写,往后的uboot移植包括NandFlash支持、DM9000支持、mtdparts命令支持、uboot裁剪及启动参数修改、yaffs文件系统烧写支持,在后面这些移植过程中就不区分spl启动还是NorFlash启动了,两种启动方式修改的过程和地方是完全一样的。 下一节修改代码支持NandFlash读写命令。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |