u-boot移植:详细讲解移植u-boot.2022.10版本到imx6ull开发板

news2024/11/27 1:33:52

目录

一、u-boot编译环境准备

1.安装交叉编译工具链

2.u-boot源码包下载

3.编译

4.安装依赖库

 二、U-Boot中添加自己的开发板

1、添加开发板默认配置文件

2、添加开发板对应的头文件

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

4、修改 arch/arm/mach-imx/mx6/Kconfig

5、其他需要修改的地方

6、添加编译脚本build.sh

三、编译、下载、验证

1、编译

2、编译成功

3、下载验证


环境

选项内容
编译主机UbuntuLTS 18.04
目标板ATK I.MX6ULL(512MB DDR3 + 8GB EMMC)
u-boot版本2022.10
交叉编译工具链gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf

一、u-boot编译环境准备

1.安装交叉编译工具链

交叉编译工具链详细安装步骤见之前写的文章

文章链接:ubuntu交叉编译工具链安装

2.u-boot源码包下载

1.1、本次使用的uboot版本为2022.10版本u-boot-2022.10.tar.bz2
1.2、下载链接:https://ftp.denx.de/pub/u-boot/

3.编译

2.1、通过共享文件夹或FTP服务将u-boot-2022.10.tar.bz2拷贝到ubuntu中
2.2、源码压缩包解压

tar -jxvf u-boot-2022.10.tar.bz2

4.安装依赖库

4.1、使用默认配置进行编译u-boot时报下面错误

toto@toto:~/workspace/uboot/u-boot-2022.10$ make mx6ull_14x14_evk_defconfig
YACC    scripts/kconfig/zconf.tab.c
/bin/sh: 1: bison: not found
scripts/Makefile.lib:222: recipe for target 'scripts/kconfig/zconf.tab.c' failed
make[1]: *** [scripts/kconfig/zconf.tab.c] Error 127
Makefile:578: recipe for target 'mx6ull_14x14_evk_defconfig' failed
make: *** [mx6ull_14x14_evk_defconfig] Error 2

解决办法:
该错误是由于缺少一些相关库文件导致,安装上即可正常编译,安装命令:

sudo apt install bison flex

4.2、然后继续编译又报错

 解决办法,安装lib32z1依赖库

sudo apt-get install lib32z1

4.3、继续编译make,报错

 解决方法:
继续安装依赖库libssl-dev

sudo apt-get install libssl-dev

4.4、编译通过,u-boot所有依赖库已全部安装完毕

 二、U-Boot中添加自己的开发板

        在U-Boot中添加自己的开发板NXP官方uboot中默认都是 NXP 自己的开发板,虽说我们可以直接在官方的开发板上直接修改,使u-boot可以完整的运行在我们的板子上。但是从学习的角度来讲,这样我们就不能了解到u-boot是如何添加新平台的。接下来我们就参考NXP官方的I.MX6ULL EVK 开发板学习如何在u-boot中添加我们的开发板或者开发平台。

1、添加开发板默认配置文件

        先在 configs 目录下创建默认配置文件,复制 mx6ull_14x14_evk_defconfig,然后重命名为 mx6ull_toto_defconfig,命令如下:

cd configs
cp mx6ull_14x14_evk_defconfig mx6ull_toto_defconfig

然后将文件 mx6ull_toto_defconfig 中的内容改成下面的:

CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_SYS_TEXT_BASE=0x87800000
CONFIG_SYS_MALLOC_LEN=0x1000000
CONFIG_NR_DRAM_BANKS=1
CONFIG_ENV_SIZE=0x2000
CONFIG_ENV_OFFSET=0xC0000
CONFIG_MX6ULL=y
CONFIG_TARGET_MX6ULL_TOTO=y
...

可以看出,mx6ull_toto_defconfig 基本和 mx6ull_14x14_evk_defconfig中的内容一样,只是第9行做了修改

2、添加开发板对应的头文件

        在目录 include/configs 下添加 I.MX6ULL-ALPHA 开 发 板 对 应 的 头 文 件 , 复 制 include/configs/mx6ullevk.h,并重命名为 mx6ull_toto.h,命令如下:

cp include/configs/mx6ullevk.h include/configs/mx6ull_toto.h

拷贝完成以后将:

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H

改为:

#ifndef __MX6ULL_TOTO_CONFIG_H
#define __MX6ULL_TOTO_CONFIG_H

