嵌入式系统中bootloader、kernel、rootfs 介绍

简介: 嵌入式系统中bootloader、kernel、rootfs 介绍

bootloader基本介绍


1.什么是bootloader?


bootloader 简单来说就是引导加载程序。即在操作系统内核运行之前运行一小段程序。通过bootloader,引导启动内核操作系统。通常 bootloader 严重依赖于硬件的实现,特别是在嵌入式的世界。


2.bootloader的作用


  • 设置系统时钟、初始化SDRAM;


  • 对 bootloader 阶段所需要用到的硬件资源进行初始化;


  • 设置启动参数,启动内核


3.bootloader的启动过程


通常 bootloader 启动过程可分为单阶段和多阶段。以uboot(支持ARM和MIPS)为例,通常启动过程分为两阶段,即stage1和stage2。


stage1:第一阶段


第一阶段通常是用汇编写的,依赖于硬件的体系结构,通常是一些设备的初始化


硬件设备初始化(串口、时钟、SDRAM等)


为 bootloader 的 stage2 准备 RAM 空间


拷贝 bootloader 的 stage2 到 RAM


设置好栈


跳转到 stage2 的 C 语言入口点执行


stage2:第二阶段


第二阶段通常是 C 语言写的,主要是为了方便移植,通常包含以下步骤:


初始化本阶段要使用的硬件设备


检测系统内核映射


将kernel映像和根文件系统映像从 flash 上读到 RAM 空间上


为内核设置启动参数


启动内核


Linux kernel 认识


Linux kernel 是整个Linux操作系统的核心,主要功能就是负责进程管理调度、内存管理、虚拟文件系统(VFS)、网络管理、进程间通信(IPC)


image.png


如下图是 Linux 内核的整体架构。根据内核的核心内容,linux 内核提出了5个子系统,分别负责如下功能:


  • Process Scheduler:也称作进程管理、进程调度。负责管理CPU资源,让每个进程尽可能公平的访问CPU。


  • Memory Manager:内存管理。负责管理内存资源,以便让各个进程可以安全的共享机器的内存资源。另外内存管理还会提供虚拟内存机制,可以让进程使用多于 Memory 的内存,不用的内存会通过文件系统保存在外部非易失存储器中,需要使用的时候,再取回到内存中。


  • VFS(Virtual File System ):虚拟文件系统。Linux内核将不同功能的外部设备,例如Disk设备(硬盘、磁盘、NAND Flash、Nor Flash等)、输入输出设备、显示设备等等,抽象为可以通过统一的文件操作接口(open、close、read、write等)来访问。这就是Linux系统“一切皆是文件”的体现。


  • Network:网络子系统。负责管理系统的网络设备,并实现多种多样的网络标准。


  • IPC (Inter-Process Communication):进程间通信。IPC不管理任何的硬件,它主要负责Linux系统中进程之间的通信。


rootfs:根文件系统


Linux 系统中的根文件系统(Root File  System),简称rootfs,本质上还是一个文件系统。和普通文件系统不同的是,rootfs  是针对特定的操作系统的架构的一种实现形式。具体表现为:


  • 特定的文件夹,文件夹之间的关系,即组织架构或者目录结构


  • 特定的文件


Linux 系统中 rootfs 通常包含以下文件夹和文件:


  • /:根文件目录


  • /etc:相关的配置文件目录


  • /etc/init:存放系统启动相关的配置


  • /sbin:存放系统相关工具,系统命令


  • /bin:存放常用的一般命令等


一个根文件系统,主要存放以下内容:


  • 相关配置文件


  • 系统相关应用程序


  • 一般应用程序


  • 可执行程序所需要的环境等


bootloader、kernel 和 rootfs 在嵌入式系统中的分区结构


通常,当我们代码编写调试完成后,就需要通过一些工具或者命令来制作固件(这里的固件不作详解),然后将固件烧录到芯片上,固化在特定的硬件设备上,这个时候,就需要了解boot loader、kernel 和 rootfs的分区组织。


image.png


可以看到,我们的应用程序,最终是放在在文件系统上执行的。


总结


一个完整嵌入式系统执行:bootloader引导启动内核;内核挂在根文件系统和普通文件系统;在文件系统下执行特定的应用程序。

相关文章
|
4月前
|
存储 固态存储 Linux
Linux内核学习(二):Bootloader
Linux内核学习(二):Bootloader
66 0
|
3月前
|
Ubuntu Linux 虚拟化
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
86 0
Linux下的IMX6ULL——构建bootloader、内核、文件系统(四)
|
C语言 内存技术
PowerPC下uboot命令
PowerPC下uboot命令
93 0
|
Ubuntu Linux 虚拟化
buildroot构建 bootloader、内核、文件系统
buildroot构建 bootloader、内核、文件系统
444 0
buildroot构建 bootloader、内核、文件系统
|
Linux 编译器
Uboot + Kernel
Uboot + Kernel
154 0
|
Linux 数据安全/隐私保护 Windows
在Exynos4412上使用SD卡烧写Linux
在Exynos4412上使用SD卡烧写Linux
在Exynos4412上使用SD卡烧写Linux
|
Linux 调度 C语言
嵌入式 uboot引导kernel,kernel引导fs【转】
转自:http://www.cnblogs.com/lidabo/p/5383934.html#3639633 1、uboot引导kernel: u-boot中有个bootm命令,它可以引导内存中的应用程序映像(Kernel),bootm命令对应 common/cmd_bootm.
1050 0