im6ull-uboot(2021.07)移植(一)

news2025/1/19 20:41:36

文章目录

  • 声明
  • 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启动成功,但是有报错,接下来就是更改错误。

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

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

相关文章

深入了解电商API的历史和业务场景

在数字时代&#xff0c;电子商务的兴起改变了传统的商业模式&#xff0c;使得商品和服务的交易变得更加便捷和高效。作为电子商务的重要组成部分&#xff0c;电商API&#xff08;应用程序编程接口&#xff09;在过去的几十年中得到了广泛的应用和不断发展。本文将深入探讨电商A…

css 分割线中间带文字

效果图 代码块&#xff08;自适应&#xff09; <div class"line"><span class"text">我是文字</span></div>.line{height:0;border-top:1px solid #000;text-align:center;}.text{position:relative;top:-14px;background-color:#…

如何查看相机的配置信息,以及获取相机当前状态信息---deepstream

sudo apt-get install v4l2-utils v4l2-ctl --list-devicesv4l2-ctl --list-formats-ext --device0 v4l2-ctl --list-formats-ext --device1参考链接&#xff1a; https://www.elecfans.com/d/1677110.html

特斯拉自动驾驶遭质疑?面临两起 Autopilot 诉讼,均为致命事故

根据最新消息&#xff0c;两起涉及特斯拉 Autopilot 的诉讼将在今年的九月和十月分别在法庭上审理。此类诉讼对于特斯拉及其自动驾驶项目的声誉可能带来一定的负面影响。首先&#xff0c;这些诉讼案件的存在将引起公众对特斯拉 Autopilot 系统安全性。 除了以上提到的两起诉讼&…

【进阶篇】MySQL 存储引擎详解

文章目录 0.前言1.基础介绍2.1. InnoDB存储引擎底层原理InnoDB记录存储结构和索引页结构InnoDB记录存储结构&#xff1a;InnoDB索引页结构&#xff1a; 3. MVCC 详解3.1. 版本号分配&#xff1a;3.2. 数据读取&#xff1a;3.3. 数据写入&#xff1a;3.4. 事务隔离级别&#xff…

servlet内存马学习

项目配置 注意一定要添加 否则访问路径会404&#xff0c;tomcat并没有对项目生效 1.实现javax.servlet.Servlet接口的方式 Servlet.class&#xff1a; package org.test;import javax.servlet.*; import java.io.IOException;public class ServletTest implements Servle…

