嵌入式系统中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引导启动内核;内核挂在根文件系统和普通文件系统;在文件系统下执行特定的应用程序。

相关文章
|
监控 Python
【python】实现cpu/内存监控的功能(非常简单)
【python】实现cpu/内存监控的功能(非常简单)
|
8月前
|
存储 缓存 人工智能
腾讯新闻 item_search - 热榜数据接口对接全攻略:从入门到精通
腾讯新闻item_search热榜接口是获取其全领域(时政、科技、财经等)实时热点数据的核心工具,支持多维度筛选与分页查询,可高效获取标题、热度指数、传播数据及关联话题,广泛应用于舆情监测、资讯聚合与热点分析,助力开发者精准掌握平台热点动态。
|
12月前
|
供应链 JavaScript 测试技术
硬件产品研发管理工具实战指南
本文深入剖析硬件研发中的三大核心挑战:需求传递失真、BOM管理混乱与测试验证低效,并结合学术研究与实战案例,提出可落地的解决方案框架。通过“需求穿透管理”、“BOM智能管控”和“测试自动化闭环”等方法,帮助企业提升研发效率与产品质量。同时推荐多款实用工具,并提供三步启动升级路径,助力硬件团队实现管理升级,降低项目风险,提升交付质量。
|
11月前
|
存储 持续交付 Docker
Docker:轻量级容器技术重塑应用交付
Docker:轻量级容器技术重塑应用交付
|
自然语言处理 Linux 芯片
实践经验分享:以太网MAC和PHY层问题的解决方案
实践经验分享:以太网MAC和PHY层问题的解决方案
|
人工智能 并行计算 程序员
【AI系统】SIMD & SIMT 与芯片架构
本文深入解析了SIMD(单指令多数据)与SIMT(单指令多线程)的计算本质及其在AI芯片中的应用,特别是NVIDIA CUDA如何实现这两种计算模式。SIMD通过单指令对多个数据进行操作,提高数据并行处理能力;而SIMT则在GPU上实现了多线程并行,每个线程独立执行相同指令,增强了灵活性和性能。文章详细探讨了两者的硬件结构、编程模型及硬件执行模型的区别与联系,为理解现代AI计算架构提供了理论基础。
4016 12
|
存储 Ubuntu Linux
linux系统中rootfs根文件系统制作及挂载基本操作
linux系统中rootfs根文件系统制作及挂载基本操作
3926 1
|
Ubuntu 网络协议 数据安全/隐私保护
【Ubuntu】sudo apt-get update 无法解析域名(亲测有效)
在Ubuntu 18.04系统中,用户在执行sudo apt-get update时遇到“无法解析域名‘ip’”的错误。经分析,问题源于之前设置的网络代理配置未完全清除。解决方案是找到并重命名/etc/apt/apt.conf.d下的proxy.conf文件,使其不再生效。操作后,sudo apt-get update命令恢复正常,问题得到完美解决。
6023 4
【Ubuntu】sudo apt-get update 无法解析域名(亲测有效)
|
Ubuntu 安全 网络协议
|
Python
Python中导入错误(ImportError)
【7月更文挑战第14天】
1538 11

热门文章

最新文章