b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

文件系统转换 Bootloader之uBoot简介(转)(3)

电脑杂谈  发布时间:2018-02-07 22:32:44  来源:网络整理

Flash上的内核映像有可能是经过压缩的,在读到RAM之后,还需要进行解压。当然,对于有自解压功能的内核,不需要Bootloader来解压。

将根文件系统映像复制到RAM中,这不是必需的。这取决于是什么类型的根文件系统,以及内核访问它的方法。

为内核设置启动参数将在下一小节介绍。

将内核存放在适当的位置后,直接跳到到它的入口点即可调用内核。调用内核之前,下列条件要满足:

(1)CPU 寄存器的设置。

R0=0

R1=机器类型ID;对于ARM结构的CPU,其机器类型ID可以参见 linux/arch/arm/tools/mach-types。

R2=启动参数标记列表在 RAM 中起始基地址

(2)CPU工作模式。

必须禁止中断(IRQs和FIQs)

CPU 必须 SVC 模式

(3)Cache 和 MMU 的设置。

MMU 必须关闭

指令 Cache 可以打开也可以关闭

数据 Cache 必须关闭

如果用C语言,可以像下列示例代码一样来调用内核:

void (*theKernel)(int zero, int arch, u32

params_addr) = (void (*)(int, int, u32))KERNEL_RAM_BASE; ……

theKernel(0, ARCH_NUMBER, (u32) kernel_params_start);

3. Bootloader与内核的交互

Bootloader与内核的交互是单向的,Bootloader将各类参数传给内核。由于它们不能同时运行,传递办法只有一个:Bootloader将参数放在某个约定的地方之后,再启动内核,内核启动后从这个地方获得参数。除了约定好参数存放的地址外,还要规定参数的结构。Linux 2.4.x

以后的内核都期望以标记列表(taggedlist)的形式来传递启动参数。标记,就是一种数据结构;标记列表,就是挨着存放的多个标记。标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。标记的数据结构为tag,它由一个tag_header结构和一个联合(union)组成。tag_header结构表示标记的类型及长度,比如是表示内存还是表示命令行参数等。对于不同类型的标记使用不同的联合(union),比如表示内存时使用tag_mem32,表示命令行时使用tag_cmdline。数据结构tag和tag_header定义在Linux内核源码的include/asm/setup.h头文件中:

下面以设置内存标记、命令行标记为例说明参数的传递:

(1)设置标记 ATAG_CORE。

标记列表以标记 ATAG_CORE开始,假设Bootloader与内核约定的参数存放地址为0x30000100,则可以以如下代码设置标记 ATAG_CORE:

params = (struct tag *) 0x30000100;

<br>params->hdr.tag = ATAG_CORE; params->hdr.size =

tag_size (tag_core); <br>params->u.core.flags = 0;

params->u.core.pagesize = 0; params->u.core.rootdev = 0;

<br>params = tag_next (params);

其中,tag_next定义如下,它指向当前标记的末尾:

#define tag_next(t)((struct tag *)((u32 *)(t) + (t)->hdr.size))


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66092-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...