编写bootloader(一)

14 篇文章 0 订阅
9 篇文章 0 订阅

BootLoader功能: 初始化nandflash,启动内核(转到其入口地址)。
BootLoader要求: BootLoader启动内核时还需要传递给内核一些信息(tag),其中有两个必不可少的内存标记和命令行参数,当然还有一个机器ID,BootLoader传递的机器ID必须和内核支持的机器ID匹配。
需要知道的信息:
1.内核在nandflash中的地址。如果内核是uImage映像文件,跳到uImage起始地址+64就行。
对于Linux内核,编译可以生成不同格式的映像文件,例如:
# make zImage

# make uImage

# make bzImage

zImage是ARM Linux常用的一种压缩映像文件。zImage是ARM Linux常用的一种压缩映像文件不能超过512KB,bzImage 即bigzImage ,二者的内核都是gzip压缩的。uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。
2.内核的链接地址:真正的内核链接地址。使用uInage时,要减去头部。
3.bootloader的链接地址
4.标记tag的地址。地址会作为参数传递给内核。tag的放置方法,可以参考 uboot ,必须以 ATAG_CORE 类型的开头,以 ATAG_NONE 类型的结尾。
5.启动内核时传递给内核的参数,3个,第一个默认0,第三个是前边提到的 tag 的地址,第二个是机器ID。内核中所有支持的“机器”或者称作开发板、单板都用一个 MACHINE_START 宏来定义,这个宏的作用就是填充一个 machine_desc 类型的结构体,填充的过程中会对它的 .nr 成员赋值,这个 nr 就是所谓的机器ID。
bootloader需要初始化串口,否则看不到内核打印信息。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值