im6ull-uboot(2021.07)移植(一)

文章目录

  • 声明
  • 1 获取源码
    • 1.1 从u-boot官网获取
    • 1.2 从芯片厂商获取
    • 1.3 从开发板厂商获取
  • 2 修改顶层Makefile
  • 3 xxx_defconfig配置文件
    • 3.1 拷贝生成自己的配置文件
    • 3.2 修改defconfig文件
      • 3.2.1 查看defconfig文件
      • 3.2.2 修改defconfig文件
    • 3.3 添加其他配置文件
      • 3.3.1 添加配置头文件
      • 3.3.2 添加对应的板级文件夹
      • 3.3.3 修改板级文件夹中的内容
  • 4 拷贝设备树
    • 4.1 拷贝参考板的设备树
    • 4.2 修改设备树
      • 4.2.1 修改imx6ull-dang.dts
    • 4.3 修改dts目录下的Makefile
  • 5 编译、下载、启动
    • 5.1 编译
    • 5.2 下载
    • 5.3 启动

声明

  • 在下文中将修改的文件的名字简述为自己的,这个根据自己的需要命名。
  • 这仅仅是自己根据正点原子的文档进行修改,正点原子教程中使用的uboot版本较低,于是自己想试试高版本的。
  • uboot版本为: 2021.07
  • 交叉编译器版本: 11.3.1

1 获取源码

1.1 从u-boot官网获取

u-boot官网

使用官方的u-boot的前提是芯片厂商已经将芯片适配相关的代码开源到u-boot官方源码中(要不从头构建太麻烦了,对于现在学习都费劲的我实在是完不成)。

1.2 从芯片厂商获取

从芯片厂商处获得的u-boot一定是对相关芯片适配过的。

去NXP的官网下载u-boot。

1.3 从开发板厂商获取

对于学习使用的开发板,开发板厂商一定会对相关板子进行适配(直接拿来就能用的那种)。

2 修改顶层Makefile

在编译的u-boot源码时需要向Makefile传递两个参数,分别为ARCHCROSS_COMPILE两个参数。

每次使用make编译的时候都需要添加这两个参数,所以直接修改Makefile将两个参数直接添加到Makefile中。

Makefile

ifeq (arm, arm)
CROSS_COMPILE ?= arm-linux-gnueabihf-
endif

表示一直使用arm-linux-gnueabihf-gcc编译。

3 xxx_defconfig配置文件

3.1 拷贝生成自己的配置文件

所有的配置文件在configs配置文件夹下。

  1. 进入到configs文件夹下

  2. 查看文件夹下的配置文件,找到自己板子的默认配置文件

  3. im6ull的默认配置文件为mx6ull_14x14_evk_defconfig,拷贝默认配置文件,并将其重命名。

    cp mx6ull_14x14_evk_defconfig mx6ull_dang_defconfig #拷贝生成自己的配置文件
    

3.2 修改defconfig文件

3.2.1 查看defconfig文件

CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_SYS_TEXT_BASE=0x87800000
CONFIG_NR_DRAM_BANKS=1
CONFIG_SYS_MEMTEST_START=0x80000000
CONFIG_SYS_MEMTEST_END=0x88000000
CONFIG_ENV_SIZE=0x2000
CONFIG_ENV_OFFSET=0xC0000
CONFIG_MX6ULL=y
CONFIG_TARGET_MX6ULL_14X14_EVK=y
CONFIG_DM_GPIO=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"
CONFIG_SUPPORT_RAW_INITRD=y
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg"
CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_HUSH_PARSER=y
CONFIG_CMD_BOOTZ=y
CONFIG_CMD_MEMTEST=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_OF_CONTROL=y
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_MMC=y
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_SYS_MMC_ENV_DEV=1
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_BOUNCE_BUFFER=y
CONFIG_DM_74X164=y
CONFIG_DM_I2C=y
CONFIG_FSL_USDHC=y
CONFIG_MTD=y
CONFIG_DM_SPI_FLASH=y
CONFIG_SF_DEFAULT_MODE=0
CONFIG_SF_DEFAULT_SPEED=40000000
CONFIG_SPI_FLASH_STMICRO=y
CONFIG_PHYLIB=y
CONFIG_PHY_MICREL=y
CONFIG_PHY_MICREL_KSZ8XXX=y
CONFIG_DM_ETH=y
CONFIG_DM_ETH_PHY=y
CONFIG_FEC_MXC=y
CONFIG_MII=y
CONFIG_PINCTRL=y
CONFIG_PINCTRL_IMX6=y
CONFIG_DM_REGULATOR=y
CONFIG_DM_REGULATOR_FIXED=y
CONFIG_DM_REGULATOR_GPIO=y
CONFIG_MXC_UART=y
CONFIG_SPI=y
CONFIG_DM_SPI=y
CONFIG_FSL_QSPI=y
CONFIG_IMX_THERMAL=y

