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

U-Boot 移植(2)

3.2 在 uboot 中自定义开发板在U-Boot 移植1中我们知道 LCD屏幕 和 网络驱动存在问题需要对 uboot源码进行修改但在此之前我们先在 uboot 中添加自己用的开发板。3.2.1 添加开发板默认配置文件先在configs/目录下创建默认配置文件复制 mx6ull_14x14_evk_emmc_defconfig然后重命名为 mx6ull_kd_defconfig命令如下cdconfigscpmx6ull_14x14_evk_emmc_defconfig mx6ull_kd_defconfig修改默认配置文件其中 imximage.cfg 主要包含以下三个核心内容1. 核心镜像头部信息它规定了 U-Boot 镜像最终在物理内存DDR里运行的绝对起始地址通常是 0x87800000以及镜像的大小。芯片的 Boot ROM 读到这些数据后才知道后续要把 U-Boot 代码搬运到内存的什么地方去执行。2. DRAM内存的物理时序参数关键这是它最重要的职责。在 U-Boot 运行之前512MB 的 DDR3 内存芯片是无法使用的。imximage.cfg 里面密密麻麻写满了对 i.MX6ULL 内部 MMDC内存控制器寄存器的配置值。包括内存的时钟频率。内存的各种延迟时序t R C D t_{RCD}tRCD​、t R P t_{RP}tRP​、t C L t_{CL}tCL​等。内存的容量和位宽设置。 技术背景芯片的 Boot ROM 在启动时会先一行行执行这个文件里的寄存器配置强行把 DDR3 内存给初始化好然后才能把 U-Boot 的核心代码从 SD 卡里拷贝进内存运行。3. 基础时钟和引脚配置配置 CPU 核心的最基础工作频率以及少数几个与启动相关的 critical关键引脚状态。修改1现在默认配置文件中的路径为“IMX_CONFIGboard/freescale/mx6ullevk/imximage.cfg”我们要把路径改成我们自己的“IMX_CONFIGboard/freescale/mx6ull_kd/imximage.cfg”修改2现在目标是默认的MX6ULL_14X14_EVKCONFIG_TARGET_MX6ULL_14X14_EVKy改成我们自己的CONFIG_TARGET_MX6ULL_KDy3.2.2 添加开发板对应头文件在 includ/configs/ 目录下复制 mx6ullevk.h 并重命名为mx6ull_kd.h修改宏定义:#ifndef__MX6ULLEVK_CONFIG_H#define__MX6ULLEVK_CONFIG_H改为#ifndef__MX6ULL_kd_CONFIG_H#define__MX6ULL_kd_CONFIG_H3.2.3 添加开发板对应板级文件夹在 3.2.1 中我们把默认配置文件中的路径改成了我们自己的“IMX_CONFIGboard/freescale/mx6ull_kd/imximage.cfg”因此我们需要添加这个 mx6ull_kd 板级文件夹将 board/freescale/mx6ullevk复制并且重命名为mx6ull_kd1. 修改内部文件将 mx6ullevk.c 重命名为 mx6ull_kd.c2. 修改makefileobj-y:mx6ullevk.o改成obj-y:mx6ull_kd.o3.修改 imximage.cfg 文件PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000改为PLUGIN board/freescale/mx6ull_kd/plugin.bin 0x00907000plugin.bin(插件程序)在 i.MX6ULL 启动流程中的核心作用就是专门在上电最早期帮 CPU 初始化外部的 512MB DDR3 内存。它是为了解决一个嵌入式启动中“镜像太大但内存还没准备好”的矛盾而生的。为什么要用它i.MX6ULL 芯片刚上电时外部的大内存DDR3是处于瘫痪状态的此时 CPU 只能使用自己内部自带的、极其微小的缓存空间OCRAM容量只有 128KB。现代的 U-Boot 加上设备树DTB文件体积通常有 400KB ~ 500KB 甚至更大根本没办法直接塞进这 128KB 的内部缓存里。芯片内部固化的启动程序Boot ROM非常死板它没办法处理复杂的、需要动态判断的 DDR3 内存初始化 C 语言逻辑。️ plugin.bin 是如何处理的为了打破这个死局NXP 设计了 plugin.bin。它是一个体积只有几 KB 的微型裸机小程序。它的工作流程就像一场完美的接力赛上电后Boot ROM 发现整个 U-Boot 太大装不下于是它只把这几 KB 大小的 plugin.bin 拷贝到内部 128KB 缓存里。Boot ROM 跳转到 plugin.bin 里执行。plugin.bin 内部运行着真正的 C 语言代码它用最完美的逻辑把板子上那块 512MB 的 DDR3 内存彻底初始化并激活。内存开通后plugin.bin 把控制权还给 Boot ROM。Boot ROM 这时就可以把几百 KB 大小的完整 U-Boot 镜像拷贝到已经就绪的 512MB DDR3 内存里去运行。4.修改 Kconfig 文件ifTARGET_MX6ULL_14X14_EVK||TARGET_MX6ULL_9X9_EVK需要改成和默认配置文件中相同的 TARGETCONFIG_TARGET_MX6ULL_KDyifTARGET_MX6ULL_KD同样的config SYS_BOARDdefaultmx6ullevkconfig SYS_CONFIG_NAMEdefaultmx6ullevk也改成对应的config SYS_BOARDdefaultmx6ull_kdconfig SYS_CONFIG_NAMEdefaultmx6ull_kd5. 修改 MAINTAINERS 文件MX6ULLEVK BOARD M:Peng Fanpeng.fannxp.comS:Maintained F:board/freescale/mx6ullevk/F:include/configs/mx6ullevk.h F:configs/mx6ull_14x14_evk_defconfig F:configs/mx6ull_14x14_evk_plugin_defconfig改成如下对应的文件MX6ULLEVK BOARD M:Peng Fanpeng.fannxp.comS:Maintained F:board/freescale/mx6ull_kd/F:include/configs/mx6ull_kd.h F:configs/mx6ull_kd_defconfig3.2.4 修改图形界面配置文件仅完成上述修改后进行编译编译系统会报错或者你的配置无法生效。必须修改图形界面配置文件即顶层 Kconfig 文件。原因在于 U-Boot 采用了基于 Kconfig 的配置机制。以下是纯技术层面的逻辑与底层编译机制分析1.顶层 Kconfig 掌握全局宏符号的“定义权”在 configs/mx6ull_kd_defconfig 中写入了CONFIG_TARGET_MX6ULL_KDy这属于一个赋值语句。然而在 Linux 驱动或 U-Boot 体系中任何宏CONFIG_XXX要能够被赋值必须先在某个 Kconfig 文件中被 config 关键字定义注册。如果在顶层总名录中没有定义 TARGET_MX6ULL_KD 这个配置项编译系统在解析 defconfig 时会判定其为一个非法/不存在的符号并直接将其从当前的 .config 文件中抹去。2.局部 Kconfig 的依赖链无法闭合在 board/freescale/mx6ull_kd/Kconfig 内部写了ifTARGET_MX6ULL_KD...endif这是一个条件块。只有当外部传入的 TARGET_MX6ULL_KD 变量为真等于 y时这个 if 块内部的声明如 SYS_BOARD 默认为 “mx6ull_kd”才会执行。如果顶层 Kconfig 没有定义 TARGET_MX6ULL_KD那么defconfig 中的赋值失效。TARGET_MX6ULL_KD 的值恒为假未定义。整个 board/freescale/mx6ull_kd/Kconfig 内部的所有默认值default全部无法加载。编译系统最终获取到的 SYS_BOARD 和 SYS_CONFIG_NAME 为空引发诸如 configs/.h 找不到的编译错误。3. 目录检索路径Source 机制未打通U-Boot 顶层 Makefile 在编译时会读取配置阶段生成的符号表。如果没有在顶层的 arch/arm/cpu/armv7/mx6/Kconfig 中显式包含新生成的局部 Kconfigsourceboard/freescale/mx6ull_kd/Kconfig那么 Kconfig 解析器在扫描整个源码树时根本不会进入 board/freescale/mx6ull_kd/ 目录去读取任何配置文件。你的新板级配置在逻辑上处于死胡同状态无法并入编译主线。因此必须在配置文件修改完毕后打开 arch/arm/cpu/armv7/mx6/Kconfig 执行以下两处修改注册目标宏搜索 config TARGET_MX6ULL_14X14_EVK在其下方并列加入你的单板宏声明后面几行要在前面输入 Tab 严格对启config TARGET_MX6ULL_KD boolSupport mx6ull_kdselect MX6ULL select DM select DM_THERMAL引入路径拉到该文件的最底端在大量的 source 语句末尾加入你新目录的路径sourceboard/freescale/mx6ull_kd/Kconfig只有打通了这一条 “顶层注册→ \rightarrow→关联局部 Kconfig→ \rightarrow→激活 defconfig 赋值→ \rightarrow→释出具体 Makefile 变量” 的技术完整链路U-Boot 编译系统才能正常工作。3.2.5 建立编译脚本在根目录下新建 mx6ull_kd.sh#!/bin/bash# 1. 彻底清理工程清除之前由于用错编译器留下的错误缓存这步非常关键makeARCHarmCROSS_COMPILEarm-buildroot-linux-gnueabihf- distclean# 2. 配置基线载入刚刚新建的默认配置文件 mx6ull_kd_defconfigmakeARCHarmCROSS_COMPILEarm-buildroot-linux-gnueabihf- mx6ull_kd_defconfig# 3. 全速编译调用虚拟机 12 个线程全速编译 U-Boot 源码makeARCHarmCROSS_COMPILEarm-buildroot-linux-gnueabihf--j12在根目录下执行chmodx mx6ull_kd_emmc.sh ./mx6ull_kd_emmc.sh即可完成 uboot 的一键编译用U-Boot 移植1的方法进行烧录可以发现单板识别依然是官方 EVKModel: Freescale i.MX6 ULL 14x14 EVK Board Board: MX6ULL 14x14 EVK底层机制U-Boot 在启动时Model 的名字是从设备树.dtb文件的根节点 compatible 属性中读取的而 Board 的名字是由 board/freescale/mx6ull_kd/mx6ull_kd.c 中的 checkboard() 函数硬编码输出的。技术现状这说明你的默认配置文件defconfig中设备树编译目标CONFIG_DEFAULT_DEVICE_TREE依然指向的是原厂的 imx6ull-14x14-evk且 mx6ull_kd.c 内部的文本字符串尚未修改。我们先不对设备树进行修改先处理 Board 的内容打开 board/freescale/mx6ull_kd/mx6ull_kd.c。找到 checkboard() 函数将 puts(“Board: MX6ULL 14x14 EVK\n”); 修改为专属单板名称例如 puts(“Board: MX6ULL KD \n”);。烧录运行结果如下:3.2.6 流程图总结
http://www.zskr.cn/news/1388122.html

