iMX6ULL u-boot2021.04移植
iMX6ULL u-boot2021.04移植
- 1. 添加板子
- 1.1 添加配置文件
- 1.2 添加板级文件
- 1.3 添加设备树文件
- 2. 修改设备树
- 2.1 修改网卡
- 2.1 修改LCD
- 3. 编译下载
- 3.1 编译
- 3.1 下载验证
- 4. 总结
我移植的板子是讯为的TERMINATOR_V1.1开发板,参考板为官方 i.MX6ULL EVK开发板。
- iMX6ULL uboot2021.04 linux5.15.32移植
- iMX6ULL启动流程
- iMX6ULL u-boot2021.04移植
- iMX6ULL linux5.15.32移植
- iMX6ULL buildroot-2022.02.5构建根文件系统
1. 添加板子
进入我们下载好的源码目录,需要复制每个板子特有的一些文件,添加完板子板级文件一般就不会修改了,主要是修改设备树和配置文件。这里直接修改完这些文件,基本都是将evk改为topeet,不做过多解释。
1.1 添加配置文件
添加配置文件我们只需要复制 i.MX6ULL EVK的默认配置文件,在源码目录下执行下列命令创建我们自己板子的配置文件。
$ cd configs/
$ cp mx6ull_14x14_evk_defconfig mx6ull_14x14_topeet_defconfig
修改configs/mx6ull_14x14_topeet_defconfig文件
# configs/mx6ull_14x14_topeet_defconfigCONFIG_TARGET_MX6ULL_14X14_EVK=y
# 改为
CONFIG_TARGET_MX6ULL_14X14_TOPEET=yCONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"
# 改为
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-topeet"CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg"
# 改为
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_topeet/imximage.cfg"
1.2 添加板级文件
同样复制参考板的板级文件,在源码目录下执行下列命令创建我们自己板子的板级文件。
$ cd include/configs/
$ cp mx6ullevk.h mx6ull_topeet.h$ cd ../../board/freescale/
$ cp -r mx6ullevk mx6ull_topeet
$ cd mx6ull_topeet/
$ mv mx6ullevk.c mx6ull_topeet.c
$ rm imximage_lpddr2.cfg
修改include/configs/mx6ull_topeet.h文件
// include/configs/mx6ull_topeet.h#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H
// 改为
#ifndef __MX6ULL_TOPEET_CONFIG_H
#define __MX6ULL_TOPEET_CONFIG_H/* 删除注释代码
#define is_mx6ull_9x9_evk() CONFIG_IS_ENABLED(TARGET_MX6ULL_9X9_EVK)#ifdef CONFIG_TARGET_MX6ULL_9X9_EVK
#define PHYS_SDRAM_SIZE SZ_256M
#define BOOTARGS_CMA_SIZE "cma=96M "
#else
*/
#define PHYS_SDRAM_SIZE SZ_512M
#define BOOTARGS_CMA_SIZE ""
/* DCDC used on 14x14 EVK, no PMIC */
#undef CONFIG_LDO_BYPASS_CHECK
/* 删除注释代码
#endif
*/// 把findfdt和findtee两个uboot环境变量改为如下"findfdt="\"if test $fdt_file = undefined; then " \"if test $board_name = TOPEET && test $board_rev = 14X14; then " \"setenv fdt_file imx6ull-14x14-topeet.dtb; fi; " \"if test $fdt_file = undefined; then " \"echo WARNING: Could not determine dtb to use; " \"fi; " \"fi;\0" \"findtee="\"if test $tee_file = undefined; then " \"if test $board_name = TOPEET && test $board_rev = 14X14; then " \"setenv tee_file uTee-6ull-topeet; fi; " \"if test $tee_file = undefined; then " \"echo WARNING: Could not determine tee to use; " \"fi; " \"fi;\0" \
修改board/freescale/mx6ull_topeet/mx6ull_topeet.c文件
// board/freescale/mx6ull_topeet/mx6ull_topeet.cint board_late_init(void)
{/* 此处代码省略 */// 下面代码修改为
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIGenv_set("board_name", "TOPEET");env_set("board_rev", "14X14");
#endif/* 此处代码省略 */
}// 下面函数修改为
int checkboard(void)
{puts("Board: MX6ULL 14x14 TOPEET\n");return 0;
}
修改board/freescale/mx6ull_topeet/imximage.cfg文件
// board/freescale/mx6ull_topeet/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_topeet/plugin.bin 0x00907000
#else
修改board/freescale/mx6ull_topeet/plugin.S文件
// board/freescale/mx6ull_topeet/plugin.S.macro imx6ull_ddr3_evk_setting
// 改为
.macro imx6ull_ddr3_setting/* 删除注释代码
.macro imx6ull_lpddr2_evk_settingldr r0, =IOMUXC_BASE_ADDRldr r1, =0x00080000// 此处代码省略 ldr r1, =0x00000000str r1, [r0, #0x01C]
.endm
*/.macro imx6_ddr_setting
#if defined (CONFIG_TARGET_MX6ULL_9X9_EVK)imx6ull_lpddr2_evk_setting
#elseimx6ull_ddr3_evk_setting
#endif
.endm
// 改为
.macro imx6_ddr_settingimx6ull_ddr3_setting
.endm
修改board/freescale/mx6ull_topeet/Kconfig文件为
if TARGET_MX6ULL_14X14_TOPEETconfig SYS_BOARDdefault "mx6ull_topeet"config SYS_VENDORdefault "freescale"config SYS_CONFIG_NAMEdefault "mx6ull_topeet"config SYS_TEXT_BASEdefault 0x87800000
endif
修改board/freescale/mx6ull_topeet/MAINTAINERS文件为
MX6ULL_TOPEET BOARD
M: Peng Fan <peng.fan@nxp.com>
S: Maintained
F: board/freescale/mx6ull_topeet/
F: include/configs/mx6ull_topeet.h
F: configs/mx6ull_14x14_topeet_defconfig
修改board/freescale/mx6ull_topeet/Makefile文件为
# SPDX-License-Identifier: GPL-2.0+
# (C) Copyright 2016 Freescale Semiconductor, Inc.obj-y := mx6ull_topeet.o
修改arch/arm/mach-imx/mx6/Kconfig文件
config TARGET_BRPPT2bool "brppt2"# 此处代码省略helpSupportB&R BRPPT2 platformbased on Freescale's iMX6 SoC
# 在这里添加下面代码
config TARGET_MX6ULL_14X14_TOPEETbool "Support mx6ull_14x14_topeet"depends on MX6ULLselect BOARD_LATE_INITselect DMselect DM_THERMALselect IMX_MODULE_FUSEselect OF_SYSTEM_SETUPimply CMD_DM# 在最后endif上面添加下面一行
source "board/freescale/mx6ull_topeet/Kconfig"
1.3 添加设备树文件
复制参考板的设备树文件,在源码目录下执行下列命令创建我们自己板子的设备树文件。
$ cd arch/arm/dts/
$ cp imx6ull-14x14-evk.dts imx6ull-14x14-topeet.dts
$ cp imx6ul-14x14-evk.dtsi imx6ul-14x14-topeet.dtsi
$ cp imx6ul-14x14-evk-u-boot.dtsi imx6ul-14x14-topeet-u-boot.dtsi
修改arch/arm/dts/imx6ull-14x14-topeet.dts文件为,usdhc2节点是复制imx6ull-14x14-evk-emmc.dts中的,我们的板子有EMMC本应复制imx6ull-14x14-evk-emmc.dts,不想创建太多文件所以如此。
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
//
// Copyright (C) 2016 Freescale Semiconductor, Inc./dts-v1/;#include "imx6ull.dtsi"
#include "imx6ul-14x14-topeet.dtsi"
#include "imx6ul-14x14-topeet-u-boot.dtsi"/ {model = "i.MX6 ULL 14x14 TOPEET Board";compatible = "fsl,imx6ull-14x14-topeet", "fsl,imx6ull";
};&clks {assigned-clocks = <&clks IMX6UL_CLK_PLL3_PFD2>;assigned-clock-rates = <320000000>;
};&usdhc2 {pinctrl-names = "default", "state_100mhz", "state_200mhz";pinctrl-0 = <&pinctrl_usdhc2_8bit>;pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>;pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>;bus-width = <8>;non-removable;status = "okay";
};
修改arch/arm/dts/Makefile文件
dtb-$(CONFIG_MX6ULL) += \# 此处代码省略imx6ulz-14x14-evk-gpmi-weim.dtb \#添加我们的板子imx6ull-14x14-topeet.dtb
2. 修改设备树
添加完板子之后对uboot的修改主要就是修改设备树,源码基本不需要修改。
2.1 修改网卡
讯为的TERMINATOR_V1.1开发板使用的phy芯片和官方EVK开发板相同,只有设计上略有不同。TERMINATOR_V1.1开发板的两个phy芯片复位引脚分别接到了GPIO5_IO07和GPIO5_IO08上,所以要对phy配置复位引脚。GPIO5_IO07和GPIO5_IO08被复用为了SPI4的引脚,我们先失能SPI4。
// arch/arm/dts/imx6ul-14x14-topeet.dtsi/ {spi4 {status = "disabled"; // 失能SPI4};
};&fec1 {// 追加下面两个属性phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>;phy-reset-duration = <200>;
};&fec2 {// 追加下面两个属性phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;phy-reset-duration = <200>;
};&iomuxc {pinctrl_enet1: enet1grp {fsl,pins = <// 追加下面一行MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10b0 /* RST */>;};pinctrl_enet2: enet2grp {fsl,pins = <// 追加下面一行MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10b0 /* RST */>;};
};
修改configs/mx6ull_14x14_topeet_defconfig文件
# configs/mx6ull_14x14_topeet_defconfig# 最后添加,随机MAC地址
CONFIG_NET_RANDOM_ETHADDR=y
2.1 修改LCD
本文对RGB-LCD修改,其他显示设备不支持。
// arch/arm/dts/imx6ul-14x14-topeet.dtsi&lcdif {display0: display@0 {display-timings {native-mode = <&timing0>;timing0: timing0 {// 修改下面这些参数clock-frequency = <25000000>;hactive = <1024>;vactive = <600>;hfront-porch = <120>;hback-porch = <130>;hsync-len = <70>;vback-porch = <15>;vfront-porch = <17>;vsync-len = <3>;};};};
};
3. 编译下载
3.1 编译
利用之前安装的工具链,执行下列命令完成编译。
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_topeet_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
编译完成,生成u-boot-dtb.imx
是带有IVT的,可以烧写。
3.1 下载验证
使用uuu启动uboot,将拨码开关拨到串行下载模式,连接好串口和OTG。执行$ sudo uuu u-boot-dtb.imx
命令,进行下载。
查看串口打印信息,uboot启动正常,屏幕显示正常,按Ctrl+C进入命令行。
连接ETHERNET2到路由器,dhcp获取ip,ping服务器成功。
按板子复位键,执行$ sudo uuu -b emmc u-boot-dtb.imx
命令,将uboot下载到EMMC。设置拨码开关为EMMC启动,按复位键成功启动。
4. 总结
uboot移植添加了很多板级文件,这些都不是重要的(其他芯片可能没有这些)。修改设备树是移植的重中之重,但是TERMINATOR_V1.1开发板和官方imx6ullevk开发板比较接近,甚至官方demo板的镜像在讯为开发板直接可以跑起来,所以修改比较简单。本文仅供学习参考,如有问题欢迎指正。
移植源码获取:
git clone https://github.com/Sonboy97/uboot.git -b imx
iMX6ULL u-boot2021.04移植相关推荐
- IMX6ULL u-boot 2020.04 移植LAN8720A(网卡)
1.修改设备树arch/arm/dts/imx6ul-14x14-evk.dtsi 修改后 &fec1 {pinctrl-names = "default";pinctrl ...
- 6004.ubuntu18.04移植qgroundcontrol地面站
ubuntu18.04移植qgroundcontrol地面站 参考博客: 下载qgroundControl源码 第1种方式: git clone --recursive https://github. ...
- uboot研读笔记 | 04 - 移植uboot 2012.04到JZ2440(支持Nor Flash读写)
项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...
- IMX6ULL系列学习记录-sii902x移植篇
本人电子专业研究生毕业,挣点零花钱,承接毕业设计或者课题项目,涉及树莓派,图像识别.视频传输.python语音识别.esp32单片机.qt界面.python.嵌入式Linux.有兴趣可以联系我:155 ...
- linux内核imx6,imx6ull之linux内核移植
imx6ull开发环境之系统安装请参考:https://www.cnblogs.com/gxlblogs/p/14382547.html imx6ull交叉编译工具链安装 请参数:https://ww ...
- IMX6ULL-UBoot 20.04移植记录
开发环境简介 开发板 正点原子MINI 操作系统 Linux-Mint 20.2 交叉编译链 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf U ...
- 野火iMX6ULL Pro开发板移植SDL2
承诺的Linux三部曲移植还没写完,差个根文件系统没有写呢,但实在压抑不住内心的亢奋情绪,先把SDL2移植奉献给大家吧.关于SDL的移植,已经进行一个月了,之前把SDL移植成功后打算写Python的模 ...
- IMX6ULL博通wifi移植BCM4345C5
####WLAN DONGLE OVERVIEW The Dongle Host Driver (DHD) is the executable module that provides encapsu ...
- 【uboot】imx6ull uboot移植LAN8720A网卡驱动
文章目录 相关文章 1. 前言 2. IMX6ULL Ethernet LAN8720A硬件连接 3. 支持LAN8720A修改步骤 4. 验证测试 问题1:如何确定LAN8720A网卡PHYAD地址 ...
- uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)
项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...
最新文章
- PLS-00215:字符串长度限制在范围
- BSP print implemented in BSPWD_BASICS print.htm
- getMeasuredWidth和getWidth的区别
- pentaho DI--- Tutorial (spoon)
- python另一个程序正在使用此文件_另一个程序正在使用此文件,进程无法访问
- 最优视频监控软件开发的实现方法
- 【数据结构笔记41】散列表/哈希表的性能分享
- 工业上 计算机控制系统分为哪两大类,控制仪表及装置——考试复习题
- 26. Magento 常用(1)
- Mysql 根类别和子类别,如何在MySQL中设计类别和子类别?
- 全国计算机等级考试二级C语言程序设计考点整理
- WebUploader 设置单个图片上传
- 微信自动回复 html 点击文字,【微信开发】公众号自动回复文字和图文链接(示例代码)...
- premiere(Pr)为视频配字幕 开放式字幕使用详解
- 使用 matplotlib 绘制文氏图(venn)
- 【Linux】【开发环境】【RHEL】开发环境搭建系列之四——安装daytime服务
- Lawnmower E题
- Java题目训练——年终奖和迷宫问题
- AutoSAR系列讲解(实践篇)11.4-NvBlockSwComponents(上)
- windows系统coursera视频播放出错解决方法