当前位置: 首页 > news >正文

Linux 系统移植

一、Linux 系统移植所需文件

  1. uboot:一段逻辑代码,核心功能为初始化硬件外设与加载内核,是系统启动的 “先行官”。
  2. zImage:承担着内存管理、任务管理、多任务间通信、网络管理以及文件系统管理等关键功能,是系统运行的核心软件。
  3. dtb(设备树文件):与内核配合使用,包含硬件信息,为内核识别硬件提供依据。
  4. rootfs(文件系统):实现与用户的交互,涵盖 shell 命令、库文件,且因 Linux 系统 “一切皆是文件”,它还能实现对设备的操作以及内核信息的查看。

二、IMX6ull SOC 资源

IMX6uLL - Mini 平台分为核心板(系统启动必备资源)和底板(外设资源)。

核心板包含:

  • IMX6uLL 芯片:内部有 32K ICache(指令缓存)、32K DCache(数据缓存)、128K L2Cache(指令和数据缓存)、128K SRAM(初始化 DDR 前可使用的无需初始化的内存空间)、96k BotROM(厂家固化的启动代码)。
  • DDR 芯片(512M):内存,掉电数据丢失,但读写速度快。
  • EMMC 芯片(8G):EMMC 分为 EMMC0 和 EMMC1,其中一个是核心板上的 8G EMMC 芯片,另一个是底板 SD 卡(32G)对应的 EMMC。

三、IMX6uLL 启动方式

  • USB 启动:驱动后,需通过 PC 经 USB 传输系统文件给开发板完成启动,适用于硬件平台无系统时的首次启动。
  • SD 卡启动:系统烧录到 SD 卡后由 SD 卡启动,常用于平台代码开发调试或检测硬件平台好坏。
  • EMMC 启动:系统烧录到 EMMC 后由 EMMC 启动,可实现开发板随系统自启动。
  • NAND 启动:暂无法实现,即不能将系统烧录到 Nand Flash 并由其启动。

四、烧录方法

  1. Windows 下烧录到 SD 卡:使用 NXP 的 mfgtool 工具。
  2. Windows 下烧录到 EMMC。
  3. Ubuntu 下烧录到 SD 卡。
  4. Ubuntu 下烧录到 EMMC。
  5. tftp + nfs 网络启动:通过网络传输文件实现启动。

五、IMX6uLL 启动流程

  1. 上电启动,执行 0x0 处的代码,经中断向量表进入复位异常,跳转至对应函数启动。
  2. 执行 IMX6ull 内部 96k 的 BotROM 代码:完成 CPU 信息校验;查看启动方式;依据启动方式寻找可执行代码(IVT + BOOT DATA [uboot.bin] + DCD [DDR 寄存器信息]);BotROM 代码找到 DCD 并初始化 DDR;将 uboot.bin 拷贝到 DDR 中运行。
  3. uboot 阶段:重新设置中断向量表位置(借助协处理器 CP15);初始化串口、网口、EMMC 等硬件外设;加载引导内核启动:uboot 自搬移以腾出内存空间;从 EMMC 查找 zImage 和 DTB 文件(或通过 tftp 从服务器下载)并加载到 DDR;通过 bootz 命令启动内核 zImage;uboot 将文件系统相关参数 bootargs 写入设备树的 choosen 节点;uboot 向内存传参(r0 为固定值、r1 为 CPU ID 号、r2 为设备树内存地址);内核根据设备树信息重新初始化外设;内核找到 choosen 节点查找文件系统位置;内核引导启动文件系统中的内核进程,通过 fork + exec 启动其余所有进程任务,其中包含 shell 终端进程;最终系统启动完成,进入人机交互界面。

六、uboot

功能

  • 初始化硬件外设。
  • 引导启动内核。

工作流程

初始化 i2c、DDR、EMMC、Serial、Net 等;进入人机交互环节:用户输入回车可进入 uboot 系统并输入命令交互;若用户不输入回车,uboot 会执行 bootcmd。

重点问题

  1. Linux 系统移植所需文件及作用:前文 “一、Linux 系统移植所需文件” 已详细说明。
  2. Linux 系统启动流程:前文 “五、IMX6uLL 启动流程” 已详细阐述。
  3. uboot 中 bootcmd 和 bootargs 的含义:bootcmd 是 uboot 默认执行的命令,用于自动引导系统;bootargs 是传递给内核的参数,包含文件系统等相关信息,帮助内核找到并挂载文件系统。
http://www.dtcms.com/a/395777.html

相关文章:

  • 小杰机器学习(six)——概率论——1.均匀分布2.正态分布3.数学期望4.方差5.标准差6.多维随机变量及其分布
  • 【Linux】Ext系列文件系统(上)
  • 【ROS2】Beginner: Client libraries - 发布者、订阅者例子 C++ Python
  • AI设计功能性病毒:从DNA语言模型到精准杀菌实战
  • Qt 共享指针QSharedPointer与std::shared_ptr
  • Java课程 第02周 预习、实验与作业:Java基础语法2:面向对象入门
  • 词性标注技术漫谈:为词语赋予语法灵魂的旅程
  • K230基础-MicroPython
  • 网站访问问题:无法访问此网站、404
  • Redis 与Memcached 的对比
  • PyTorch 神经网络工具箱:核心原理与实践指南
  • 广义矩估计错误指定时的一个推导【续5】
  • 【STM32】ADC数模转换器
  • Tensorboard学习记录
  • Redis中常见数据结构底层实现结构是什么
  • 高频交易技术演进:从毫秒到纳秒的极限延迟优化之路
  • 从零开始搭建并部署一个基于Django和YOLO的智能模型项目
  • MySQL零基础学习Day2——数据库基础操作
  • 数学笔试选择题:题组1
  • Linux常用命令51——tail查看文件尾部内容
  • Django多数据库配置:mysql、mongo、redis、达梦
  • 图像拼接(反向拼接巨难,求指教!)
  • [免费]基于Python的深度学习音乐推荐系统(后端Django)【论文+源码+SQL脚本】
  • 南华 NHL-1 型加载减速工况法轻型柴油车烟度检测系统:技术解析与实战指南
  • 学习Java遇到的一些问题
  • 基于SpringBoot招聘信息管理系统
  • 多线程—线程通信之notifyAll()/wait()方法Demo
  • kotlin 常用函数
  • 2025年CSP-J1入门级初赛题解
  • vue3的基本指令以及对js的导入和导出