当前位置: 首页 > article >正文

Linux--uboot移植(二)新UBOOT配置

修改uboot以匹配开发板的方式有两种,一种是在NXP原厂开发板i.MX 6ULL EVK的文件上进行修改,另一种仿造NXP的开发板文件,添加自己的开发板文件。

为了能更多的了解uboot,我们使用代码改动较大的第二种方式进行uboot的移植。

在修改uboot之前,先来看一下uboot的源码结构。重点是分析 uboot 启动流程,而不是整个 uboot

源码, uboot 整个源码非常大,我们只看跟我们关心的部分即可。
我们在分析 uboot 源码之前一定要 在 Ubuntu 中编译一下 uboot 源码,因为编译过程会生成一些文件,而生成的这些恰恰是分析uboot 源码不可或缺的文件。

一、U-BOOT的编译流程(Make命令的执行)

二、U-BOOT启动流程

通过对 uboot 启动流程的梳理,我们就可以掌握一些外设是在哪里被初始化的,这样当我们需要修改这些外设驱动的时候就会心里有数。另外,通过分析uboot 的启动流程可以了解 Linux 内核是如何被启动的。

三、U-BOOT移植

本节主要记录如何将 NXP 官方的 uboot 移植到自己的 I.MX6ULL 开发板上,学习如何在 uboot 中添加我们自己的板子。

1、理论

uboot 的移植并不是说我们完完全全的从零开始将 uboot 移植到我们现在所使用的开发板 或者开发平台上。这个对于我们来说基本是不可能的,这个工作一般是半导体厂商做的,半导 体厂商负责将 uboot 移植到他们的芯片上,因此半导体厂商都会自己做一个开发板,这个开发板就叫做原厂开发板,比如大家学习 STM32 的时候听说过的 discover 开发板就是 ST 自己做的。半导体厂商会将 uboot 移植到他们自己的原厂开发板上,测试好以后就会将这个 uboot 发布出去,这就是大家常说的原厂 BSP 包。我们一般做产品的时候就会参考原厂的开发板做硬件,然后在原厂提供的 BSP 包上做修改,将 uboot 或者 linux kernel 移植到我们的硬件上。这个就是uboot 移植的一般流程:
①、在 uboot 中找到参考的开发平台,一般是原厂的开发板。
②、参考原厂开发板移植 uboot 到我们所使用的开发板上。

2、实践

2.1添加开发板配置文件

首先是创建自己开发板的配置文件,该文件可参考原厂开发板的配置文件,在configs文件夹下,将原来的默认配置文件mx6ull_14x14_evk_emmc_defconfig复制一份,并重命名为mx6ull_myboard_defconfig,该文件即用于作为自己开发板的配置文件。

然后进行内容修改,将原始内容:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_14X14_EVK=y
CONFIG_CMD_GPIO=y

修改为:

2.2 添加开发板对应的头文件

在目录 include/configs 下添加自己开发板对应的头文件,复制mx6ullevk.h,并重命名为mx6ull_myboard.h,将文件中的

#ifndef __MX6ULLEVK_CONFIG_H 
#define __MX6ULLEVK_CONFIG_H 

修改为:

该文件里面有很多宏定义,这些宏定义基本用于配置uboot,如果我们自己要想使能或者禁止uboot的某些功能,那就要在这里面修改。所以如果需要某个功能的话,就要在 include/configs文件夹下的对应板子头文件中添加这个功能对应的宏。

在ubuntu中,可以安装VS Code软件来辅助查看代码,在ubuntu中安装vscode,需要先下载deb格式的安装包,然后使用类似如下的指令即可进行安装:
sudo dpkg -i code_1.58.0-1625728071_amd64.deb
安装完之后,我们可以将图标添加到ubuntu桌面上,ubuntu安装的所有软件图标都在目录 /usr/share/applications中,找到 Visual Studio Code 的图标,然后点击鼠标右键,选择复制到->桌面即可。

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

uboot中每个板子都有一个对应的文件夹来存放板级文件(如开发板上外设驱动文件等)。NXP的I.MX系列芯片的所有板级文件夹都存放在 board/freescale/目录下,在这个目录下有个名为mx6ullevk的文件夹,原厂开发板的板级文件夹。

复制 mx6ullevk,将其重命名为mx6ull_myboard,进入mx6ull_myboard目录中, 将其中的mx6ullevk.c文件重命名为mx6ull_myboard.c

总的来说,要做的基本就是把复制原来的板极文件夹并把里面和原板名字“mx6ullevk”相关的都替换为“mx6ull_myboard”。

2.3.1 修改Makefile文件

首先是修改 board/freescale/mx6ull_myboard 目录下的Makefile文件

