Linux内核--基于正点原子IMX6ULL开发板的内核移植

1、Linux内核移植所需要的文件

1.1 bootloader

是嵌入式设备或计算机设备上电后只能够的第一段代码,负责初始化硬件外设和加载内核

在本文中使用 U-boot 作为 bootloader

1.2 Linux系统文件

  • 内核镜像文件(zImage):是 Linux 内核的一种压缩镜像文件,核心功能是压缩,并通过集成自解压器实现自引导,最终达到节约内存的目的。
  • 设备树文件(.dtb):与内核搭配使用的一个包含硬件信息的文件
  • 文件系统:rootfs,是Linux内核初始化后首先挂载的文件系统,用于实现与用户之间的交互

2、IMX6ULL 片上资源

IMX6ULL开发板的片上源如下图所示,其中Linux内核移植所需的文件均保存在EMMC上

  • IMX6ULL芯片
    • 64k L1 Cache(一级缓存):靠近CPU,速度最快,通常分为 I-Cache (指令缓存)和 D-Catch(数据缓存)两部分
    • 128k L2 Cache (二级缓存):同属缓存指令与数据
    • 128k SRAM CPU内部不需要初始化的一段内存空间
    • 96k BotROM 厂家固化的启动代码
  • DDR 512M (RAM)
  • EMMC(ROM)

3、IMX6ULL启动流程

3.1 上电启动,执行0x0处的代码(中断向量表->复位异常->跳转到BotROM值对应函数实现启动)

3.2 执行内部 96k的BotROM代码

  • 完成CPU信息检验、查看启动方式
  • 根据启动方式找到可执行代码对DDR实现初始化
  • 将uboot.bin拷贝到DDR中运行

3.3 uboot

  • 从新设置中断向量表的位置
  • 初始化硬件外设(串口、网口、EMMC)
  • 加载引导内核启动
    • uboot实现自搬移(转移到EMMC中)
    • 在EMMC上寻找(或使用tftp从服务器上下载) zImage 和设备树文件,并加载到DDR中
    • 通过bootz命令启动内核zImage
    • uboot将文件系统相关的参数 bootargs 写入到设备树的choosen节点中
    • uboot向内存传参:r0 固定值 r1 CPU ID号 r2 设备树内存地址
    • 内核根据设备树信息重新初始化外设
    • 内核会找到choosen节点查找文件系统所在位置
    • 内核引导启动文件系统中的内核进程
    • 进程 fork + exec启动其余所有进程任务
    • 其中有一个进程shell终端
    • 系统启动完成进入人机交互的界面
相关推荐
wuminyu18 小时前
专家视角看Java多态性的底层基石vtable(虚函数表)构建过程解析
java·linux·c语言·jvm·c++
嵌入式×边缘AI:打怪升级日志18 小时前
全志T113 Tina-Linux开发环境搭建:从安装依赖到打包烧录完整教程
linux·运维·服务器
yugi98783818 小时前
Linux下58mm热敏打印机驱动安装与配置指南
linux·运维·服务器
遇见火星19 小时前
centos7和centos8设置本地镜像为yum安装源的方法
linux·运维·服务器
piaopiaolanghua19 小时前
[Ai问答] Docker是否支持跨架构镜像,譬如ARM/X86
linux·运维·服务器
木木_王19 小时前
嵌入式Linux学习 | 数据结构(Day06)全解:线性表 + 栈队列 + 静态库 / 动态库(原理 + 代码 + 编译实战 + 易错点)
linux·数据结构·笔记·学习
howareyou2319 小时前
Linux中用户态的函数是如何通过系统调用进入内核态的(二)
linux·服务器·linux系统调用
杨云龙UP19 小时前
Oracle 19c多租户架构下设置用户密码永不过期及登录锁定策略说明_20260430
linux·运维·服务器·数据库·oracle
雨声不在19 小时前
不连接 USB 远程连接 Android 设备
linux
济61719 小时前
FreeRTOS 控制任务设计 (3)--- 闭环控制验证:仿真电机模型与软反馈实现
嵌入式·freertos