当前位置 博文首页 > lyndon:嵌入式 linux 系统的组成与启动

    lyndon:嵌入式 linux 系统的组成与启动

    作者:[db:作者] 时间:2021-09-15 16:24

    组成

    bootloader + kernel + rootfs

    启动

    1. CPU 中固化的一小段代码,会操作 SPI 控制器,从 SPI Flash 0 地址开始读数据到 RAM(一般读最开始的 4K,是 bootloader 的前 4k,bootloader 一般一两百k大小)
    2. CPU 开始从 RAM 读取指令并执行;
      1. 执行 bootloader 第一部分(第一部分是汇编代码且不做压缩,第二部分是 C 代码且有压缩)
      2. 初始化CPU、DDR、PLL、Cache
      3. 解压第二部分 Image,并拷贝到内存执行
    3. CPU 执行 bootloader 第二段代码
      1. 完成串口、Flash、网口等驱动的加载,并构建一个 shell 环境来接受用户输入。
      2. 整个 bootloader 运行期间 CPU 的 MMU 是没有初始化的,所有的地址访问都是采用物理地址直接访问的。
      3. 解压 kernel 并拷贝到 RAM
      4. 准备好内核的启动参数,如 console=ttyS0,115200 root=31:2 mtdparts=ar7100-nor0:196608(boot),835236(kernel),-(rootfs) 这里主要是把 bootloader 里设置的 MTD 分区信息传递给内核,还有需要加载的根文件系统
      5. 跳转到 kernel 入口开始运行
    4. kernel 代码开始运行
      1. kernel 各个子系统初始化
      2. MMU 初始化。(MMU 功能简介:CPU 执行单元发出的内存地址将被 MMU 截获,从 CPU 到 MMU 的地址称为虚拟地址;MMU 将这个地址翻译成另一个地址发送到 CPU 芯片的外部地址引脚上,这个地址称为物理地址。)
      3. 挂载 rootfs(要挂载的 rootfs 是通过内核启动参数来获取的)
      4. kernel 对 Flash 的访问都是通过 MTD 子系统来进行的,它抽象了对各种 Flash 设备的访问,提供统一的接口
      5. 初始化各种类型的驱动程序
    5. 启动 /sbin/init
      1. 执行 rcS
      2. 启动 shell
    cs
    下一篇:没有了