嵌入式linux UBoot移植篇

article/2025/10/6 16:06:50

如何在U-boot添加自己的linux板卡并启动呢?

uboot 的移植并不是说我们完完全全的从零开始将 uboot 移植到我们现在所使用的开发板或者开发平台上。这个对于我们来说基本是不可能的,这个工作一般是半导体厂商做的, 半导体厂商负责将 uboot 移植到他们的芯片上,因此半导体厂商都会自己做一个开发板,这个开发板就叫做原厂开发板。半导体厂商会将 uboot 移植到他们自己的原厂开发板上,测试好以后就会将这个 uboot 发布出去,这就是大家常说的原厂 BSP 包。我们一般做产品的时候就会参考原厂的开发板做硬件,然后在原厂提供的 BSP 包上做修改,将 uboot 或者 linux kernel 移植到我们的硬件上。下面我以修改NXP官方的evk开发板为例,改为自己的linux板卡。

添加开发板默认配置文件

先在 configs 目录下创建默认配置文件,复制 mx6ull_14x14_evk_emmc_defconfig,然后重命名为 mx6ull_myboard_emmc_defconfig并且修改内容为如下图:

在这里插入图片描述
只是修改了第一行和第四行

添加开发板对应的头文件

在 目 录 include/configs 下 添 加开 发 板 对 应 的 头 文 件 , 复 制include/configs/mx6ullevk.h,并重命名为mx6ull_myboard_emmc.h,然后修改一下文件定义如图
在这里插入图片描述

添加开发板对应的板级文件夹

uboot 中每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等等。 NXP 的 I.MX 系列芯片的所有板级文件夹都存放在 board/freescale 目录下,在这个目录下有个名为 mx6ullevk 的文件夹,这个文件夹就是 NXP 官方 I.MX6ULL EVK 开发板的板级文件夹。复制 mx6ullevk文件夹,将其重命名为 mx6ull_myboard_emmc。将 其 中 的 mx6ullevk.c 文 件 重 命 名 为mx6ull_myboard_emmc.c
在这里插入图片描述
接下来还有4个地方需要我们修改:

  1. 修改 mx6ull_myboard_emmc 目录下的 Makefile 文件
    在这里插入图片描述

  2. 修改 mx6ull_myboard_emmc 目录下的 imximage.cfg 文件
    在这里插入图片描述
    只修改了34行的这一句

  3. 修改 mx6ull_myboard_emmc 目录下的 Kconfig 文件
    在这里插入图片描述

  4. 修改 mx6ull_myboard_emmc 目录下的 MAINTAINERS 文件
    在这里插入图片描述

修改 U-Boot 图形界面配置文件

改文件arch/arm/cpu/armv7/mx6/Kconfig(如果用的 I.MX6UL 的话,应该修改 arch/arm/Kconfig 这个文件),在 207 行处:
在这里插入图片描述
在最后一行的 endif 的前一行添加如下内容:
在这里插入图片描述
到了这里,板卡就已经添加进uboot了,剩下的就是编译工作。

使用新添加的板子配置编译 uboot

在 uboot 根目录下新建一个名为 mx6ull_myboard_emmc.sh 的 shell 脚本,在这个 shell 脚本里面输入如下内容:
在这里插入图片描述
最后再给予权限编译就可以了:
在这里插入图片描述
等 待 编 译 完 成 , 编 译 完 成 以 后 输 入 grep -nR “mx6ull_myboard_emmc.h” , 查 看 一 下 添 加 mx6ull_myboard_emmc.h 这个头文件有没有被引用。如果有被引用就说明添加成功了!

必要驱动的修改

在我们启动uboot之后,就需要启动一些我们必要的驱动,比如说驱动lcd用于打印信息,启动网络驱动便于我们后续进行网络挂载根文件系统与linux内核启动。一般 uboot 中需要解决串口、 NAND、 EMMC 或 SD 卡、网络和 LCD 驱动,因为 uboot的主要目的就是启动 Linux 内核,所以不需要考虑太多的外设驱动。而这些驱动需要修改添加的地方就位于我们的mx6ull_myboard_emmc.h以及mx6ull_myboard_emmc.c文件中。下面我就以网络驱动为例介绍怎么修改:

  1. 网络 PHY 地址修改

