您的位置 首页 IOT

ARM系统架构下的linux发动之一,从bootloader到linux内核

1.bootloader的启动bootloader本身叫做嵌入式系统的引导程序。但是,它支持X86,MIPS,PowerPC,ARM等多种体系架构。对于操作系统的启动…

1. bootloader的发动

bootloader自身叫做嵌入式体系的引导程序。可是,它支撑X86,MIPS,PowerPC,ARM等多种体系架构。

关于操作体系的发动来讲,当机器开端上电时,首要加载bootloader,它用来完结最基本的硬件的初始化,然后加载Linux内核。

用于ARM的bootloader一般为U-BOOT,用它来完结对linux内核的加载设置,一般bootloader烧写在开发板的Flash里,包含Nor Flash或Nand Flash,其间因为NorFlash支撑芯片内履行XIP(eXcute In Place),代码能够直接在FLASH上履行,而NandFlash需求把代码拷到RAM中再去履行。可是RAM的处理速度比Flash的处理速度要快得多,一般依然把代码放在RAM中履行。

一般的bootloader需求完结以下五种功用:

1)RAM的初始化:为调用linux内核做准备。

2)串口的初始化:因为一般的嵌入式体系开发板上没有视频终端,只能用串口进行开发,串口的初始化非常重要。

3)检测处理器类型:用来预处理加载内核的处理器类型的传递作业。

4)设置Linux的发动参数:包含加载地址,发动方法(从本地分区或NFS进行根文件体系加载),以及Linux根文件体系

的加载方法。通常用一个符号列表来记载linux内核发动的各个参数。

5)调用linux内核镜像:此刻ARM的处理器中的几个特别的寄存器值:r0=0,r1=处理器类型,r2=符号列表在RAM中的方位。

2. linux kernel的发动剖析

首要从http://www.kernel.org 上下载一个linux内核的标准版,然后
$make menuconfig
这时你会发现,里边装备的体系架构为X86的,找不到关于ARM装备的相关选项,这时因为当时的内核体系架构与你用于开发的电脑上的体系架构如出一辙。假如要做ARM架构下的装备:

$make menuconfig ARCH=arm
便能够对ARM体系下的linux内核进行装备操作。

假如需求编译,还要指定穿插编译器和体系架构类型。

关于linux的内核一般有两种映像,一种对错紧缩的映像:Image,另一种是他的紧缩版zImage,在紧缩的镜像前端还包含了解紧缩的代码。因为嵌入式体系的存储空间较小,一般会选用zImage的内核,献身速度,可是能得到较小的内核。

Linux内核中zImage的进口程序为arch/arm/boot/compressed/head.S

这个文件首要完结以下作业:

1)敞开MMU和Cache

2)调用decompress_kernel()解压内核

3)调用call_kernel()进入非紧缩内核Image 的发动

head.S文件剖析:

在113行以上是关于debug的相关代码和ARM的不同版别的不同。从114行开端,就是函数的进口:

114 start:
115 .type start,#function
116 .rept 8
117 mov r0, r0
118 .endr
119
120 b 1f
121 .word 0x016f2818 @ Magic numbers to help the loader
122 .word start @ absolute load/run zImage address
123 .word _edata @ zImage end address
124 1: mov r7, r1 @ save architecture ID
125 mov r8, r2 @ save atags pointer

从这段代码中能够看出,一共操作的3个寄存器r0,r1,r2正是bootloader调用linux内核时需求操作的3个寄存器。r0寄存器中寄存0。然后是r1的CPU类型和r2中的传入参数列表的指针地址。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/277019.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部