简单的Bootloader怎么写?

Tips:

内核从板载启动的 bootargs--内核启动参数, bootargs 是 bootloader 传递给内核的启动字符串。

BootLoader的目标是启动内核, 大多数 boot loader 都包含两种不同的操作模式:"启动加载"模式和"下载"模式 。 

 

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。常见的BootLoader程序如下:

 

最简单的bootloader的编写步骤:

1). 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH

       1.关看门狗:2440的开发板一上电看门狗是打开的,不关闭的话每三秒就会复位一次开发板。看门狗的地址为:0x53000000

      2.设置时钟:CLKDVIN寄存器的地址为0x4c000014,必须设置为异步模式,这是datasheet所规定的。  

 

注:

判断从nand启动还是nor启动就往内存中写数据即可,之后看是否能从内存相应地址读出对应的值。

 

Nand_Flash的时序(s3c2440中)nand-flash存在先天缺陷:会位反转为此引入OOB out of bank。

 

Nand_Flash芯片手册中

 

相关时间参数的获取:

 

 

2). 如果bootloader比较大,要把它重定位到SDRAM

3). 把内核从NAND FLASH读到SDRAM

4). 设置"要传给内核的参数"

        在u-boot中查看分区,使用命令 mtd

 

5). 跳转执行内核

在简单的BootLoader编写的过程中出现过以下错误,错误之处是.lds链接脚本文件出错,要注意相关格式。

修改完最后的这个错误,最终一个最简BootLoader及完成了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值