在这里插入图片描述
第 345 行定了一个宏 CONFIG_PHY_MICREL,此宏用于使能 uboot 中 Micrel 公司的 PHY驱动, KSZ8081 这颗 PHY 芯片就是 Micrel 公司生产的,不过 Micrel 已经被 Microchip 收购了。如果要使用 LAN8720A,那么就得将 CONFIG_PHY_MICREL 改为 CONFIG_PHY_SMSC,也就是使能 uboot 中的 SMSC 公司中的 PHY 驱动,因为 LAN8720A 就是 SMSC 公司生产的。

  1. 删除 uboot 中 74LV595 的驱动代码
    uboot 中网络 PHY 芯片地址修改完成以后就是网络复位引脚的驱动修改了,打开mx6ull_myboard_emmc.c,找到如下代码:
    在这里插入图片描述
    绿色代码是要删除或者屏蔽的,下面两行是需要加上去的。ENET1 的复位引脚连接到 SNVS_TAMPER7 上,对应 GPIO5_IO07, ENET2 的复位引脚连接到 SNVS_TAMPER8 上,对应 GPIO5_IO08。
    接下来下面的函数都是与74LV595初始化相关的全部直接删除:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再找到board_init函数,board_init 会调用 imx_iomux_v3_setup_multiple_pads 和 iox74lv_init 这两个函数来初始化74lv595 的 GPIO,将这两行删除掉。
在这里插入图片描述

  1. 添加 I.MX6U-ALPHA 开发板网络复位引脚驱动
    mx6ull_alientek_emmc.c 中找到fec1_pads修改为如下:
    在这里插入图片描述
    修改函数setup_iomux_fec如下:
    在这里插入图片描述

分别对应 ENET1 和 ENET2 的复位 IO 初始化,将这两个 IO 设置为输出并且硬件复位一下 LAN8720A,这个硬件复位很重要!否则可能导致 uboot 无法识别 LAN8720A

  1. 修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link
    还差最后一步, uboot 中的 LAN8720A 驱动有点问题,打开文件drivers/net/phy/phy.c,找到函数 genphy_update_link,这是个通用 PHY 驱动函数,此函数用于更新 PHY 的连接状态和速度。使用 LAN8720A 的时候需要在此函数中添加一些代码,修改后的函数 genphy_update_link 如下所示:
    在这里插入图片描述
    225 行和237 行就是新添加的代码,为条件编译代码段,只有使用 SMSC 公司的 PHY 这段代码才会执行。第 229 行读取LAN8720A 的 BMCR 寄存器(寄存器地址为 0),此寄存器为 LAN8720A 的配置寄存器,这里先读取此寄存器的默认值并保存起来。 230 行向寄存器 BMCR 寄存器写入 BMCR_RESET(值为0X8000),因为 BMCR 的 bit15 是软件复位控制位,因此 230 行就是软件复位LAN8720A,复位完成以后此位会自动清零。第 231~233 行等待 LAN8720A 软件复位完成,也就是判断 BMCR的 bit15 位是否为 1,为 1 的话表示还没有复位完成。第 234 行重新向 BMCR 寄存器写入以前的值,也就是 229 行读出的那个值。
    至此网络的复位引脚驱动修改完成,重新编译 uboot

http://chatgpt.dhexx.cn/article/i5l2EoK6.shtml

相关文章

Uboot移植流程

linux-Bootloader(Uboot)移植流程 前言 最近在做ZigBee的温室大棚项目,将自己学习的过程和经验分享给大家。本文基于linux3.4.39内核版本,s5p6818开发板实现。 1、uboot启动简介 uboot启动的过程比较复杂,这里就只…

IMX6ULL Uboot 移植

使用的开发板:正点原子ALPHA V2.2 Uboot简介 在学习STM32的过程中使用过IAP在线升级就会知道,有引导程序APP程序,即bootloader程序APP。在学习嵌入式Linux的时候也一样,这个引导程序就是Uboot. uboot移植主要是根据原厂的uboot移…

二、uboot移植

二、uboot移植 版本作者时间备注V 1.0bug设计工程师2021/11/10创建文件软件网盘链接0交叉编译工具链接:https://pan.baidu.com/s/1yFO2NDMet9_b1E1q1rMwEA提取码:42kluboot源码同上linux源码同上文件系统工具同上tftp工具同上2.1 简单说明 uboot制作结束会生成 u-boot-etc44…

linux-uboot 移植四 uboot的移植

概述 前边的章节中介绍到如果要移植uboot的话,最好的参考就是由官方提供的demo。 1、移植 1.1 添加board对应的板级文件夹 uboot 中每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等等。 NXP 的 I.MX 系列芯片的所有板级文件…

[uboot 移植]uboot 移植过程

文章目录 uboot 移植1 修改顶层 Makefile2 在 board 文件夹下添加开发板对应的板级文件2.1 imximage_lpddr2.cfg 和 imximage.cfg 文件2.2 plugin.S 文件2.3 Kconfig 文件2.4 igkboard.c 文件2.5 MAINTAINERS 文件2.6 Makefile 文件 3 添加 igkboard_defconfig 配置文件4 添加开…

UBoot 移植

