嵌入式Linux-BIOS-Uboot-Boot loader 学习笔记

========******=========******========******=========******==========

书籍名称《嵌入式Linux基础教程》,人民邮电出版社出版。非常好的一本书。虽说是基础教程,但是介绍的知识还是非常详细,不仅仅适合入门读者看,还适合有一定基础的人回头细看。下文部分知识是该书籍上的,另外做了一些更加详细的补充.

                                 嵌入式Linux-BIOS-Uboot-Boot loader 学习笔记_第1张图片

1.BIOS和引导装入程序

为桌面计算机拥电后, 一种叫作BIOS的软件系统会立即接管对系统处理器的控制. [BIOS是Basic Input/Output Software (基本输入输出软件)的缩写,但直际上. BIOS在计算机系统中发挥的作用已经远远超过了最初设计该软件时的目标,而且越来越复杂。

通常. BIOS系统都是保存在闪存(Flash)里面的。

BIOS是一组复杂的系统配置软件例程,它记录了计算机硬件体系结构的底层细节信息。

在系统加电时候,BIOS会立即接管对系统处理器的控制,它最主要任务就是初始化系统硬件,特别是内存子系统,然后将操作系统从硬盘\emmc\Flash中读出并加载。

初始化系统的几个重要任务如下:

  1. 初始化关键硬件组件,例如SDRAM控制器,I/O控制器等
  2. 初始化系统内存,并准备将系统系统控制权移交给相应的操作系统。
  3. 分配系统资源,例如内存以及外设控制器的中断电路。
  4. 提供相应的机制,用于定位和加载操作系统映像。
  5. 加载操作系统,并将系统控制权移交给操作系统,将必要的启动信息,例如系统全部内存块的数量、尺寸,串行通信端口的速度以及其它底层硬件配置数据传递给操作系统。

BIOS的首要任务就是启动内存子系统。内存初始化之后,就可以作为一种资源进行使用,很多BIOS完成内存初始化后第一个动作就是将自身复制到DRAM中,以便获得更快的执行速度。

一、BIOS

1.功能

进行自我检测与读取boot loader

2.大致工作流程

①系统启动之后,加载BIOS,并通过BIOS去加载CMOS的信息,并且借由CMOS内的设置值取得主机的各项硬件配置,例如CPU与接口设备的沟通频率、启动设备的查找顺序、硬盘的大小与类型、系统时间、各周边总线是否启动PnP、各接口设备的I/O地址。以及与CPU沟通的IRQ中断等的信息

②取得上面这些信息后,BIOS开始自我检测。然后开始执行硬件检测的初始化,并设置PnP设备,之后再定义出可启动的设备顺序,接下来就会开始进行启动设备的数据读取了

③BIOS会指定启动的设备好让我们可以读取此盘中的操作系统内核文件,由于不用的操作系统它的文件系统格式不同,此时就需要一个启动引导程序(boot loader)来处理内核文件加载问题,boot loader就在启动设备的第一个扇区,也就是MBR。

 

二、boot loader

1.概念与特点

Boot loader是一段硬件引导程序,主要是为了内核的运行做准备的,其运行在操作系统内核之前。主要作用是:初始化硬件设备,建立一个内存空间。

将系统的硬件环境和软件环境调整到一个合适的状态,也即是为调用内核准备好环境。而且不同的目标版也需要不同的Boot loader支持。

嵌入式系统中:

固态存储设备的典型空间分配结构:

嵌入式Linux-BIOS-Uboot-Boot loader 学习笔记_第2张图片

[Boot loader]—[Boot parameters]—[Kernel]—[Root filesystem]

Boot loader具有两种操作模式,即启动模式和下载模式。

下载模式:是指通过串口或者网络,从主机上下载文件(比如:内核镜像和根文件系统镜像等),这些下载的文件保存在目标机的RAM中,通过Boot loader,这些文件会由RAM中写道FLASH中。

启动模式:即Boot loader从目标机上的某个固态存储设备将操作系统加载到RAM中运行。

Boot loader有两个运行过程,成为stage1和stage2。

stage1的主要步骤是:硬件初始化、为stage2准备RAM空间、将stage2复制到RAM空间、设置堆栈、跳到stage2的C入口点。

stage2的主要步骤是:初始化stage2要使用的硬件设备、检查系统存储、从FLASH中读取内核镜像和根文件系统镜像到RAM中、设置内核参数、调用内核。

对于电脑等大型嵌入式系统:

boot loader可以存在MBR中,也可以存在文件系统的boot srctor中。总之,boot loader最后的功能都是用来加载内核文件

2.MBR与boot loader的关系

在安装Windows的时候,Windows系统会默认在MBR内会安装一份boot loader,并且在自己文件系统的boot sector内也会安装有boot loader。

在安装Linux的时候,你可以选择将boot loader安装在MBR,也可以选择不安装在MBR中

3.启动扇区:boot sector

每一个文件系统中都含有一个boot sector,并且这个启动扇区内也包含有boot loader。因此MBR中提供有选项功能,你可以选择启动哪一个文件系统的boot sector内的boot loader来加载不同的操作系统

4.内核文件加载结构图

过程详解

嵌入式Linux-BIOS-Uboot-Boot loader 学习笔记_第3张图片

MBR内提供了选项功能,你可以选择不同的选项来加载文件系统例如:

你可以选择加载Windows系统的boot sector内的启动引导程序,来最终进入Windows系统。

也可以选择Linux系统的boot srctor内的启动引导程序,来最终进入Linux系统

5. U-BOOT介绍:

    特点:

        开放源代码

        支持多种嵌入式操作系统如Linux,NetBSD,VxWorks,RTEMS等

        支持多个处理器系列,例如ARM,PowerPC,x86,MIPS等。

        较高的可靠性和稳定性

        高度灵活的功能设置,适合U-Boot调试,操作系统不同引导要求,产品发布等。

        丰富的设备驱动源码,如串口,以太网,SDRAM,FLASH,LCD等

        较为强大的开发调试文档和强大的网络技术支持

    U-boot文件结构:

        U-boot代码采用了一种高度模块化的编程方式,与移植树有关的有以下几个目录

        board:这个目录存放了所有U-boot支持的目标板的子目录。比如board/smdk2410/*就是我们所关心的。要将

        U-boot移植到自己的目标板上 如s3c241x,就要参考这个目录下的内容,

            比如对Falsh宽度和大小的定制就要修改其中的flash.c

        common:独立于处理器体系结构的通用代码,如内存大小探测与故障检测。

        CPU:与处理器相关的文件

        driver:通用设备驱动。

        fs:存放了U-boot支持的文件系统

        Include:U-boot头文件,这个目录存放头文件的公共目录,

            其中include/configs/smdk2410.h定义了所有和s3c241x相关的资源的配置参数,

            我们往往只需修改这个文件就可以配置目标板的参数,如波特率,引导参数,物理内存映射等。

        lib_xxx:处理器体系相关的文件.

        lib_arm:目录分别包含于PowerPC,arm体系相关的文件。

        net:与网络功能相关的文件目录,如bootp,nfs,tftp

        post:上电自检文件目录。

        tools:用于创建U-boot S-RECORD和BIN镜像文件的工具。

 三、内核加载

boot loader读取内核文件后,接下来Linux就会将内核加压缩到内存中,并且利用内核的功能,开始测试与驱动个各周边的设备,抱愧存储设备、CPU、网卡、声卡等

此时Linux内核会以自己的功能重新检测一次硬件,而不一定会使用BIOS检测到的硬件信息

白浪介绍:

(1)关于射频、微波、天线、无线通信、智能硬件、软件编程、渗透安全、人工智能、区块链、大数据、Java、Android、C/C++、python等综合能力的培养提升。

(2)各种学习资料、学习软件分享。

1.扫码关注公众号(Geekxiaobai)

                          嵌入式Linux-BIOS-Uboot-Boot loader 学习笔记_第4张图片          嵌入式Linux-BIOS-Uboot-Boot loader 学习笔记_第5张图片

2. 在后台发送“Python高级编程”“Python Graphics”或者“2003”,即可免费获得电子书籍。仅供学习之用。

3. 扫码关注后,查看往期内容,会有更多资料惊喜等着你来拿哦  

  想要更多相关学习资料,可以在文章后面留言哦,后期将会根据留言需求免费分享学习资料哦。

 

你可能感兴趣的:(Linux,嵌入式)