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

uboot入门-6移植要点

本篇作为结尾先对之前的文章进行下汇总uboot入门-1简介和运行uboot入门-2Makefile和编译uboot-3链接脚本和第一阶段启动uboot入门-4命令行和驱动管理uboot入门-5linux启动前夜uboot入门-6移植要点–本篇对于uboot移植需要先搞清楚下面几个概念作为SoC芯片厂家会做一个基础底板基于开源Uboot官方版本中找到一个最相近的板子配置进行移植去适配自己的芯片和底板。这就是芯片原厂BSP包。买别人SoC自己做底板的一般板卡厂家会拿到SoC直接提供的u-boot 源码做查看、修改(增加新功能) 或 u-boot 版本升级这三大块的用处修改升级都需要对新板子做适配/移植。如果SoC和板子都不是自己的只需要改功能的用户****产品厂家那就更容易了例如加一个命令行。一般板卡厂家是我们最经常遇到的场景芯片是别人的跟业务相关的底板是自己的。这就需要进行移植。1. u-boot 移植要点芯片公司、开发板厂家和用户之间联系芯片公司移植的 u-boot 从一开始是基于官方的 u-boot 拿来修改添加/修改自家的 EVK 评估版的板子型号、相关外设初始化文件并修改 u-boot 的 Makefile 配置然后把自家芯片的 EVK 评估版的硬件原理图、u-boot、Linux 和 根文件系统以及使用说明文档等等全部开源以供下游做应用的公司/厂家和做开发板的公司拿来做修改或直接应用做开发板的厂家在拿到了芯片公司提供的芯片评估版 EVK 板子的原理图后与 SoC 直接相关的比如 PMIC、DDR、FLASH、以太网 PHY 芯片等等不会做大改一般直接照搬过来画自己的开发板。因为在移植 u-boot 的时候就不用再为新选型的芯片做代码适配一般没必要做这种费力但效果不大的事情能直接用的就尽量直接用能不用改的就尽量不改。然后再拿到芯片公司提供的芯片评估版 EVK 板子对应的 u-boot 源码之后同样的再添加/修改为自家开发板的型号、添加一点点自己板子的外设初始化代码这个要求比较高并修改 Makefile便得到自家开发板适配的又一个 u-boot当用户拿到了开发板厂家 或者 芯片公司提供的 u-boot 源码即所有相关文件和初始化代码都写好了便可以直接编译进而使用或者自己再进一步定制化。一般把 u-boot 做成对应平台通用的和最小化的即只保留必要的板级外设初始化代码如串口、网口和 FLASH 等需要主要做适配都尽量找能现成使用的其他更多板级外设初始化在 Linux 移植部分中完成。如果要深入学习有以下要点可以参考1. 如果芯片公司或者单位提供了移植好的 u-boot可以用 beyong 软件把移植好的 u-boot 文件夹与 官方原版版本要一致进行对比看一看改动了哪些文件夹和哪些文件帮助学习。2. [uboot移植新手入门实践_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili](https://link.zhihu.com/?targethttps%3A//www.bilibili.com/video/BV15W411m7AQ)。版本比较新。3. [韦东山 _ 嵌入式Linux _ 第1期与2期间的衔接课程 _ u-boot编译体验和源码深度分析 _哔哩哔哩 (゜-゜)つロ 干杯~-bilibili](https://link.zhihu.com/?targethttps%3A//www.bilibili.com/video/BV1WW411L7Tb) 老版本。4. [【韦东山 】移植U-boot 2012 04 01 到JZ2440_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili](https://link.zhihu.com/?targethttps%3A//www.bilibili.com/video/BV1Pt411n7cv) 老版本。5. [linux-----uboot和kernel移植 - 灰信网软件开发博客聚合 (freesion.com)](https://link.zhihu.com/?targethttps%3A//www.freesion.com/article/2426374191/)。2. 移植修改2.1 uboot代码框架移植uboot前需要了解下uboot的代码框架好知道修改那些代码。在硬件层面嵌入式系统的核心一般包括以下层次1目标板它包含了系统运行所需的所有组件如SOC芯片、DDR、flash/emmc存储器、各种外设以及时钟源、电源管理芯片等2SOC它包含了cpu、总线控制器、集成在片内的rom、sram、dma控制器、硬件加速器、异构核以及片内时钟、电源控制模块等3处理器架构它一般指处理器体系结构的大版本不同的体系结构之间可能存在不同的指令集、异常模型以及内存模型等。例如对于arm系列架构armv8和armv7就属于不同的处理器架构4cpu型号它是指处理器的具体型号如cortex-a53或cortex-a72等arch目录包含了处理器架构相关代码arch/cpu目录包含了特定cpu代码board目录则包含了特定目标板的代码。因此当我们新增加一款目标板时主要的工作就可以集中在board相关的代码只要不是太新的cpu型号arch和cpu相关代码在uboot官方版本中都已经被支持。2.2 添加board的基本步骤当我们开始一个全新的项目时总是希望能先让系统能运行起来然后再在此基础上为其添加更多的feature这个只包含能让系统运行所需模块的系统叫做最小系统。cpu能正常运行包含以下几个条件1具有合适的电源和时钟2程序代码被加载到合适的位置cpu能够正常获取指令3具有cpu用于数据操作的可读写内存4cpu被release reset当然对于需要支持中断的系统则还需要包含中断控制器而对于像操作系统这种需要通过定时器驱动进程切换的系统则显然还需要timer定时器。为了达到以上目的我们添加board的基本步骤大概如下1在board目录下为新board添加一个目录用于存放board特定的代码2为新目录添加Kconfig配置选项和Makefile编译选项将其添加到编译系统中3在Kconfig中为该board定义一个配置项并为该配置项添加其所支持的特性如cpu架构、cpu型号等4为新board增加一个配置相关的头文件和编译所需的defconfig文件用于该board相关的选项配置5在board目录下添加适当的文件并实现必要的接口2.3 添加自己的开发板2.3.1 新增config文件那必须能抄就抄啊找相近的config抄。先在 configs 目录下创建默认配置文件复制mx6ull_14x14_evk_emmc_defconfig然后重命名为 mx6ull_alientek_emmc_defconfig命令如下cdconfigscpmx6ull_14x14_evk_emmc_defconfig mx6ull_alientek_emmc_defconfig然后修改里面的一些标识字符串命名。2.3.2 添加头文件在目录 include/configs 下添加 I.MX6ULL-ALPHA 开 发 板 对 应 的 头 文 件 复 制include/configs/mx6ullevk.h并重命名为 mx6ull_alientek_emmc.h命令如下cpinclude/configs/mx6ullevk.h mx6ull_alientek_emmc.然后修改里面的一些标识字符串命名。根据需求对**.h头文件**里面的宏进行修改和增减宏 PHYS_SDRAM_SIZE 就是板子上 DRAM 的大小宏 CONFIG_DISPLAY_CPUINFOuboot 启动的时候可以输出 CPU 信息。宏 CONFIG_DISPLAY_BOARDINFOuboot 启动的时候可以输出板子信息。CONFIG_SYS_MALLOC_LEN 为 malloc 内存池大小宏 CONFIG_BOARD_EARLY_INIT_F这样 board_init_f 函数就会调用board_early_init_f 函数宏 CONFIG_BOARD_LATE_INIT这样 board_init_r 函数就会调用board_late_init 函数。宏 CONFIG_BOOTCOMMAND此宏就是设置环境变量 bootcmd 的值。宏 CONFIG_SYS_LOAD_ADDR 表示 linux kernel 在 DRAM 中的加载地址宏 CONFIG_SYS_HZ 为系统时钟频率这里为 1000Hz。宏 CONFIG_STACKSIZE 为栈大小这里为 128KB。宏 CONFIG_NR_DRAM_BANKS 为 DRAM BANK 的数量2.3.3 板级文件夹uboot 中每个板子都有一个对应的文件夹来存放板级文件比如开发板上外设驱动文件等等。NXP 的 I.MX 系列芯片的所有板级文件夹都存放在 board/freescale 目录下在这个目录下有个名为 mx6ullevk 的文件夹这个文件夹就是 NXP 官方 I.MX6ULL EVK 开发板的板级文件夹。复制 mx6ullevk将其重命名为 mx6ull_alientek_emmc命令如下cdboard/freescale/cpmx6ullevk/-rmx6ull_alientek_emmc进 入 mx6ull_alientek_emmc 目 录 中 将 其 中 的 mx6ullevk.c 文 件 重 命 名 为mx6ull_alientek_emmc.c命令如下cdmx6ull_alientek_emmcmvmx6ullevk.c mx6ull_alientek_emmc.c修改对应的Makefile文件、cfg文件、Kconfig文件2.3.4 dts文件以下是自定义dtb文件的方法1在arch/arm/dts/目录下添加dts文件test-board-minimal.dts并在目录的Makefile中添加以下编译选项dtb-$(CONFIG_TARGET_TESTBOARD)test-board-minimal.dtb2在配置文件configs/testboard_defconfig中指定该dtb为默认dtb文件并使能uboot的设备树支持CONFIG_DEFAULT_DEVICE_TREEtest-board-minimalCONFIG_OF_CONTROLyCONFIG_OF_SEPARATEy2.4 适配修改举例2.4.1 LCD点灯修改一般 uboot 中修改驱动基本都是在xxx.h 和 xxx.c这两个文件中进行的xxx 为板子名称比如 mx6ull_alientek_emmc.h 和 mx6ull_alientek_emmc.c 这两个文件。一般修改 LCD 驱动重点注意以下几点LCD 所使用的 GPIO查看 uboot 中 LCD 的 IO 配置是否正确。LCD 背光引脚 GPIO 的配置。LCD 配置参数是否正确2.4.2 驱动修改例如网卡等跟目标板子有差异的硬件驱动。2.4.3 打印信息和环境变量修改一些启动时打印的板子信息如果不对需要进行修改。uboot 中有两个非常重要的环境变量bootcmd和bootargs如果需要也应该修改bootargs里面console设置linux终端和波特率root设置根文件系统位置rootfstype指定根文件系统类型uboot 移植到此结束简单总结一下 uboot 移植的过程不管是购买的开发板还是自己做的开发板基本都是参考半导体厂商的dmeo 板而半导体厂商会在他们自己的开发板上移植好 uboot、linux kernel 和 rootfs 等最终制作好 BSP包提供给用户。我们可以在官方提供的 BSP 包的基础上添加我们的板子也就是俗称的移植。我们购买的开发板或者自己做的板子一般都不会原封不动的照抄半导体厂商的 demo板都会根据实际的情况来做修改既然有修改就必然涉及到 uboot 下驱动的移植。一般 uboot 中需要解决串口、NAND、EMMC 或 SD 卡、网络和 LCD 驱动因为 uboot的主要目的就是启动 Linux 内核所以不需要考虑太多的外设驱动。在 uboot 中添加自己的板子信息根据自己板子的实际情况来修改 uboot 中的驱动。后记本篇作为uboot入门的结尾写的比较空一些也可能没做过实际的工作讲出来不知道难点和技巧在哪里不过也写了这么多。我经常问人一个问题怎么样才能提高技能一个答案是领导给你一个能提高技能的活干。细想真是如果没做过即便是学习了也是不能够太深入的理解被内行一问便知。另一个回答是有高人带但是说实话除了应届生大厂里面真没多少人愿意带人估计都是精力有限只带嫡系估计还是多想想怎么成为嫡系更重要。笔者也不是什么活都干过很多方面也不是专家但是这里讲的作为uboot入门这个系列应该够用了。至少可以让干啥的时候能快速的学习找到对应的解决方案在干中继续学习吧。“那路谈OS与SoC嵌入式软件”欢迎关注个人文章汇总https://thatway1989.github.io

相关文章:

uboot入门-6移植要点

本篇作为结尾先对之前的文章进行下汇总: uboot入门-1简介和运行 uboot入门-2Makefile和编译 uboot-3链接脚本和第一阶段启动 uboot入门-4命令行和驱动管理 uboot入门-5linux启动前夜 uboot入门-6移植要点–本篇 对于uboot移植需要先搞清楚下面几个概念&#…...

哔哩下载姬:B站视频下载工具的专业解决方案与技术应用指南

哔哩下载姬:B站视频下载工具的专业解决方案与技术应用指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&a…...

K8s 1.36 新特性深度解析:服务网格与零信任集成(生产级配置)

K8s 1.36 新特性深度解析:服务网格与零信任集成(生产级配置) 前言:K8s 1.36 被称为“云原生安全网络里程碑”版本,核心突破集中在「服务网格原生化」和「零信任落地」两大板块——彻底解决了过去服务网格“资源占用高、…...

丹青幻境使用技巧:批量生成、种子控制、作品管理全攻略

丹青幻境使用技巧:批量生成、种子控制、作品管理全攻略 1. 丹青幻境核心功能概览 丹青幻境(Z-Image Atelier)是一款融合东方美学与先进AI技术的数字艺术创作工具。它基于Z-Image架构和Cosplay LoRA技术构建,为创作者提供了独特的…...

开箱即用!霜儿-汉服-造相Z-Turbo镜像部署及初体验报告

开箱即用!霜儿-汉服-造相Z-Turbo镜像部署及初体验报告 1. 镜像概述与核心价值 霜儿-汉服-造相Z-Turbo是一款专为古风汉服人像生成优化的AI模型镜像。基于Z-Image-Turbo架构并融合定制LoRA技术,它能将文字描述快速转化为精美的汉服少女图像。这个开箱即…...

智慧树刷课插件:3步实现自动化学习,告别手动刷课烦恼

智慧树刷课插件:3步实现自动化学习,告别手动刷课烦恼 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的网课学习而烦恼吗&…...

Hitboxer SOCD清理器架构解析:游戏按键重映射系统的深度优化

Hitboxer SOCD清理器架构解析:游戏按键重映射系统的深度优化 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏领域,操作精度往往决定胜负。传统键盘输入在同时按下相反方向键时…...

BKIN 完整链路评估

BKIN 完整链路评估(基于当前代码) 1. 结论摘要 当前工程已形成“硬件秒级切断 + 软件锁存 + 状态机收敛”的 BKIN 保护闭环。 硬件链路由 TIM0 BKIN 直接触发 BRK,会在硬件侧优先拉低主输出使能(MOE 关闭),具备最高优先级。 软件链路通过 TIMER0_BRK_IRQHandler 和 prot…...

Meta:AIRA2系统突破AI科研Agent瓶颈

📖标题:AIRA_2: Overcoming Bottlenecks in AI Research Agents 🌐来源:arXiv, 2603.26499v1 🌟摘要 现有的研究已经确定了人工智能研究代理中的三个结构性性能瓶颈:(1)同步单GPU执行…...

AI知识库集问答

框架图架构图(模块视角)当前真实生效路径(精简图)“知识库”模块,当前实现可以概括为:文档管理 上下文拼接式问答(非RAG检索库),主问答链路是 单智能体调用 DeepSeek。先…...

3步精通安卓虚拟定位:FakeLocation实现应用级位置模拟的终极指南

3步精通安卓虚拟定位:FakeLocation实现应用级位置模拟的终极指南 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 在数字时代,位置信息已成为个人隐私的最后…...

终极NS-USBLoader使用指南:三分钟掌握Switch文件传输与RCM注入

终极NS-USBLoader使用指南:三分钟掌握Switch文件传输与RCM注入 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://gitcode.com/…...

医疗用气电混合连接器:实现安全性与稳定性平衡的实用技巧

想必从事医疗设备开发的各位都有同感:如今的设备变得越来越复杂。尤其是在需要同时传输气体和电信号的场合,可以说一个小小的连接器就能左右整个设备的可靠性。请不要低估这个"配角"的作用。一旦出现问题,轻则导致设备错误或停机&a…...

NVIDIA Profile Inspector终极指南:解锁显卡隐藏设置,轻松提升游戏性能

NVIDIA Profile Inspector终极指南:解锁显卡隐藏设置,轻松提升游戏性能 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款功能强大的显卡配置工具&…...

ViGEmBus终极指南:在Windows上免费实现完美虚拟手柄映射

ViGEmBus终极指南:在Windows上免费实现完美虚拟手柄映射 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款专业的Windows内核级虚拟…...

如何在Windows上解决游戏控制器兼容性问题:ViGEmBus虚拟驱动完全指南

如何在Windows上解决游戏控制器兼容性问题:ViGEmBus虚拟驱动完全指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 还在为Windows游戏控制器不…...

矽力杰 Silergy SY7066 同步升压转换器 规格书 佰祥电子

突破便携式设备低输入供电、大电流驱动、小型化集成痛点!SY7066:6A 峰值电流 同步整流升压的五大核心优势便携式单节锂电与双节电池供电设备普遍面临低输入电压下难以稳定启动、大电流输出工况转换效率偏低、芯片体积过大无法适配超薄便携产品设计三大行…...

华硕无畏Pro14 K6400ZC 原厂Win11 21H2系统分享下载

华硕无畏Pro14 K6400ZC配备了一键恢复功能,方便用户在系统异常或更换硬盘后轻松恢复出厂设置。该功能支持Windows 11 21H2家庭版系统,并通过原厂工厂文件和隐藏恢复分区实现。用户只需准备一个20G以上的U盘,按照提供的安装教程操作即可完成系…...

华硕ROG 超神2s G703 G7AI G703VI 原厂Win10系统分享下载

华硕ROG超神2s系列笔记本(包括G703、G7AI、G703VI型号)预装了Windows 10家庭版系统,并提供了一键恢复功能,便于用户在系统异常或更换硬盘后快速恢复出厂设置。若该功能失效,用户可使用原厂提供的工厂文件通过U盘进行恢…...

华硕灵耀X双屏Pro UX8402Z 原厂Win11 22H2系统分享下载

华硕灵耀X双屏Pro UX8402Z配备了一键恢复功能,即使系统出现异常或更换硬盘后,也能通过原厂工厂文件轻松恢复至出厂状态。该功能支持UX8402ZA和UX8402ZE型号,预装Windows 11 22H2家庭版。用户只需准备相应工具并按照安装教程操作即可。这一便捷…...

MySQL 自增列的分布式实现

MySQL自增列的分布式实现:突破单机限制的解决方案 在分布式系统中,MySQL自增列的单机实现面临严峻挑战。传统的自增ID依赖于单机序列,难以满足高并发、高可用的分布式场景需求。如何实现全局唯一、有序递增的ID,成为架构设计的关…...

OBS多平台直播插件:如何一次性解决多平台直播的三大痛点

OBS多平台直播插件:如何一次性解决多平台直播的三大痛点 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾经为了在不同直播平台同步直播而手忙脚乱?你是否…...

Java 后端完整成长路线(含项目)

下面这份路线是我按真实公司后端成长路径给你设计的,不是培训班那种“技术名词堆砌版”,而是一步一步把你从“会写 Java”带到“能做后端项目”。我会分 阶段 目标 你该干什么 典型产出 来讲。一、你的专属起点定位(先对齐)✅ …...

FlowState Lab在农业科技的应用:基于环境时序数据的作物生长预测

FlowState Lab在农业科技的应用:基于环境时序数据的作物生长预测 1. 农业科技的新机遇 最近几年,农业领域正在经历一场数字化转型。传统"靠天吃饭"的种植方式逐渐被数据驱动的精准农业所取代。在这个过程中,如何利用农田里产生的…...

双膜气柜:生物质燃气存储的柔性恒压方案

在绿色发展与循环经济成为主流的当下,沼气等生物质燃气的高效、安全储存,是打通废弃物处理与清洁能源利用的关键纽带。双膜气柜作为柔性储气解决方案,凭借恒压稳定、防腐耐用、低维护等优势,已广泛应用于市政污水处理、农业沼气工…...

2026会话存档是什么?新版会话存档有什么功能?

一.概述会话内容存档产品——乐聊会话助手plus是由贵州遐宇科技服务有限公司与企业微信合作产品。此产品是基于企业微信会话存档API接口进行二次开发的监管系统,2024年1月登记为软件作品正式发行。该系统提供企业会话内容存档管理、超时回复提醒、员工客户互动过程合…...

基于RVC模型的实时合唱系统:单人模拟多人合唱效果

基于RVC模型的实时合唱系统:单人模拟多人合唱效果 你有没有想过,一个人也能唱出气势磅礴的合唱效果?以前这可能需要一个录音棚和一群专业歌手,但现在,借助AI技术,一个人、一台电脑就能轻松实现。今天要聊的…...

大模型提取结构化JSON——生产级

目录 输出结构化符合预期的Json Phase 1: 提示工程约束 (Prompt Engineering) Phase 2: 原生协议控制 (Native Protocol Control) 深入浅出:如何用 Function Calling 提取结构化数据 第一步:把“提取动作”包装成一个“函数说明 (Schema)” 第二步:向大模型发起对话请…...

吉林周边陶粒仓库现货

《【吉林周边陶粒仓库现货】哪家好:排名前五专业深度测评》开篇:定下基调在吉林周边,陶粒仓库现货的需求日益增长,为了帮助对吉林周边陶粒仓库现货感兴趣的人群挑选到合适的产品,我们开展了本次测评。本次测评旨在通过…...

双频 WiFi 机柜天线:2.4G+5.8G 全覆盖无死角

WiFi 进机柜,最容易遇到干扰大、衰减快、金属屏蔽。今天分享一步到位的双频 WiFi 机柜天线,2.4G 与 5.8G 同时覆盖,布线少、信号稳。 双频机柜天线优势:一根顶两根,省空间、省布线;抗金属优化,…...