华为OD机试 - MELON的难题 - 动态规划(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、动态规划五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 MELON有一堆精美的雨花石(数量为n&#xff0c;重量各异)&#xff0c;准备送给…

为什么很多干了四五年的老IT告诉你算法没用?

文章目录 前言认知决定上限为什么学算法&#xff1f;为什么很多干了四五年的老IT告诉你算法没用&#xff1f;怎么学算法&#xff1f;算法集训 前言 英雄算法联盟八月集训 已经接近尾声&#xff0c;九月算法集训将于 09月01日 正式开始&#xff0c;目前已经提前开启报名&#xf…

学乐多光屏P90:引领儿童智慧教育新时代

随着科技的迅猛发展&#xff0c;儿童教育正经历着深刻变革。在这个引领变革的浪潮中&#xff0c;学乐多光屏P90以其卓越的特性和教育价值&#xff0c;成为了儿童智慧教育的引领者&#xff0c;为孩子们打开了通向知识世界的大门。 学乐多光屏P90的独特之处在于其融合了触摸和投影…

图像生成模型

监督学习 与 无监督学习 监督学习 数据&#xff1a;&#xff08;x, y&#xff09; X是数据&#xff0c;Y是标签 目标&#xff1a;学习一个从x到y的函数映射 样例&#xff1a;分类、回归、物体检测、语义分割、描述 无监督学习 数据&#xff1a;&#xff08;x&#xff09; 只有…

DPI 设置和获取

DPI设置与获取之前请保证程序已经打开DPI感知或者在清单文件嵌入DPI感知&#xff0c;否则API可能获取的值不准确 方法一:GetScaleFactorForMonitor 通过枚举显示器获取不同设备的DPI&#xff0c;获取的是实际DPI static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,HDC…

11.2.1-通货膨胀CPI

文章目录 1. 什么是CPI2. 在哪里获取CPI数据3. CPI的同比、环比到底是什么意思&#xff1f;4. 计算购买力侵蚀5. 复利计算 微不足道的小事也会引发惊人的结果&#xff0c; 每念及此&#xff0c; 我就认为世上无小事。——布鲁斯巴登&#xff08;Bruce Barton&#xff09; 核心内…

2023年9月DAMA-CDGA/CDGP数据治理认证考试,火热报名

据DAMA中国官方网站消息&#xff0c;2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启&#xff0c;相关事宜通知如下&#xff1a; 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA) 数据治理专家(CertifiedDataGovernanc…

[NSSCTF 2nd] NSS两周年纪念赛。

都说开卷有益&#xff0c;其实作题也有益&#xff0c;每打一次总能学到点东西。 PWN NewBottleOldWine 这个没作出来&#xff0c;一时还不明白RISC-V64怎么弄本地环境&#xff0c;不过看了WP感觉很简单&#xff0c;取flag用不着环境。 IDA不给翻译了&#xff0c;一点点看汇…

资源分享| 4种聚类算法及可视化(Python)

在这篇文章中&#xff0c;基于20家公司的股票价格时间序列数据。根据股票价格之间的相关性&#xff0c;看一下对这些公司进行聚类的四种不同方式。 苹果&#xff08;AAPL&#xff09;&#xff0c;亚马逊&#xff08;AMZN&#xff09;&#xff0c;Facebook&#xff08;META&…

035 - datetime和timedstamp

该DATETIME类型用于包含日期和时间部分的值。MySQL检索并DATETIME以格式显示 值 。支持的范围是 到。 YYYY-MM-DD hh:mm:ss1000-01-01 00:00:009999-12-31 23:59:59 该TIMESTAMP数据类型被用于同时包含日期和时间部分的值。 UTCTIMESTAMP的范围是UTC。 1970-01-01 00:00:01203…

gitlab提交项目Log in with Access Token错误

目录 报错信息 问题描述 解决方案 报错信息 问题描述 在提交项目到gitlab时&#xff0c;需要添加账户信息 &#xff0c;但是报了这样一个错&#xff0c;原因应该就是路径问题&#xff0c;我在填写server地址的时候&#xff0c;就出现了路径问题&#xff0c;我把多余的几个/…

为啥这么多公司用 ZooKeeper?它到底解决了什么问题?

ZooKeeper 介绍 ZooKeeper 很流行&#xff0c;有个基本的疑问&#xff1a; ZooKeeper 是用来做什么的&#xff1f; 之前没有ZK&#xff0c;为什么会诞生 ZK&#xff1f; OK&#xff0c;解答一下上面的疑问&#xff1a;&#xff08;下面是凭直觉说的&#xff09; ZooKeeper …

前端项目部署,阿里云服务器部署前端项目,超详细

需求背景&#xff1a;作为一个前端&#xff0c;特别身处于中小公司时&#xff0c;对于部署也需要有所了解。本次就介绍前端基础的项目部署。本次使用的是阿里云服务器进行的部署 部署核心步骤 1.准备打包好的前端代码&#xff08;dist包&#xff09;或者是一个html文件 2.购买…

Day49|动态规划part10:188.买卖股票的最佳时机IV、121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

188. 买卖股票的最佳时机IV leetcode链接&#xff1a;188 题「买卖股票的最佳时机 IVopen in new window」 视频链接&#xff1a;动态规划来决定最佳时机&#xff0c;至多可以买卖K次&#xff01;| LeetCode&#xff1a;188.买卖股票最佳时机4 给你一个整数数组 prices 和一…