移植U-BOOT

本来打算一章一章地看过来,没想到还是碰到了很多困难,中间的像总线、LCD控制器什么的还是有很多地方看不太懂。于是就跳过来了。。。


1.什么是bootloader?

bootloader就是一段在系统上电就开始执行的一段小程序。所做的工作有:初始化硬件设备、准备好软件环境,最后调用操作系统内核。

当然,我们也可以增强bootloader的功能,比如增加网络功能、烧写文件等等。因为bootloader的实现非常依赖硬件,因此必须对bootloader进行修改(移植)才能使用。


2.bootloader的两个阶段

bootloader的启动分为单阶段(single stage)和多阶段(multi-stage)两个部分,其中第一阶段使用汇编实现,能够完成一些依赖于cpu体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言实现,可以实现更加复杂的功能。两阶段完成功能分类如下:

(1)第一阶段

  • 硬件设备初始化
  • 为加载bootloader的第二阶段代码准备ram空间
  • 复制bootloader的第二阶段代码到ram中
  • 设置好栈
  • 跳转到第二阶段代码的C入口点
                                                                                            

(2)第二阶段

  • 初始化本阶段要使用到的硬件设备
  • 检测系统内存映射
  • 将内核映像和根文件系统映像从flash上读到ram空间中
  • 为内核设置启动参数
  • 调用内核
             


3.bootloader与内核的交互

bootloader与内核的交互是是通过将参数放在某个约定的地方,以规定的参数结构来单向传递给内核。目前均以标记列表(tagged list)的形式来传递启动参数。标记列表以ATAG_CORE开始,以标记ATAG_NONE结束。

tag和tag_header的定义在linux内核源码的include/asm/setup.h 中,如下

struct tag_header{
u32 size;
u32 tag;
};

struct tag{
struct tag_header hdr;
union{
struct tag_core core;
struct tag_mem32 mem;
struct tag_videotext videotext;
struct tag_ramdisk ramdisk;
struct tag_initrd initrd;
struct tag_serialnr serialnr;
struct tag_revision revision;
struct tag_videolfb videolfb;
struct tag_cmdline cmdline;

struct tag_acorn acorn;
struct tag_memclk memclk;
}u;
};

标记列表则是很多个这种结构的标记连接而成的。


未完。。。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值