uboot移植理解

第一次写博客,简单记录下自己这周对uboot移植的理解吧!

——小白记录,谨慎参考,敬请指导

1.uboot启动过程

(1)BL0:BL0文件是存放在CPU内部IROM中的一段固化代码,CPU上电后,首先运行BL0文件

作用:初始化系统时钟,设置看门狗,初始化堆栈,加载BL1

(2)BL1:是一段外部代码,存放在SD卡或者是NANDFlash中

作用:初始化RAM,关闭Cache,设置堆栈,加载BL2

(3)BL2:是指代码重定向后在内存中执行的uboot完整代码

作用:初始化其他外设,加载内核

三者之间的关系:(Interal ROM固化代码)BL0将BL1(bootloader的前16KB--BL1)加载到iRAM;BL1然后在iRAM中运行将BL2(剩下的bootloader)加载到SDRAM;BL2加载内核,把OS在SDRAM中运行起来,最终OS是运行在SDRAM(内存)中的。
这三个文件之间的关系就是:BL0 运行时会将 BL1 拷贝到 CPU 的 IRAM 中,然后执行BL1;BL 文件执行起来之后会先进行内存的初始化,之后将 BL2 文件拷贝到外部内存中

2.uboot基础配置

执行命令:make origen_config

调用:mkconfig——生成config.mk与config.h

执行命令:make all

直接生成 uboot.bin 即BL2文件

要想做好uboot移植,就必须学会配置相关的硬件信息。这里在提三个文件,..board/samsung/smdkc210/lowlevel_init.s

../cpu/arm_cortexa9/uboot.lds ../cpu/arm_cortexa9/start.s

lowlevel_init.s:硬件初始化配置

uboot.lds: 链接脚本就是程序链接时的的参考文件,其目的是描述输入文件中各段应该怎么样被映射到输出文件,

以及程序运行时的内存布局等等

start.s:关闭看门狗,关中断,设置时钟,SDRAM初始化

要想做好硬件信息的配置,首先要能读懂芯片手册相应功能所赋予的地址,这样才能在配置的时候进行调用。


例子1:为Exynos4412开发板配置led

第一步:查看Exynos4412开发板原理图,确定led所连接的cpu引脚


 

由此可知:LED3对应的芯片引脚为GPK1_1

第二步:修改start.s,点亮LED3

在修改start.s之前,我们需要知道GPK1_1控制寄存器的地址,对硬件设备的操作,本质上也就是对CPU引脚所对应寄存器的操作。对寄存器的操作无外乎读/写操作。下面我们查看数据手册得到GPK1_1控制寄存器地址。

控制寄存器:Base Address: 0x1100_0000   偏移地址:0x0060



这里我们需要设置GPK1_1的控制寄存器为输出,GPK1CON寄存器占4个字节,其中4-7位用于对GPK1_1的配置,知道了这些信息,我们开始在start.s中添加点灯代码:

        /* LED Test Code */
        ldr r0, =0x11000060  //得到GPK1CON寄存器地址
        ldr r1, [r0] //将GPK1CON寄存器地址中的数据付给r1
        bic r1, r1, #0xf0 //将r1中的数据与0xf00的非即0x11进行与运算,将控制GPK1_1的位清零
        orr r1, r1, #0x10 //将控制GPK1_1的位设置为1,由0x1 = Ouput可知,此处将GPK1_1设置为输出
        str r1, [r0] //将r1的值写到GPK1CON寄存器所在的地址中

至此,设置GPK1_1所对应的引脚为输出。做好了点亮LED3的第一步,下一步个人认为是设置GPK1_1对应的数据位,就不写了,哈哈哈,终于写了那么多了,不算完,慢慢补充......





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值