mx6ull_toto.h 里面有很多宏定义,如配置u-boot默认串口打印使用uart的第几个口,网口默认使用哪个网口等,也有一些u-boot环境变量的的默认配置。如果我们想要改变默认的uart和enet口,那就在 mx6ull_toto.h 里面做修改即可。

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

        u-boot 中每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等 等。NXP 的 I.MX 系列芯片的所有板级文件夹都存放在 board/freescale 目录下,在这个目录下 有个名为 mx6ullevk 的文件夹,这个文件夹就是 NXP 官方 I.MX6ULL EVK 开发板的板级文件 夹。复制 mx6ullevk,将其重命名为 mx6ull_toto,命令如下:

cd board/freescale
cp -r mx6ullevk/ mx6ull_toto

进 入mx6ull_toto目 录 中 , 将 其 中 的mx6ullevk.c文 件 重 命 名 为mx6ull_toto.c,命令如下:

cd mx6ull_toto
mv mx6ullevk.c mx6ull_toto.c

        我们还需要对 mx6ull_toto 目录下的文件做一些修改:
3.1、修改 mx6ull_toto 目录下的 Makefile 文件
mx6ull_alientek_emmc 下的 Makefile 文件内容改为如下所示:

# SPDX-License-Identifier: GPL-2.0+
# (C) Copyright 2016 Freescale Semiconductor, Inc.

obj-y  := mx6ull_toto.o

        重点是第 4行的 obj-y,改为 mx6ull_toto.o,这样才会编译 mx6ull_toto.c 这个文件。
3.2、修改 mx6ull_toto 目录下的 imximage.cfg 文件
imximage.cfg 中的下面一句:

