bootloader新的理解
1.对于bootloader这样的程序,作为板卡刚开始启动的部分,大致的顺序是一致的,大部分都是分为两个部分,一部分是汇编编写的,一部分是用c语言编写的。一般在汇编部分完成各种初始化的操作,比如关闭看门狗,防止开发板每3s启动一次,初始化SDRAM,初始化NANDFLASH,由于希望裸板有可以工作在更加高的频率下,因此要初始化时钟,设置FCLK:HCLK:PCLK的比例,另外nandflash有个特殊操作,会将前4k大小的空间自动复制到cpu中的前4kRAM中,这时cpu这4k代码其实是将存在nandflash中的bootloader复制到sdram中。然后跳转利用位置无关码的指令ldr pc,=main跳到sdram中的main处执行。然后在主函数中设置内核参数,开始tag,命令行tag,memrory tag,以及end tag,之后将内核读入到内存中。之后跳转执行。但是当内核启动时会输出一些打印信息,例如根文件系统在什么地方,终端是什么的信息。因此还需要设置串口,设置串口当然有一些初始化,例如设置GPIO为端口复用,设置内部上拉,设置是否用流控,设置传输的长度,设置奇偶校验位,设置波特率,设置查询还是用中断。之后编写读函数。
2.对于nandflash来说,对其读写是以页为单位来进行读写的因此,对于一个nandflash来说,其一共有多少页,之后选中这其中的某一页之后,之后将这一页的数据读到移位页中,然后再发送出去,一页的大小是0到2047,每一页都会有oob,大小是64字节,这是由nandflash的特性决定的,这是因为读nandflash可能读写过程中会出现读写的坏块,oob是校验用的,通过某种算法,当读取到某一页时,会生成相应的效验码,与之前的对比,如果不相同,则对其坏块进行修正。读nandflash时首先需要设置时序,这需要我们去看时序图,去计算出这三个参数是多少,之后设置地址。注意nandflash只有8个IO读写的口,因此命令,地址,数据肯定是分时复用的。在设置nandflash时要注意的是时间要延迟一会儿,不然会出问题。
3.对于bootloader从norflash启动还是nandflash启动还是有很大的差别i的,对于bootloader从norflash启动的话,此时cpu看到的0地址是在norflash上,bootloader从norflash上复制到sdram中,链接地址在sdram中。
对于bootloader从nandflash启动,根据nandflash的特性,此时cpu看到的0地址是在cpu的片内ram中,上电后将前4k移动到ram中,此时cpu看到的是ram中的地址0,在这4k代码中,将nandflash中的bootloader复制到sdram中,当运行这4k代码中的跳转到main函数时,它会直接跳到nandflash中的bootloader中的main处执行,用的位置无关码。
4.对于bootloader的调试,用openjtag下载程序到norflash,然后重启,可以看到中端会打印一些信息,但是将程序下载到nandflash,然后重启,就什么也不会显示,说明在问题出在nand_read()函数里面。检查发现是里面的读地址的函数写错了。在修改之后,重新编译,然后下载,重启,从nandflash启动,在终端可以看到一些打印信息。说明nand_read()函数没有问题了。至此,uboot的功能已经实现了。
最新文章
- Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点
- cocoapods 升级到最新beta 版
- PHP获取某远程网站的服务器时间
- redhat或centos关闭防火墙并开启sshd服务
- Knockout.js 初探
- 对比MySQL,什么场景MongoDB更适用
- Git配置安装使用教程操作github上传克隆数据
- iOS8及以后 地图定位当前城市
- java基础之导入(Excel)2
- IE条件注释,嗅探低版本IE用户,并引导升级
- Context.Response.End(); VS HttpContext.Current.ApplicationInstance.CompleteRequest();
- Jmeter性能测试之进阶Java request的使用
- ie 9.10 兼容性问题 遇到的坑
- P1880 [NOI1995]石子合并(区间DP)
- genstr.py
- 吴裕雄 10-MySQL插入数据
- RouteOS 频繁自启
- Git的简单操作
- 负数在计算机中的表示 Byte-128
- MySQL基本操作之命令行操作
热门文章
- ubuntu16.04搭建geodjango+postgresql+postgis的WebGIS框架(三)加载空间数据
- UI5-学习篇-6-SAP创建OData服务-RFC
- JDK1.8 LocalDateTime 时间类与字符互转
- (转)NHibernate+MySql常见问题
- Unity3D教程宝典之Shader篇
- UIApplication 的学习
- idea git 从github上拉取项目 更改上传
- struts2与spring整合时需要注意的点
- 吴裕雄 23-MySQL ALTER命令
- Redis集群模式部署