将原始内容:

# (C) Copyright 2015 Freescale Semiconductor, Inc.
#
# SPDX-License-Identifier:      GPL-2.0+
#
​
obj-y  := mx6ullevk.o
​
extra-$(CONFIG_USE_PLUGIN) :=  plugin.bin
$(obj)/plugin.bin: $(obj)/plugin.o$(OBJCOPY) -O binary --gap-fill 0xff $< $@

其中的依赖项修改为:

obj-y  := mx6ull_myboard.o

这样才会编译mx6ull_myboard.c这个文件。

2.3.2 修改imximage.cfg文件

然后修改 board/freescale/mx6ull_myboard 目录下的imximage.cfg文件

imximage.cfg中的下面一句:

PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000

改为:

PLUGIN board/freescale/mx6ull_myboard/plugin.bin 0x00907000 

2.3.3 修改Kconfig文件

接着修改 board/freescale/mx6ull_myboard 目录下的Kconfig文件

将原始内容:

if TARGET_MX6ULL_14X14_EVK || TARGET_MX6ULL_9X9_EVK
​
config SYS_BOARDdefault "mx6ullevk"
​
config SYS_VENDORdefault "freescale"
​
config SYS_CONFIG_NAMEdefault "mx6ullevk"
​
endif

修改为:

2.3.4 修改MAINTAINERS文件

再接着修改 board/freescale/mx6ull_myboard 目录下的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_9x9_evk_defconfig

修改为:

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

最后修改arch/arm/cpu/armv7/mx6/目录下的Kconfig文件

注意这里的Kconfig和 board/freescale/mx6ull_myboard目录下的Kconfig是不一样的。

在207行插入一些内容:

config TARGET_MX6ULL_MYBOARDbool "Support mx6ull_myboard"select MX6ULLselect DMselect DM_THERMAL

然后,在最后一行的endif的前一行添加如下内容:

source "board/freescale/mx6ull_myboard/Kconfig" 

2.5 创建编译脚本

在uboot根目录下新建一个名为build_myboard.sh的 shell 脚本,写入如下内容:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_myboard_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

至此,以上完成的工作,相当于将NXP原厂开发板相关的配置文件,重新复制了一份,并对板子名称修改为了自己板子的名字。

此时执行./build_myboard.sh,等待编译完成后输入如下命令:

grep -nR "mx6ull_myboard.h"

如果有很多文件都引用了这个头文件, 那就说明新板子添加成功:

将uboot进行编译并运行,实际的效果应该和原厂uboot的效果一样(LCD无法显示)。

总结一下刚才都有哪些修改:

右端灰色的为原厂开发板的相关文件,黄色的为模仿原厂文件,新添加并修改的自己开发板的文件。

参考资料:i.MX6ULL嵌入式Linux开发2-uboot移植实践 - 知乎

http://www.lryc.cn/news/2417826.html

相关文章:

  • 通信协议:HTTP知识点总结
  • VO、DTO、BO、PO、DO、POJO 数据模型的理解和实际使用
  • 360影视大全 python_「www.dy2018.com」python爬取电影天堂(www.dy2018.com)所有视屏的所有链接 - 金橙教程网...
  • 奇异值分解(SVD)详解及其应用
  • JSONP原理以及示例
  • 【802.11】MCS简介
  • sql语句中distinct的用法
  • Netcat使用学习
  • Jfinal 框架简单入门
  • ftp客户端使用详细说明【linux和windows】
  • STM32F103C8t6驱动MPU6050+HMC5883L+BMP280进行三轴姿态解算
  • JS 中 String 的字符串截取 substr 和 substring 区别的快速记忆方法
  • Ubuntu——apt-get问题
  • 电子工程师必备网址
  • VNC Server远程桌面配置详解
  • 探秘Magnetissimo:自托管的磁力链接搜索引擎
  • react-native基本介绍
  • Attributes(特性)与 Properties(属性)的区别
  • 架构设计(1)-谈谈架构
  • 12 个超好用的免费在线工具建议收藏!(非常详细)从零基础入门到精通,看完这一篇就够了
  • HTTP部分详细讲解以及代码实现(二)
  • epoll原理详解及epoll反应堆模型
  • NLP深入学习——分词(Segmentation )
  • 算法 001. 辗转相除法(欧几里得算法)求最大公约数
  • 视图的基本操作
  • Linux ps命令详解
  • 关于.NET、ASP.NET和ASP
  • Gson的用法详解_Gson如何进行进行序列化和反序列化
  • python的符号lt和gt怎么输入_lt;lt;Python基础教程gt;gt;学习笔记 | 第04章 | 字典...
  • 科普:SMP系统是什么