#ifdef CONFIG_USE_IMXIMG_PLUGIN
/*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
PLUGIN  board/freescale/mx6ullevk/plugin.bin 0x00907000
#else

改为:

#ifdef CONFIG_USE_IMXIMG_PLUGIN
/*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
PLUGIN  board/freescale/mx6ull_toto/plugin.bin 0x00907000
#else

3.3、修改 mx6ull_toto 目录下的 Kconfig 文件
修改 Kconfig 文件,修改后的内容如下:

if TARGET_MX6ULL_TOTO

config SYS_BOARD
    default "mx6ull_toto"

config SYS_VENDOR
    default "freescale"

config SYS_CONFIG_NAME
    default "mx6ull_toto"

config IMX_CONFIG
    default "board/freescale/mx6ull_toto/imximage.cfg"

endif

3.4、修改 mx6ull_toto 目录下的 MAINTAINERS 文件
修改 MAINTAINERS 文件,修改后的内容如下:

MX6ULLTOTO BOARD
M:    Peng Fan <peng.fan@nxp.com>
S:    Maintained
F:    board/freescale/mx6ull_toto/
F:    include/configs/mx6ull_toto.h
F:    configs/mx6ull_toto_defconfig
F:    configs/mx6ull_14x14_evk_plugin_defconfig
F:    configs/mx6ulz_14x14_evk_defconfig

4、修改 arch/arm/mach-imx/mx6/Kconfig

修改文件arch/arm/mach-imx/mx6/Kconfig,在 468 行加入如下内容:

config TARGET_MX6ULL_TOTO
    bool "Support mx6ull_toto"
    depends on MX6ULL
    select BOARD_LATE_INIT
    select DM
    select DM_THERMAL
    imply CMD_DM

717行添加如下内容:

source "board/freescale/mx6ull_toto/Kconfig"

5、其他需要修改的地方

        在 uboot 启动信息中会有“Board: MX6ULL 14x14 EVK”这一句,也就是说板子名字为
“MX6ULL 14x14 EVK”。那么如果要将其改为我们想要的名字,就需打开文件 mx6ull_toto.c,找到函数checkboard,将其改为如下所示内容:

int checkboard(void)
{
    if (is_cpu_type(MXC_CPU_MX6ULZ))
        puts("Board: MX6ULZ 14x14 EVK\n");
    else
        puts("Board: MX6ULL TOTO\n");
    return 0;
}

6、添加编译脚本build.sh

        在 uboot 根目录下新建一个名为 build.sh 的 shell 脚本,在这个 shell 脚本里面输入如下内容:

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_toto_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

        build.sh添加可执行权限,命令如下:

chmod 777 build.sh

三、编译、下载、验证

1、编译

./build.sh

2、编译成功

  ...
  DTC     arch/arm/dts/imx6ulz-bsh-smm-m2.dtb
  DTC     arch/arm/dts/imx6ulz-14x14-evk.dtb
  DTC     arch/arm/dts/imx6q-apalis-eval.dtb
  DTC     arch/arm/dts/imx6dl-colibri-eval-v3.dtb
  SHIPPED dts/dt.dtb
  CAT     u-boot-dtb.bin
  COPY    u-boot.dtb
  COPY    u-boot.bin
  CFGS    u-boot-dtb.cfgout
  MKIMAGE u-boot-dtb.imx

3、下载验证

        使用imxdownload将新编译出来的u-boot.bin烧写到SD卡中测试,SecureCRT 输出结果如下

sudo ./imxdownload u-boot.bin /dev/sdb
U-Boot 2022.10-gaef9f25a-dirty (Apr 05 2023 - 17:49:18 +0800)

CPU:   Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 26C
Reset cause: POR
Model: Freescale i.MX6 UltraLiteLite 14x14 EVK Board
Board: MX6ULL TOTO
DRAM:  512 MiB
Core:  65 devices, 17 uclasses, devicetree: separate
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Net:   Could not get PHY for FEC1: addr 1
Could not get PHY for FEC1: addr 1
Get shared mii bus on ethernet@2188000
Could not get PHY for FEC1: addr 2
Get shared mii bus on ethernet@2188000
Could not get PHY for FEC1: addr 2
No ethernet found.

Hit any key to stop autoboot: 
=> 

        从输出结果可以看出除网络没有识别出来外,其他均正常(这里不讨论LCD),因为本人是没带LCD屏的。
        u-boot下网络调试将在下一篇文章进行详细介绍,关注我,下期文章及时观看!


        关于更多嵌入式C语言、FreeRTOS、RT-Thread、Linux应用编程、linux驱动等相关知识,关注公众号【嵌入式Linux知识共享】,后续精彩内容及时收看了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5分钟使用UNI-APP框架创建你的第一个项目

UNI-APP学习系列 5分钟使用UNI-APP框架创建你的第一个项目 文章目录 UNI-APP学习系列前言uni-app框架创建项目一、HBuilderX可视化方式二、 vue-cli命令行方式 总结 前言 UNI-APP学习系列之5分钟创建自己的第一个uni-app项目。 uni-app框架创建项目 创建方式 一、HBuilderX可…

bash: /opt/ros/kinetic/setup.bash: 没有那个文件或目录

有时候打开终端的时候&#xff0c;会在第一行报错&#xff1a; bash: /opt/ros/kinetic/setup.bash: 没有那个文件或目录 bash: /opt/ros/melodic/setup.bash: 没有那个文件或目录 bash: /opt/ros/neodic/setup.bash: 没有那个文件或目录 凡是类似报错与bash有关的&#xf…

【PCIE703】XCKU060+海思视频处理器HI3531DV200-ARM的高性能综合视频图像处理平台设计资料及调试经验

板卡概述 PCIE703是我司自主研制的一款基于PCIE总线架构的高性能综合视频图像处理平台&#xff0c;该平台采用Xilinx的高性能Kintex UltraScale系列FPGA加上华为海思的高性能视频处理器来实现。 华为海思的HI3531DV200是一款集成了ARM A53四核处理器性能强大的神经网络引擎&am…

架构-软件工程模块-2

系统分析 数据流图可能出案例题&#xff0c;状态转换图了解作用即可 用例图、类图选择题多&#xff0c;暴徒了解即可 #mermaid-svg-lGozbtkYJPEQF1eo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lGozbtkYJPEQF1e…

加密那些事

一、前言 说到加解密也许有些人会有些陌生&#xff08;仅对于初学者或其他行业的学者&#xff09;&#xff0c;先不说那些让人看到千篇一律的概念&#xff0c;就是如果两个人发信息怎样才能不被第三个人知道呢&#xff1f;是不是脑海里冒出了使用某种暗号&#xff0c;只有相互传…

每一个“大佬级别”的测试工程师,都有着怎样的成长那个路线?3分钟为你揭晓谜底!

目录 引言 1.何为软件测试工程师&#xff1f; 2.软件测试工程师的职责&#xff1f; 3.为什么要做软件测试&#xff1f; 4.软件测试的前途如何&#xff1f; 5.工具和思维谁更重要&#xff1f; 6.测试和开发相差大吗&#xff1f; 7.成为测试工程师的必备条件 8.测试的分…

虚拟机栈概述

一、概述 1.1、虚拟机栈背景 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的。不同平台CPU架构不同&#xff0c;所以不能设计为基于寄存器的。 优点是跨平台&#xff0c;指令集小&#xff0c;编译器容易实现&#xff0c;缺点是性能下降&#xff0c;实现同样的功…

网络分析和机器学习

文章目录 网络分析1.Introduction to networks and graph foundations and algorithmsNetwork types (social/bio/comp), Euler/Hamilton, Graphs (matrix/adj)Breadth-first search (shortest paths), Depth-first search (conn. compnts) 2. Emergent global / local network…

PS的基础操作

1、图片放大缩小alt鼠标滚轮 2、按住空格不放&#xff0c;拖拽鼠标可以改变图片的位置 3、英文状态下按字母t&#xff0c;再点击想要查看的文字&#xff0c;就可以在菜单栏上看到所有属性&#xff08;取消选中按esc键) 4、点击它可以画选区来查看间距&#xff1b; w代表宽;h代表…

Jenkins版本升级

Jenkins版本过低的时候&#xff0c;一些插件无法升级&#xff0c;会引发一系列错误&#xff0c;这个时候我们就要升级版本了 一、下载更新包 第一种方式&#xff1a;Jenkins页面下载最新包 第二种官网上下载war包(Jenkins官网) 二、打开服务器搜索jenkins.war路径 1、如果Jenk…

CSDN 的 MD编辑器一些用法

一、点击关键语句跳转指定位置 在CSDN写文章的时候&#xff0c;写的文章过长往往会让读者很难找到自己想看的部分&#xff0c;这时候有个 跳转到指定位置功能 就非常的便利。CSDN在MD编辑器上(富文本编辑器只有一种)就提供了两种跳转到指定位置的方法&#xff1a; 一、目录转跳…

【SCADA】KingSCADA将数据插入SQLServer的方法

大家好&#xff0c;我是雷工&#xff01; 本篇通过实例&#xff0c;介绍KingSCADA3.7访问SQL Server2022数据库。 一、概述 1、创建数据库及数据表格&#xff1b; 2、配置ODBC数据源。 3、通过KingSCADA与数据库建立连接&#xff0c;将数据写入数据库对应表格。 二、创建数据…

自动化测试与手工测试?你真的了解吗?如何共存...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

代码随想录算法训练营第二十七天|39. 组合总和 40.组合总和II131.分割回文串

文章目录 39. 组合总和思路代码总结 40.组合总和II思路代码总结 131.分割回文串思路代码总结 39. 组合总和 思路 我举过例子&#xff0c;如果是一个集合来求组合的话&#xff0c;就需要startIndex&#xff0c;例如&#xff1a;77.组合 &#xff0c;216.组合总和III 。 如果是…

【AIGC使用教程】Microsoft Edge/Bing Chat 注册使用完全指南

欢迎关注【AIGC使用教程】 专栏 【AIGC使用教程】SciSpace 论文阅读神器 【AIGC使用教程】Microsoft Edge/Bing Chat 注册使用完全指南 【AIGC使用教程】GitHub Copilot 免费注册及在 VS Code 中的安装使用 【AIGC使用教程】GitHub Copilot 免费注册及在 PyCharm 中的安装使用 …

算法时间复杂度

参考视频&#xff1a;https://www.bilibili.com/video/BV14j411f7DJ 目录 1.常数阶O(1) 2.对数阶O(IogN) 3.线性阶O(n) 4.线性对数阶O(nlogN) 5.平方阶O(n^2) 6.立方阶O(n^3) 7.K次方阶O(n^k) 8.指数阶(2^n) 9.阶乘O(n!) 两层for循环 for (int i 1; i <…

有模型强化学习和免模型强化学习有什么区别?

有模型强化学习&#xff08;Model-Based Reinforcement Learning&#xff09;和无模型强化学习&#xff08;Model-Free Reinforcement Learning&#xff09;是两种不同的强化学习方法。 有模型强化学习是指&#xff0c;智能体在学习过程中能够对环境进行建模&#xff0c;即学习…

软件测试分类: 你需要知道的不同类型测试

文章目录 一. 按测试对象进行划分1. 界面测试2. 可靠性测试3. 容错性4. 文档测试5. 兼容性测试6. 易用性测试7. 安装卸载的测试8. 安全测试9. 性能测试10. 内存泄漏测试 二. 按是否查看代码划分1. 黑盒测试(Black-box Testing)2. 白盒测试(White-box Testing)冒泡排序测试用例进…

【1 Vue基础 - 模板语法-绑定】

1 VSCode代码片段 链接: link 2 Mustache双大括号语法 插入内容 <body><div id"app"><!-- 1.基本使用 --><h2>{{ message }}</h2><h2>当前计数: {{ counter }} </h2><!-- 2.表达式 --><h2>计数双倍: {{ c…

研发项目工时统计工具哪个好?9大工时管理系统盘点

工时管理是项目型企业的重要需求&#xff0c;特别是在人力成本占比较高的行业&#xff0c;如软件开发、设计咨询、会计律师等。工时管理可以帮助企业核算项目人工成本&#xff0c;控制成本投入&#xff0c;提高项目利润&#xff0c;客观考核员工绩效&#xff0c;优化资源分配等…