iMX8MM u-boot2021.04移植

  • 1. 添加板子
    • 1.1 添加配置文件
    • 1.2 添加板级文件
    • 1.3 添加设备树文件
  • 2. 修改设备树
    • 2.1 修改DDR
    • 2.2 修改网卡
    • 2.3 修改SD卡
    • 2.4 关闭屏幕和TypeC
  • 3. 编译下载
    • 3.1 编译ATF
    • 3.2 下载firmware-imx
    • 3.3 编译uboot
    • 3.4 下载验证
  • 4. 总结

我移植的板子是讯为i.MX8MM开发板,参考板为官方 8MMINILPD4-EVK开发板。

  1. iMX8MM uboot2021.04 linux5.15.32移植
  2. iMX8MM启动流程
  3. iMX8MM u-boot2021.04移植
  4. iMX8MM linux5.15.32移植
  5. iMX8MM buildroot-2022.02.5构建根文件系统

1. 添加板子

进入我们下载好的源码目录,需要复制每个板子特有的一些文件,添加完板子板级文件一般就不会修改了,主要是修改设备树和配置文件。这里直接修改完这些文件,基本都是将evk改为topeet,不做过多解释。

1.1 添加配置文件

添加配置文件我们只需要复制 i.MX8MM EVK的默认配置文件,在源码目录下执行下列命令创建我们自己板子的配置文件。

$ cd configs/
$ cp imx8mm_evk_defconfig imx8mm_topeet_defconfig

修改configs/imx8mm_topeet_defconfig文件

# configs/imx8mm_topeet_defconfigCONFIG_TARGET_IMX8MM_EVK=y
# 改为
CONFIG_TARGET_IMX8MM_TOPEET=yCONFIG_DEFAULT_DEVICE_TREE="imx8mm-evk"
# 改为
CONFIG_DEFAULT_DEVICE_TREE="imx8mm-topeet"CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/imx8m/imximage-8mm-lpddr4.cfg"
# 改为,我们的开发板使用的是ddr4
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/imx8m/imximage-8mm-ddr4.cfg"CONFIG_DEFAULT_FDT_FILE="imx8mm-evk.dtb"
# 改为
CONFIG_DEFAULT_FDT_FILE="imx8mm-topeet.dtb"

1.2 添加板级文件

同样复制参考板的板级文件,在源码目录下执行下列命令创建我们自己板子的板级文件。

$ cd include/configs/
$ cp imx8mm_evk.h imx8mm_topeet.h$ cd ../../board/freescale/
$ cp -r imx8mm_evk imx8mm_topeet
$ cd imx8mm_topeet/
$ mv imx8mm_evk.c imx8mm_topeet.c
$ rm lpddr4_timing_4g.c lpddr4_timing.c

修改include/configs/imx8mm_topeet.h文件

// include/configs/imx8mm_topeet.h#ifndef __IMX8MM_EVK_H
#define __IMX8MM_EVK_H
// 改为
#ifndef __IMX8MM_TOPEET_H
#define __IMX8MM_TOPEET_H/* 删除注释代码,我们的开发板用的是PCA9450电源管理芯片,所以不考虑别的情况
#if defined(CONFIG_IMX8M_LPDDR4) && defined(CONFIG_TARGET_IMX8MM_EVK)
*/
#define CONFIG_POWER_PCA9450
/* 删除注释代码
#else
#define CONFIG_POWER_BD71837
#endif
*/#define JH_ROOT_DTB    "imx8mm-evk-root.dtb"
// 改为
#define JH_ROOT_DTB    "imx8mm-topeet-root.dtb"/* 删除注释代码,1为SD卡启动,2为EMMC启动,我们采用手动配置EMMC启动
#ifdef CONFIG_TARGET_IMX8MM_DDR4_EVK
#define CONFIG_SYS_FSL_USDHC_NUM    1
#else
*/
#define CONFIG_SYS_FSL_USDHC_NUM    2
/* 删除注释代码
#endif
*/#include "imx8mm_evk_android.h"
// 改为
#include "imx8mm_topeet_android.h"

