Linux之Bootloader了解概念和启动步骤
发布时间:2021-11-23 15:59:56 所属栏目:教程 来源:互联网
导读:Bootloader,简而言之就是:它是一段小程序,在系统上电时开始执行,主要功能是初始化硬件设备、准备好软件环境,最后调用操作系统内核。 Bootloader种类比较多,常见的X86上的有LILO,GRUB,ARM架构上比较有名的是U-boot,VIVI. 还有其他的RedBoot / Etherboo
Bootloader,简而言之就是:它是一段小程序,在系统上电时开始执行,主要功能是初始化硬件设备、准备好软件环境,最后调用操作系统内核。 Bootloader种类比较多,常见的X86上的有LILO,GRUB,ARM架构上比较有名的是U-boot,VIVI. 还有其他的RedBoot / Etherboot等 启动Bootloader指令地址(ARM结构的cpu一般放在0x0000000地址处,而MIPS结构的CPU一般放在0xBFC00000) Bootloader常见两种操作模式:1。启动加载模式(没用户介入) 2.下载模式(用户命令操作) Bootloader中典型分区结构图: *Bootloader上电后第一个程序。 *Boot parameters分区中一般存放一些可设置的参数,比如IP地址、串口波特率,要传递给内核的命令行参数。 *kernel,嵌入式板定制的内核,包含内核启动参数 *Root filesystem文件系统,里面包含了linux能够运行的应用程序,和相关库等。 @Bootloader的两个阶段了解 1.第一阶段(使用汇编语言实现,依赖于cpu体系结构的初始化) 。硬件初始化(看门狗、RAM初始化等) 。为加载Bootloader的第二阶段代码准备RAM空间 。复制Bootloader的第二阶段代码到RAM空间中 。设置好栈 。调转到第二阶段代码的入口点 2.第二阶段(通常C语言实现,好处可读性和移植性) 。初始化本阶段要用到的硬件设备 。检测系统内存映射(memory map) 。将内核映像和根文件系统系统映像从Flash读到RAM内存中 。为内核设置启动参数 @Bootloader与内核交互 Bootloader和内核交互是单向的,因为它们启动有先后。 Bootloader传递参数给内核,有书说明:linux2.4.x后都是以数据结构:标记列表形式来传递启动参数。 标记的数据结构为tag,由tag_header结构和 一个联合union组成。如下: struct tag_header { __u32 size; __u32 tag; ; struct tag_mem32 { __u32 size; __u32 start; /* physical start address */ }; 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; /* * Acorn specific */ struct tag_acorn acorn; /* * DC21285 specific */ struct tag_memclk memclk; } u; }; ![]() (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |