嵌入式学习Linux内核驱动1--基本概念
系统上电后,启动过程依次经历Bootloader、内核kernel和根文件rootfs系统三个阶段。其中Bootloader负责初始化硬件并加载内核内核建立操作系统核心功能并挂载根文件系统,最终启动用户空间进程以提供操作环境。
一、启动流程概述
- 操作系统启动分为三个主要部分:
- Bootloader(可看作一个小的裸机程序,为linux准备运行环境)、
- 内核(Kernel)操作系统的核心
- 根文件系统(Root FS)按照一定格式组织的一堆文件·
- 只有这三个组件成功加载并运行后,用户才能看到图形界面或命令行界面。
- 这一过程适用于Linux和Windows等主流操作系统。
1Bootloader 阶段
- Bootloader是一个引导程序的统称,用于为操作系统准备运行环境并启动内核。
- 它本质上是一个小的裸机程序,在系统上电后首先执行。
- 主要任务包括
- 初始化
- 初始化CPU工作模式(如SVC模式)
- 初始化异常向量表
- 初始化时钟
- 初始化内存等关键硬件资源。
- 关闭
- 必须关闭中断
- 关闭看门狗定时器
- 关闭数据缓存(D-Cache必须关闭)
- 关闭MMU
- 以确保初始化过程的稳定性和可预测性。
- 根据启动方式(如SD卡、EMMC、NAND Flash或网口)初始化相应的存储设备,并集成必要的通信协议(如UART、SPI、网络协议)。
- 将内核镜像从外部存储搬移到内存中,并向内核传递启动参数(如根文件系统位置与类型、调试终端配置)。
- 最终通过跳转到内核入口地址将CPU控制权完全移交给内核,自身不再参与后续运行。
缓存区(D-Cache)
看门狗作用:“当系统死机或跑飞时,自动把 CPU 拉回复位,让设备自己重启,而无需人工上电。”
1. 工作逻辑:
上电后软件必须 周期性“喂狗”(重装计数器)。
如果程序卡死、进死循环、中断风暴,喂狗停止。
计数器递减到 0 → 触发复位 → 系统从头重新运行。
MMU:
2内核(Kernel)阶段
- 内核是操作系统的核心程序,负责管理系统资源并提供基础服务。
- 其主要功能包括进程管理(IPC)、内存管理、文件系统管理、设备驱动管理和网络协议栈支持。
- 实现多任务调度机制,使多个进程/线程能够并发执行。
- 提供进程间通信(IPC)机制,实现不同进程之间的数据交换与同步。
- 管理物理与虚拟内存映射,支持大地址空间下的内存分配与保护。
- 支持多种文件系统格式(如ext4、FAT32),并通过挂载机制接入存储设备。
- 在初始化完成后,内核会启动第一个用户空间进程——init进程(PID=1),作为所有用户进程的起点。
- Init进程由内核内部的初始化代码通过exec系统调用转换而来,标志着系统进入用户态运行阶段。
- 设置环境变量 /启动相应服务->shell->userapp
3根文件系统(Root FS)
- 根文件系统是操作系统启动后挂载的第一个文件系统,包含运行所需的所有基础文件。
- 它是以目录结构组织的一组文件集合,通常对应Linux中的“/”根目录。
- 包含四类主要功能文件:
- 配置文件(位于/etc)
- 启动脚本(用于初始化系统服务)
- 系统命令(如ls、cd等可执行程序)和
- 用户应用程序
- 还包括普通数据文件,如图片、音频、文本等,用于支持系统的完整功能体验。
- 文件系统的具体内容根据实际需求灵活定制,可增减文件和服务以适应嵌入式或服务器场景。
- 挂载机制类似于电路连接,使系统能访问外设中的文件内容,而无需将其全部加载至内存。