修改board/freescale/imx8mm_topeet/imx8mm_topeet.c文件

// board/freescale/imx8mm_topeet/imx8mm_topeet.c// 下面函数修改为,将EVK改为TOPEET
int board_late_init(void)
{/* 此处代码省略 */#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIGenv_set("board_name", "TOPEET");env_set("board_rev", "iMX8MM");
#endifreturn 0;
}

修改board/freescale/imx8mm_topeet/Kconfig文件为

if TARGET_IMX8MM_TOPEETconfig SYS_BOARDdefault "imx8mm_topeet"config SYS_VENDORdefault "freescale"config SYS_CONFIG_NAMEdefault "imx8mm_topeet"config IMX8M_1G_MEMORYbool "imx8m 1GB memory size"source "board/freescale/common/Kconfig"endif

修改board/freescale/imx8mm_topeet/MAINTAINERS文件为

i.MX8MM TOPEET BOARD
M:  Peng Fan <peng.fan@nxp.com>
S:  Maintained
F:  board/freescale/imx8mm_topeet/
F:  include/configs/imx8mm_topeet.h
F:  configs/imx8mm_topeet_defconfig

修改board/freescale/imx8mm_topeet/Makefile文件为

#
# Copyright 2018 NXP
#
# SPDX-License-Identifier:      GPL-2.0+
#obj-y += imx8mm_topeet.oifdef CONFIG_SPL_BUILD
obj-y += spl.o
obj-$(CONFIG_IMX8M_DDR4) += ddr4_timing.o
endif

修改arch/arm/mach-imx/imx8m/Kconfig文件

config TARGET_PHYCORE_IMX8MPbool "PHYTEC PHYCORE i.MX8MP"select IMX8MPselect SUPPORT_SPLselect IMX8M_LPDDR4# 在这里添加下面代码
config TARGET_IMX8MM_TOPEETbool "imx8mm DDR4 TOPEET board"select IMX8MMselect SUPPORT_SPLselect IMX8M_DDR4select FSL_CAAMselect FSL_BLOBselect MISCselect SPL_CRYPTO_SUPPORT if SPL# 在最后endif上面添加下面一行
source "board/freescale/imx8mm_topeet/Kconfig"

1.3 添加设备树文件

复制参考板的设备树文件,在源码目录下执行下列命令创建我们自己板子的设备树文件。

$ cd arch/arm/dts/
$ cp imx8mm-evk.dts imx8mm-topeet.dts
$ cp imx8mm-evk.dtsi imx8mm-topeet.dtsi
$ cp imx8mm-evk-u-boot.dtsi imx8mm-topeet-u-boot.dtsi

修改arch/arm/dts/imx8mm-topeet.dts文件

// 文件arch/arm/dts/imx8mm-topeet.dts#include "imx8mm-evk.dtsi"
// 改为
#include "imx8mm-topeet.dtsi"//根节点下的这两个属性改为
/ {model = "NXP i.MX8MM TOPEET board";compatible = "fsl,imx8mm-topeet", "fsl,imx8mm";
};

修改arch/arm/dts/Makefile文件

dtb-$(CONFIG_ARCH_IMX8M) += \# 此处代码省略imx8mn-ab2.dtb \#添加我们的板子imx8mm-topeet.dtb

2. 修改设备树

添加完板子之后对uboot的修改主要就是修改设备树,源码基本不需要修改。

2.1 修改DDR

官方开发板和我们开发板最大的不同就是DDR类型的不同,官方开发板使用的是LPDDR4我们开发版使用的是DDR4,上面我们修改了配置文件中的CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/imx8m/imximage-8mm-ddr4.cfg"参数就完成了修改。

2.2 修改网卡

讯为i.MX8MM开发板使用的phy芯片和官方iMX8MM EVK开发板是同系列,只有设计上略有不同。讯为i.MX8MM开发板的phy芯片复位引脚接到了GPIO2_IO10上,所以要对phy配置复位引脚。