1 NXP官方开发板uboot编译测试 1 查找 NXP 官方的开发板默认配置文件 因为我们的开发板是参考 NXP 官方的 I.MX6ULL EVK 开发板做的硬件,因此我们在移植 uboot 的时候就可以以 NXP 官方的 I.MX6ULL EVK 开发板为蓝本。 在 NXP 官方 I.MX6UL/6ULL 默认配置文件中找…

大话uboot 移植

结合作者多年的移植经验,尽量简单的为大家描述一个uboot 的移植过程。希望通过描述,给初入移植行道的你带来美好的希望。接下来,我们通过以下几个方面来描述。 1. arm soc 的启动方式 在描述soc 前,我们先看下一个简单的arm soc:…

uboot移植步骤

Uboot移植具体步骤(本例子为Samsung origen板) 第一步:准备源码 网上下载现成的uboot开源代码:https://ftp.denx.de/pub/u-boot/ 在该网站中选择与板子兼容的uboot源文件(公司中一般咨询硬件工程师) 在Linux系统下解压 tar xf 压缩包名 第二步:修改源码 1.抄板:将和你板子兼容…

(二)uboot移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

目录 一、前言 二、F1C200s上电启动顺序 三、前期准备 四、新建用户 五、交叉编译环境配置 六、uboot简介 七、uboot移植 🍏 uboot下载 🍏 uboot默认配置 🍏 uboot图形界面配置 🍏 uboot编译 🍏 烧录bin…

U-Boot 移植初探

1. NXP官方开发板uboot编译测试 uboot移植不需要从零开始将uboot移植到使用的开发板上。因为半导体厂商通常都会自己做一个开发板, 将uboot移植到他们自己的原厂开发板上,再将这个uboot(原厂BSP 包)发布出去。因此使用自已的开发…

U-Boot移植

一、U-Boot Linux 系统要启动就必须需要一个 bootloader 程序,芯片上电以后先运行一段bootloader程序。 bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH, SD, eMMC 等)拷贝到 DDR 中&…

uboot移植

一、我们知道uboot就是一个Bootloader。但是,arm不像我们的pc机一样,用一个老毛桃随便找一个网站下一个windows镜像就可以直接装了。 我们的uboot对应的就是老毛桃里面刷的引导程序。 虽然uboo支持很多架构很多不同的厂家的板子,但是UBOOT它…

【Linux】系统移植篇四--uboot移植

系统移植篇四--uboot移植 一、uboot源码结构1、uboot源码获取2、uboot特点3、uboot源码结构 二、uboot的配置与编译1、uboot配置2、uboot编译 前言:本篇主要介绍uboot的一些结构与相关配置,uboot是一款免费开源的芯片启动软件,代码完全开源&a…

uboot移植过程

uboot移植过程 IMX6ULL 文章目录 uboot移植过程 IMX6ULL 前言一、从原厂中移植uboot进行测试二、在U-Boot中添加自己的硬件1. 添加默认配置文件2. 添加对应的头文件3. 添加对应的板级文件夹3.1 修改Makefile文件3.2 修改 mx6ull_alientek 目录下的 imximage.cfg 文件3.3 修改 m…

MediaCodec对接到OMX的简单分析

一、引言: nuplayer播放器是使用MediaCodec来进行编解码的,而OMX组件则是MediaCodec的解码核心,但是因为涉及的面太过底层,往往是芯片公司才会涉及到这一块,所以就做一个简单分析,对通路有个大致了解就行。…

MediaCodec(native)状态机分析

一、引入: MediaCodec这条通路的调用逻辑是MediaCode->ACodec->OMX,因为OMX有自己的状态机,所以MediaCodec和ACodec也分别基于OMX组件的调用维护了其状态机,这篇博客就先分析MediaCodec的状态机是如何运转的。 二、MediaCo…

视频-MediaCodec

1.解析视频可以使用android 提供的api MediaPlayer,实现简单的播放暂停,提取视频中的一帧或者编辑视频,需要另一个api MediaCodec(硬解,控制DSP芯片)或者 ffmpeg(软解,耗时),选择的优先级一定要…

MediaCodec解析MP4视频

MediaCodec讲解 MediaCodec是Android提供的用于对音视频进行编解码的类,它通过访问底层的codec来实现编解码的功能。是Android media基础框架的一部分,通常和 MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface和AudioTra…

Android视频编解码之MediaCodec简单入门

本篇只是简单入门,后面会继续写文章详细讲解: 由于MediaCodec涉及内容众多,原本想一篇文章把所有内容概括,但是后来发现不太可能,限于自己能力,想要考虑全面太难,我也是刚开始学习需要借助网上…

Android:MediaCodec基本原理

最近需要使用MediaCodec做一些工作,因此对MediaCodec做了些研究和代码编写,在此先对MediaCodec的一些基础原理、工作流程、常用API等做个初步总结,方便后续开发过程中查阅。 1.MediaCodec简介 1.1 MediaCodec来历 Android从最初的API 1.0版…