相关文章:

  • 系统集成中的诚实失败:推理日志如何揭示隐藏的认知偏差
  • 加抑制剂润滑油氧化安定性测定仪:原理、结构与技术参数解析
  • 从零构建多智能体框架:基于“片场”模型的设计与实战
  • 2026年崇左市正规上门黄金白银回收品牌门店名录 K金+铂金+金条+银条回收门店联系方式推荐+指南 - 盛世金银回收
  • AI Agent 完全拆解:从原理到架构到实战,一次讲透(3)
  • AI+Obsidian进阶玩法,自动把播客视频变成可搜索的永久知识库
  • Rails AI后台任务优化:智能重试、速率限制与死信队列实战
  • 算法公平性:群体公平与个体公平的权衡与融合技术实践
  • 自动剪辑哪个更省事?5款实测对比不翻车:日更矩阵如何批量混剪不撞车
  • Java 高频八股:静态、成员、内部类,一篇文章全搞定,99%小白搞不清
  • Lindy效应如何重塑营销自动化:3个被低估的“时间验证指标”正在淘汰83%的传统工作流
  • 72小时极限压测PlayAI语音引擎:超时丢帧、语调塌陷、跨语言混读错误率飙升——这份报告可能改变你的TTS选型决策
  • MCP安全漏洞深度解析:命令注入与SSRF的2026年防御实战
  • 2026年保定市本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 大熊猫898989
  • 安卓6老设备救星:手把手教你用Termux v0.79离线版跑起Linux(附避坑源配置)
  • Linux系统中用户锁定后如何解锁
  • 在线PDF工具真免费评测:iLovePDF如何通过五大维度考验
  • 0.39美元/千条:Serverless架构下的极致成本优化数据抓取实战
  • TVA在电子元器件领域的创新应用(6)
  • Excel中VLOOKUP与IF嵌套实战:从查不到到智能决策
  • 2026年儋州市正规上门黄金白银回收品牌门店名录 K金+铂金+金条+银条回收门店联系方式推荐+指南 - 盛世金银回收
  • 驻马店亲测靠谱居家养老品牌,真实经验分享
  • C语言位运算完全指南:从代数公理到工程实践
  • Kali Linux WSL 从零安装 XFCE4 桌面完整指南
  • Spark框架:Unity商业级无代码游戏开发全链路实践
  • 丙午年四月初十雨夜风
  • TM1620芯片手册没讲透的细节:数码管驱动中的‘位’与‘段’到底怎么接线?
  • 番茄小说下载器:如何高效构建个人离线小说图书馆
  • 负二项式分布:解决计数数据过离散性的实战指南
  • Python字符串拼接进阶:从+号地狱到f-string工程实践