3.2.2 修改defconfig文件

需要修改的主要是下面的内容

CONFIG_TARGET_MX6ULL_14X14_EVK=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg"

将其修改为

CONFIG_TARGET_MX6ULL_DANG=y #将CONFIG_TARGET_MX6ULL_DANG配置成y,自己的编译选项
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-dang" #设备树
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_dang/imximage.cfg" #指明板级配置文件

3.3 添加其他配置文件

3.3.1 添加配置头文件

拷贝 include/configs文件夹下的mx6ullevk.h生成自己的头文件。

cd include/configs
cp mx6ullevk.h mx6ull_dang.h

修改mx6ull_dang.h的内容,将头文件中的宏

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H

改为

#ifndef __MX6ULL_DANG_CONFIG_H
#define __MX6ULL_DANG_CONFIG_H

3.3.2 添加对应的板级文件夹

拷贝生成自己的板级文件夹

cd board/freescale/
cp mx6ullevk/ mx6ull_dang -r

3.3.3 修改板级文件夹中的内容

  1. /board/freescale/mx6ull_dang 中的mx6ullevk.c重命名为mx6ull_dang.c

    cd mx6ull_dang/
    mv mx6ullevk.c mx6ull_dang.c 
    

    mx6ull_dang.c中有个打印Board的语句,可以将其改为自己的(可改可不改)

    int checkboard(void)
    {
    	if (is_cpu_type(MXC_CPU_MX6ULZ))
    		puts("Board: MX6ULZ 14x14 EVK\n");
    	else
    		puts("Board: Dang MX6ULL\n"); //改为自己的
    
    	return 0;
    }
    
  2. 修改mx6ull_dang文件夹下的Makefile文件,将Makefile修改为

    # SPDX-License-Identifier: GPL-2.0+
    # (C) Copyright 2016 Freescale Semiconductor, Inc.
    
    obj-y  := mx6ull_dang.o
    

    需要将obj-y := mx6ullevk.o 修改为obj-y := mx6ull_dang.o,这样才会编译mx6ull_dang.c

  3. 修改mx6ull_dang文件夹下的imximage.cfg文件

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

    改为

    #ifdef CONFIG_USE_IMXIMG_PLUGIN
    /*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
    PLUGIN	board/freescale/mx6ull_dang/plugin.bin 0x00907000
    
  4. 修改mx6ull_dang文件夹下的Kconfig文件

    if TARGET_MX6ULL_14X14_EVK
    
    config SYS_BOARD
    	default "mx6ullevk"
    
    config SYS_VENDOR
    	default "freescale"
    
    config SYS_CONFIG_NAME
    	default "mx6ullevk"
    
    endif
    

    改为

    if TARGET_MX6ULL_DANG
    
    config SYS_BOARD
    	default "mx6ull_dang"
    
    config SYS_VENDOR
    	default "freescale"
    
    config SYS_CONFIG_NAME
    	default "mx6ull_dang"
    
    endif
    
  5. 修改mx6ull_dang文件夹下的 MAINTAINERS文件

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

    改为

    MX6ULL_DANG BOARD
    M:	Peng Fan <peng.fan@nxp.com>
    S:	Maintained
    F:	board/freescale/mx6ull_dang/
    F:	include/configs/mx6ull_dang.h
    F:	configs/mx6ull_damg_defconfig
    F:	configs/mx6ull_dang_plugin_defconfig
    F:	configs/mx6ulz_dang_defconfig
    

    主要修改的是第1、4、5、6行,最后两行可以不改,删除也行。

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

    arch/arm/mach-imx/mx6文件夹下的Kconfig文件中添加

    image-20230829111654718

    image-20230829111856481

    config TARGET_MX6ULL_DANG
    	bool "Support mx6ull_dang"
    	depends on MX6ULL
    	select BOARD_LATE_INIT
    	select DM
    	select DM_THERMAL
    	imply CMD_DM
    
    
    source "board/freescale/mx6ull_dang/Kconfig"
    

4 拷贝设备树

4.1 拷贝参考板的设备树

拷贝参考板的设备树生成自己的设备树,对设备树的操作都在自己的设备树相关文件中进行改动,不要直接修改参考板的设备树

cd arch/arm/dts 
cp imx6ull-14x14-evk.dts imx6ull-dang.dts
cp imx6ul-14x14-evk.dtsi imx6ul-dang.dtsi

4.2 修改设备树

4.2.1 修改imx6ull-dang.dts

以下是未修改的代码块

// SPDX-License-Identifier: (GPL-2.0 OR MIT)
//
// Copyright (C) 2016 Freescale Semiconductor, Inc.

/dts-v1/;

#include "imx6ull.dtsi"
#include "imx6ul-14x14-evk.dtsi"

/ {
	model = "Freescale i.MX6 UltraLiteLite 14x14 EVK Board";
	compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
};

&clks {
	assigned-clocks = <&clks IMX6UL_CLK_PLL3_PFD2>;
	assigned-clock-rates = <320000000>;
};

将上述文件内容修改为

// SPDX-License-Identifier: (GPL-2.0 OR MIT)
//
// Copyright (C) 2016 Freescale Semiconductor, Inc.

/dts-v1/;

#include "imx6ull.dtsi"
#include "imx6ul-dang.dtsi"

/ {
	model = "DANG Freescale i.MX6 UltraLiteLite 14x14 EVK Board";
	compatible = "fsl,imx6ull-dang", "fsl,imx6ull";
};

&clks {
	assigned-clocks = <&clks IMX6UL_CLK_PLL3_PFD2>;
	assigned-clock-rates = <320000000>;
};

imx6ull-dang.dts主要修改的是第8行,将include的dtsi文件修改为自己的dtsi文件.

因为接下来接下来将修改dtsi文件中的内容,如果不将其换为自己的文件,那么自己修改的文件不会被编译。

4.3 修改dts目录下的Makefile

修改Makefile,添加生成自己设备树文件的选项。

image-20230829113824983

dtb-$(CONFIG_MX6ULL) += \
	imx6ull-14x14-evk.dtb \
	imx6ull-dang.dtb \
	imx6ull-colibri.dtb \
	imx6ull-myir-mys-6ulx-eval.dtb \
	imx6ull-seeed-npi-imx6ull-dev-board.dtb \
	imx6ull-phytec-segin-ff-rdk-emmc.dtb \
	imx6ull-dart-6ul.dtb \
	imx6ull-somlabs-visionsom.dtb \
	imx6ulz-14x14-evk.dtb

第三行的为添加的内容。

在文件行末的\后不能有空格等。

5 编译、下载、启动

5.1 编译

前面已经修改过Makefile了,所以编译的时候就不用使用这么多参数了.

  1. 生成配置文件

    make clean  #清除之前的编译文件
    make mx6ull_dang_defconfig #编译生成配置文件
    
  2. 编译工程

    make -j4
    

5.2 下载

  1. 查看生成文件

    查看是否生成对应的uboot文件

  2. 下载到开发板中

    按照自己的方法下载到开发板中就行,

5.3 启动

启动,查看打印的信息

image-20230829121725948

sionsom.dtb
imx6ulz-14x14-evk.dtb


第三行的为添加的内容。

在文件行末的`\`后不能有空格等。

# 5 编译、下载、启动

## 5.1 编译

前面已经修改过Makefile了,所以编译的时候就不用使用这么多参数了.

1. 生成配置文件

	```shell
	make clean  #清除之前的编译文件
	make mx6ull_dang_defconfig #编译生成配置文件
	```

2. 编译工程

	```shell
	make -j4
	```

## 5.2 下载

1. 查看生成文件

	查看是否生成对应的uboot文件 

2. 下载到开发板中

	按照自己的方法下载到开发板中就行,

## 5.3 启动

启动,查看打印的信息

[外链图片转存中...(img-N92kPFz6-1693282930636)]

uboot启动成功,但是有报错,接下来就是更改错误。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉与人工智能在医美人脸皮肤诊断方面的应用

一、人脸皮肤诊断方法 近年来&#xff0c;随着计算机技术和人工智能的不断发展&#xff0c;中医领域开始逐渐探索利用这些先进技术来辅助面诊和诊断。在皮肤望诊方面&#xff0c;也出现了一些现代研究&#xff0c;尝试通过图像分析技术和人工智能算法来客观化地获取皮肤相关的…

微软 Visual Studio 现已内置 Markdown 编辑器,可直接修改预览 .md 文件

Visual Studio Code V1.66.0 中文版 大小&#xff1a;75.30 MB类别&#xff1a;文字处理 本地下载 Markdown 是一种轻量级标记语言&#xff0c;当开发者想要格式化代码但又不想牺牲易读性时&#xff0c;Markdown 是一个很好的解决方案&#xff0c;比如 GitHub 就使用 Markdo…

7个用于机器学习和数据科学的基本 Python 库

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建3D应用场景 这篇文章针对的是刚开始使用Python进行AI的人&#xff0c;以及那些有经验的人&#xff0c;但对下一步要学习什么有疑问的人。我们将不时花点时间向初学者介绍基本术语和概念。如果您已经熟悉它们&#xff0c;我们鼓…

windows服务器查看网络带宽

windows服务器查看网络带宽&#xff1f; 鼠标右键单击win标志&#xff0c;进入计算机管理 另外一个方法&#xff1a;

【golang】15、cobra cli 命令行库

Cobra 是 golang 最流行的命令行库&#xff0c;文档见 一、脚手架 mkdir pt && cd pt && go mod init cobra-cli init # 在项目下运行即可生成脚手架# tree . ├── LICENSE ├── cmd # 生成了cmd目录 │ └── root.go # 生成了root.go, 其中定义了ro…

他们朝我扔泥巴(scratch)

前言 纯~~~属~~~虚~~~构~~~&#xff08;同学看完短视频要我做&#xff0c;蟹蟹你&#xff09; 用scratch做的&#xff0c;幼稚得嘞(&#xffe3;_&#xffe3;|||)呵呵&#xff08;强颜欢笑&#xff09; 完成视频 视频试了好久&#xff0c;就是传不上来&#xff0c;私信我加我…

Flutter问题记录 - Unable to find bundled Java version

新版本的Android Studio真的移除了JRE&#xff0c;jre目录找不到&#xff0c;怪不得报错了&#xff0c;不过多了一个jbr目录&#xff0c;找了个以前的Android Studio版本对比 搜了一下jbr&#xff08;JetBrains Runtime&#xff09;&#xff0c;原来IDEA老早就开始用了&#xf…

一文速学-让神经网络不再神秘,一天速学神经网络基础(一)

前言 思索了很久到底要不要出深度学习内容&#xff0c;毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新&#xff0c;很多坑都没有填满&#xff0c;而且现在深度学习的文章和学习课程都十分的多&#xff0c;我考虑了很久决定还是得出神经网络系列文章&#xff0c;…

购买腾讯云服务器搭建网站全流程_新手建站

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网分享使用腾讯云服务器建站教程&#xff0c;新手站长搭…

SpringMVC 第二天

第 1 章 ModelAttribute 和 SessionAttribute[ 应 用 ] 1.1ModelAttribute 1.1.1 使用说明 作用&#xff1a; 该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。 出现在方法上&#xff0c;表示当前方法会在控制器的方法执行之前&#xff0c;先执行…

【Azure】Virtual Hub vWAN

虚拟 WAN 文档 Azure 虚拟 WAN 是一个网络服务&#xff0c;其中整合了多种网络、安全和路由功能&#xff0c;提供单一操作界面。 我们主要讨论两种连接情况&#xff1a; 通过一个 vWAN 来连接不通的 vNET 和本地网络。以下是一个扩展的拓扑 结合 vhub&#xff0c;可以把两个中…

【Centos8配置节点免密登陆】

登录Centos8 配置免密登录 为什么需要配置免密登录&#xff0c;玩大数据&#xff0c;玩集群的朋友们&#xff0c;都需要使用RPC通讯&#xff0c;完成集群命令同步&#xff0c;数据操作通讯。要实现RPC通讯&#xff0c;就需要配置节点之间的免密登录。 # 配置登录秘钥 ssh-key…

【已解决】pycharm突然双击无法打开,重启电脑也不管用

1.问题&#xff1a; pycharm突然双击无法打开&#xff0c;重启电脑也不管用 2.解决 2.1 方法一&#xff08;修改Roaming&#xff09; 1.找到C盘对应路径下的pycharm版本 2. 用记事本打开文件类型为VMOPTIONS文件 3. 修改或删除最后一行的映射路径 4.保存退出 2.2 方法二…

大二在校生一把通关云计算HCIE:考证,没你想得那么难

大家好&#xff0c;我是誉天云计算的任同学&#xff0c;在不久前的考试中顺利通过&#xff0c;拿到了云计算HCIE的证书。 我目前还是一名在校大学生&#xff0c;就读的专业也是云计算相关。考HCIE认证&#xff0c;一方面是想强化一下自己的专业能力&#xff0c;另一方面也是为今…

文件夹无法删除?简单3招,轻松解决问题!

“我电脑里有一个文件夹占用了很大的内存&#xff0c;我想将它删除来释放一些内存&#xff0c;但是根本没法删除&#xff0c;为什么会这样呢&#xff1f;文件夹无法删除应该怎么办呢&#xff1f;” 在日常电脑使用中&#xff0c;有时候会遇到文件夹无法删除的情况&#xff0c;这…

WPF基础入门-Class4-WPF绑定

WPF基础入门 Class4&#xff1a;WPF绑定 一、简单绑定数据 1、cs文件中设置需要绑定的数据&#xff1a; public partial class Class_4 : Window{public Class_4(){InitializeComponent();List<Color> test new List<Color>();test.Add(new Color() { Code &q…

深度剖析:利用Charles抓包工具进行iOS逆向分析

抓包是逆向中非常重要的一个环节&#xff0c;今天我们来详细介绍一款在iOS逆向分析中常见的Charles抓包工具。 1. Charles工具介绍&#xff0c;下载和安装 Charles是一款强大的代理工具&#xff0c;可用于拦截、监视和修改网络通信。您可以从Charles的官方网站下载并安装适用于…

2023腾讯云服务器多少钱一年?CPU内存带宽配置报价

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G4M带宽112元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、云服务器CVM S5实例2核2G配置280.8元一年、GPU服务器GN10Xp实例145元7天&#xff0c;腾讯云服务器网长期更新腾讯云轻量…

如何实现AI的矢量数据库

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建3D应用场景 然而&#xff0c;人工智能模型有点像美食厨师。他们可以创造奇迹&#xff0c;但他们需要优质的成分。人工智能模型在大多数输入上都做得很好&#xff0c;但如果它们以最优化的格式接收输入&#xff0c;它们就会真正…

2023.8.25 关于 Selenium 常用 API 详解

目录 引言 打开页面 查找页面元素 输入文本 点击操作 提交操作 清除文本 获取文本和属性值 ​编辑 选择多个元素 获取页面标题和URL 等待操作 浏览器操作 多层框架定位 窗口操作 屏幕截图 下拉框元素选择操作 ​编辑 执行脚本 文件上传 引言 本文讲的所有…