// 文件arch/arm/dts/imx8mm-topeet.dtsi&fec1 {mdio {ethphy0: ethernet-phy@0 {// 更改reset引脚属性reset-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;};};
};&iomuxc {pinctrl_fec1: fec1grp {fsl,pins = </* MX8MM_IOMUXC_SAI2_RXC_GPIO4_IO22       0x19 */MX8MM_IOMUXC_SD1_RESET_B_GPIO2_IO10      0x19>;};
};

2.3 修改SD卡

讯为i.MX8MM开发板和官方iMX8MM EVK开发板SD卡,只有SD2_DET引脚不同。讯为i.MX8MM开发板SD2_DET引脚接到了GPIO2_IO12上,所以要对SD配置CD引脚。

// 文件arch/arm/dts/imx8mm-topeet.dtsi&usdhc2 {// 更改cd引脚属性cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
};&iomuxc {pinctrl_usdhc2_gpio: usdhc2grpgpiogrp {fsl,pins = </* MX8MM_IOMUXC_GPIO1_IO15_GPIO1_IO15 0x1c4 */MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12    0x1c4>;};
};

2.4 关闭屏幕和TypeC

因为我没有屏幕,所以需要失能屏幕。

// 文件arch/arm/dts/imx8mm-topeet.dtsi&lcdif {status = "disabled";
};&mipi_dsi {status = "disabled";
};

板子没有TypeC接口,直接关闭。

# configs/imx8mm_topeet_defconfigCONFIG_USB_TCPC=y
# 改为
CONFIG_USB_TCPC=n

3. 编译下载

编译uboot前我们需要先编译ATF,下载uboot编译所需的文件。文章uboot的编译目录,为uboot源码的根目录。

3.1 编译ATF

进入下载好的ATF源码目录,执行下列命令完成编译。

$ make CROSS_COMPILE=aarch64-linux-gnu- PLAT=imx8mm bl31

编译完成可以看到在build/imx8mm/release下生成了我们需要的bl31.bin文件,将这个文件复制到uboot的编译目录下。

3.2 下载firmware-imx

执行下面命令,下载firmware-imx,获取权限并执行获取所需文件。

$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.9.bin
$ chmod +x firmware-imx-8.9.bin
$ ./firmware-imx-8.9.bin

进入firmware-imx-8.9/firmware/ddr/synopsys目录,将ddr4_dmem_1d.binddr4_imem_1d.binddr4_dmem_2d.binddr4_imem_2d.bin四个文件复制到uboot的编译目录下。

3.3 编译uboot

进入uboot源码目录,确保编译所需文件都已复制。

执行下列命令,完成编译。

$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- imx8mm_topeet_defconfig
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- menuconfig
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- ATF_LOAD_ADDR=0x920000 flash.bin -j12

编译完成,生成flash.bin是带有IVT的,可以烧写。

3.4 下载验证

使用uuu启动uboot,将拨码开关拨到串行下载模式,连接好串口和OTG。执行$ sudo uuu -b emmc flash.bin命令,进行下载。(注意:下载到SD卡使用$ sudo uuu -b sd flash.bin,但是CONFIG_SYS_FSL_USDHC_NUM得选择SD卡启动)

下载完成后,设置启动方式从EMMC启动,重启开发板。

将网线连接到路由器上,执行dhcp命令获取ip地址,并ping服务器测试网络正常。

4. 总结

uboot移植添加了很多板级文件,这些都不是重要的(其他芯片可能没有这些)。修改设备树是移植的重中之重,但是讯为i.MX8MM开发板和官方EVK开发板比较接近,所以修改比较简单。本文仅供学习参考,如有问题欢迎指正。

移植源码获取:

git clone https://github.com/Sonboy97/uboot.git -b imx

