导读:
内核从板载启动的 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及完成了。
卧龙会,卧虎藏龙,IT高手汇聚!由多名十几年的IT技术设计师组成。欢迎关注!想学习请点击下面“了解更多”
教大家一个最简单的BootLoader,新手可以练练手!http://t.jinritoutiao.js.cn/eqdmp8/