iMX8MM u-boot2021.04移植相关推荐

  1. 6004.ubuntu18.04移植qgroundcontrol地面站

    ubuntu18.04移植qgroundcontrol地面站 参考博客: 下载qgroundControl源码 第1种方式: git clone --recursive https://github. ...

  2. uboot研读笔记 | 04 - 移植uboot 2012.04到JZ2440(支持Nor Flash读写)

    项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...

  3. Ubuntu-Base在iMX8MM平台上的移植

    先说废话↓ 转眼大学快过完了,已经开始了毕业设计的开发.笔者的毕业设计是一个运行ARM-Linux的第一人称控制机器人,为了挑(zhe)战(mo)一下自己,选择了一个性能很美丽的平台--iMX8MM, ...

  4. IMX6ULL-UBoot 20.04移植记录

    开发环境简介 开发板 正点原子MINI 操作系统 Linux-Mint 20.2 交叉编译链 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf U ...

  5. IMX6ULL u-boot 2020.04 移植LAN8720A(网卡)

    1.修改设备树arch/arm/dts/imx6ul-14x14-evk.dtsi 修改后 &fec1 {pinctrl-names = "default";pinctrl ...

  6. uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)

    项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...

  7. Ubuntu-Base 18 文件系统 在iMX8平台上的移植

    Ubuntu-Base 18 文件系统 在iMX8平台上的移植 开发板是如下的型号 OKMX8MPX-C V2.0 OKMX8PQ-C开发板 FETMX8MPX-C V1.0 在 飞凌 提供的 ubu ...

  8. RT73 wifi无线网卡驱动移植过程 和wpa支持

    转 移植环境: 主机操作系统:Ubantu 8.10 目标系统:linux-2.6.22.6 交叉编译器:arm-softfloat-linux-gnu-gcc-3.4.5 一.RT73驱动编译 1. ...

  9. OK6410A移植mw150us无线网卡驱动

    一 ubuntu 12.04移植mw150us驱动 参考: 1)https://blog.csdn.net/wangdapao12138/article/details/82559422 2)http ...

  10. STM32移植uC/OSIII

    坚持就是胜利 一.UCOS简介 01 简介 02 uC/OS-III的任务 03 其他介绍 二.操作过程 01 题目要求 02 配置CubeMX 03 下载代码 04 移植代码 05 效果展示 三.实 ...

最新文章

  1. 你不好奇缓冲池里的秘密吗?
  2. 在php中如何便利字符串,php字符串可以遍历嘛
  3. 嵌入式web服务器预研报告(转)
  4. html常用标签(form标签)
  5. Quarkus的其他(非标准)CDI功能
  6. java虚拟机-程序计数器PC Register
  7. 瓜州县电子政务工程_甘肃瓜州:“厕所革命”带来乡村新生活
  8. Spring Boot 菜鸟教程 application.properties 常用配置
  9. Eclipse中配置约束(DTD,XSD)
  10. JAVE实现音频截取并上传OSS
  11. 【版本控制】git学习笔记(一)
  12. GIF微信表情如何制作
  13. 基于触摸屏PLC的温度采集及简单控制
  14. vba-msgbox用法详解
  15. 个人关于颈椎病治疗和保养的一些经验总结!
  16. windows飞行模式被强制开启,无法关闭,我来带你解决问题
  17. 新员工如何快速融入新的工作环境
  18. keil 增加 芯片包_国内首家!平头哥刚刚宣布开源RISCV内核MCU芯片设计平台
  19. HDMI设计1--HDMI 1.4b SPEC的阅读个人总结
  20. mysql怎么打开命令行_怎么在命令行打开mysql?

热门文章

  1. 使用PHP和JS对小米主题商店下载地址解析
  2. 开源分词系统pkuseg学习
  3. 智慧旅游系统总体设计方案
  4. java学习手册下载_java学习手册
  5. 《21天学通C语言(第7版)》一6.4 小 结
  6. 十字链表存储稀疏矩阵
  7. 2021-04-23 - TS型网页视频下载 - 学习/实践
  8. 第1章 软件测试概述需求分析
  9. 34个省域统计年鉴合集(32省更新至2020年)
  10. IOS github客户端操作流程 超详细