0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在U-Boot中添加自已的开发板

CHANBAEK 来源:嵌入式攻城狮 作者:嵌入式攻城狮 2023-04-24 10:48 次阅读

1.NXP官方开发板uboot移植测试

uboot移植不需要从零开始将uboot移植到使用的开发板上。 因为半导体厂商通常都会自己做一个开发板, 将uboot移植到他们自己的原厂开发板上,再将这个uboot(原厂BSP 包)发布出去。 因此使用自已的开发板移植uboot,一般按如下步骤进行

1.1 查找官方开发板默认配置文件

市面上的开发板,通常会参考原厂的开发板做硬件,然后在原厂提供的 BSP 包上做修改,如本文所使用的正点原子 I.MX6ULL 开发板参考的就是NXP官方的 I.MX6ULL EVK 开发板做的硬件:

图片

将NXP官方原版Uboot源码包,拷贝至Ubuntu下的相应文件夹中,然后进行解压:

tar -vxjf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

configs目录下有大量跟I.MX6UL/6ULL有关的配置,找到与mx6ull相同的配置文件,如下图:

图片

因为这里使用的开发板是emmc版本的,所以使用以下这个配置文件:

mx6ull_14x14_evk_emmc_defconfig

1.2 编译官方开发板uboot

找到 NXP 官方 I.MX6ULL EVK 开发板对应的默认配置文件以后就可以编译了,编译uboot使用下面3条指令或者使用编译脚本文件:

#ARCH=arm表示设置目标为arm架构,相当于make distclean,清除工程
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
#配置uboot,配置文件为mx6ull_14x14_evk_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
#V=1用于设置编译过程中的信息输出级别,相当于make -j12,即使用12核来编译uboot
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
##########################################################################
#每次编译uboot都需要输入一长串命令
#为了简单起见,建立一个shell脚本文件,将这些命令写到shell脚本里
#执行shell脚本即可完成编译工作
#新建mx6ull_evk_emmc.sh脚本文件
##########################################################################
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
##########################################################################
#通过命令“./mx6ull_evk_emmc.sh”编译uboot

编译完成以后会生成 u-boot.bin、u-boot.imx 等文件,但是这些文件是 NXP 官方 I.MX6ULL EVK 开发板配置生成的,所以接下来将其烧录到正点原子的 I.MX6ULL 开发板上看看能否使用

1.3 烧写验证与测试

将 imxdownload 软件拷贝到 uboot 源码根目录下,然后使用 imxdownload 软件将 u-boot.bin 烧写到 SD 卡中,烧写命令如下:

chmod 777 imxdownload   		#给予imxdownload可执行权限
./imxdownload u-boot.bin /dev/sdxxx 	#烧写到SD卡中

烧录完之后,将SD卡插入开发板启动,使用串口连接电脑,查看uboot启动信息:从下图可以看出,uboot启动正常,虽然用的是NXP官方 I.MX6ULL 开发板的uboot,但是在正点原子的I.MX6ULL开发板上是可以正常启动的,而且 DRAM 识别正确,为512MB

图片

2.在U-Boot中添加自已的开发板

上面介绍了如何使用NXP原厂的uboot进行编译、烧写和运行。 但是NXP原厂的uboot,直接烧录到我的开发板中,LCD的驱动和网络驱动是不正常的,需要进行修改

下面将介绍如何修改uboot,使得uboot能匹配我们自己的开发板。 修改uboot以匹配开发板的方式有两种:

  • 在NXP原厂开发板i.MX 6ULL EVK的文件上进行修改
  • 仿造NXP的开发板文件,添加自己的开发板文件

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

2.1 添加开发板默认配置文件

在configs文件夹下,参考原厂开发板的配置文件,创建自己开发板的配置文件

mx6ull_14x14_evk_emmc_defconfig复制该文件,并重命名

mx6ull_andyxi _emmc_defconfig为自已的配置文件

cp mx6ull_14x14_evk_emmc_defconfig mx6ull_andyxi_emmc_defconfig

mx6ull_andyxi_emmc_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
######### 修改后的内容 ###########################
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_andyxi_ emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" 
CONFIG_ARM=y 
CONFIG_ARCH_MX6=y 
CONFIG_TARGET_MX6ULL_ANDYXI_EMMC=y 
CONFIG_CMD_GPIO=y

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

在目录include/configs下添加开发板对应的头文件

复制 mx6ullevk.h,并重命名

mx6ull_andyxi_emmc.h做为自已开发板的头文件

cp mx6ullevk.h mx6ull_andyxi_emmc.h

mx6ull_andyxi_emmc.h里面的内容做如下修改

/*######### 原始内容 ###############################*/
#ifndef __MX6ULLEVK_CONFIG_H 
#define __MX6ULLEVK_CONFIG_H
/*######### 修改后的内容 ###########################*/
#ifndef __MX6ULL_ANDYXI_EMMC_CONFIG_H 
#define __MX6ULL_ANDYXI_EMMC_CONFIG_H

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

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

复制 mx6ullevk文件夹,并重命名

mx6ull_andyxi_emmc为自己开发板的板级文件夹

cd board/freescale/ 			#进入板级文件夹
cp mx6ullevk/ -r mx6ull_andyxi_emmc	#复制mx6ullevk并重命名

进入 mx6ull_andyxi_emmc目录

cd mx6ull_andyxi_emmc 			#进入mx6ull_andyxi_emmc文件夹

mx6ull_andyxi_emmc.c由 mx6ullevk.c重命名而来

mv mx6ullevk.c mx6ull_andyxi_emmc.c	#重命名mx6ullevk.c文件

Makefile文件修改

obj-y  := mx6ull_andyxi_emmc.o      

extra-$(CONFIG_USE_PLUGIN) :=  plugin.bin
$(obj)/plugin.bin: $(obj)/plugin.o
        $(OBJCOPY) -O binary --gap-fill 0xff $< $@

imximage.cfg文件修改

######### 原始内容 ###############################
PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000
######### 修改后的内容 ###########################
PLUGIN board/freescale/mx6ull_andyxi_emmc/plugin.bin 0x00907000

Kconfig文件修改

######### 原始内容 ###############################
if TARGET_MX6ULL_14X14_EVK || TARGET_MX6ULL_9X9_EVK

config SYS_BOARD
        default "mx6ullevk" 

config SYS_VENDOR
        default "freescale"

config SYS_CONFIG_NAME
        default "mx6ullevk"

endif 
######### 修改后的内容 ###########################
if TARGET_MX6ULL_ANDYXI_EMMC

config SYS_BOARD
        default "mx6ull_andyxi_emmc" 

config SYS_VENDOR
        default "freescale"

config SYS_CONFIG_NAME
        default "mx6ull_andyxi_emmc"

endif

MAINTAINERS文件修改

######### 原始内容 ###############################
MX6ULLEVK BOARD
M:      Peng Fan 
S:      Maintained
F:      board/freescale/mx6ullevk/
F:      include/configs/mx6ullevk.h
F:      configs/mx6ull_14x14_evk_defconfig
F:      configs/mx6ull_9x9_evk_defconfig
######### 修改后的内容 ###########################
MX6ULL_ANDYXI_EMMC BOARD
M:      Peng Fan 
S:      Maintained
F:      board/freescale/mx6ull_andyxi_emmc/
F:      include/configs/mx6ull_andyxi_emmc.h
F:      configs/mx6ull_andyxi_emmc_defconfig

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

uboot支持图形界面配置,因此要修改arch/arm/cpu/armv7/mx6/目录下的图像界面配置文件 Kconfig

######### 207行加入如下内容 ###############################
config TARGET_MX6ULL_ANDYXI_EMMC
        bool "Support mx6ull_andyxi_emmc"
        select MX6ULL
        select DM
        select DM_THERMAL
######### 最后一行endif的前一行添加如下内容 ###############
source "board/freescale/mx6ull_andyxi_emmc/Kconfig"

2.5 使用新添加的板子配置编译uboot

在 uboot根目录下新建 shell脚本,来配置编译 uboot

mx6ull_andyxi_emmc.sh脚本内容如下:

#!/bin/bash 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_andyxi_emmc_defconfig 
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

给予可执行权限,然后运行脚本来完成编译

chmod 777 mx6ull_andyxi_emmc.sh 	#给予可执行权限,一次即可
./mx6ull_andyxi_emmc.sh 		#运行脚本编译uboot

编译完成后输入如下命令,查看添加的头文件有没有被引用,如果有很多文件都引用了这个头文件(如下图),那就说明新板子添加成功

grep -nR "mx6ull_andyxi_emmc.h"

图片

编译完成以后就使用 imxdownload将新编译出来的 u-boot.bin烧写到 SD卡中测试,串口输出结果如下图

图片

从上图可以看出,此时的Board还是“MX6ULL 14x14 EVK”,如果接了 LCD屏幕的话会发现 LCD屏幕并没有显示 NXP的 logo,而且从图中可以看出此时的网络同样也没识别出来。 后续文章会介绍如何修改 LCD驱动和网络驱动......

总结一下上面做了哪些修改:右端蓝色的为原厂开发板的相关文件,黄色的为模仿原厂文件,新添加并修改的自己开发板的文件

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 半导体
    +关注

    关注

    334

    文章

    26796

    浏览量

    213818
  • NXP
    NXP
    +关注

    关注

    60

    文章

    1259

    浏览量

    182779
  • 移植
    +关注

    关注

    1

    文章

    376

    浏览量

    28091
  • 开发板
    +关注

    关注

    25

    文章

    4881

    浏览量

    97001
  • Uboot
    +关注

    关注

    4

    文章

    125

    浏览量

    28122
收藏 人收藏

    评论

    相关推荐

    U-boot的基本介绍

    从本文开始,将陆续推送“手把手教你移植U-boot”系列文章,目标是由浅入深地讲解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默认硬件开发
    发表于 07-14 16:52 2702次阅读
    <b class='flag-5'>U-boot</b>的基本介绍

    基于开发板U-Boot移植

    /boards.cfguboot2011.06/config.mkuboot2011.06/Makefile移植过程就是在新的U-Boot代码增加与S5PV210开发板CPU级和Board级代码,使之能够在210
    发表于 01-14 14:31

    开发板上移植U-Boot

    /boards.cfguboot2011.06/config.mkuboot2011.06/Makefile移植过程就是在新的U-Boot代码增加与S5PV210开发板CPU级和Board级代码,使之能够在210
    发表于 01-14 14:36

    U-Boot的启动及移植分析

    bootloader 开发是嵌入式系统必不可少而且十分重要的部分,U-Boot 为功能强大的bootloader 开发软件。本文详细分析了U-Boot 的启动流程,并结合其源码,阐述了
    发表于 09-01 16:34 27次下载

    嵌入式U-BOOT的启动流程及移植

    S3C44B0开发板上的移植方法和步骤。 u-boot是一个功能强大的bootloader开发软件,适用的CPU平台及
    发表于 02-25 16:00 59次下载

    u-boot学习指南

    u-boot 是免费的,我们做嵌入式的一般只需要使用 u-boot 即可,但如果你想成为一个比较强的嵌入式系统工程师,而且还做了自己开发板,那么还是要学习一下如果将网上下载的通用 u-boot
    发表于 11-17 15:54 2次下载

    u-boot简介

    演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释能体现这一点
    发表于 10-14 11:17 3530次阅读

    U-Boot到OMAP5912开发板的移植

    U-Boot到OMAP5912开发板的移植
    发表于 10-27 10:23 8次下载
    <b class='flag-5'>U-Boot</b>到OMAP5912<b class='flag-5'>开发板</b>的移植

    何在U-Boot实现对Yaffs镜像的设计?

    U-Boot是目前广泛使用的嵌入式操作系统通用引导程序,具有功能丰富强大,支持多种操作系统和CPU体系,易于功能扩展和移植,源码开放等多种优点。U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开
    的头像 发表于 08-29 05:02 3690次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>U-Boot</b><b class='flag-5'>中</b>实现对Yaffs镜像的设计?

    U-BOOT的特点及利用其构建开发板的引导装载程序

    sourceforge网站的社区服务器,Internet上有一群自由开发人员对其进行维护和开发,它的项目主页是http://sourceforge.net/projects/U-BOOT
    的头像 发表于 03-03 07:57 1557次阅读
    <b class='flag-5'>U-BOOT</b>的特点及利用其构建<b class='flag-5'>开发板</b>的引导装载程序

    fireflyAIO-3399J主板U-Boot使用介绍

    RK U-Boot 基于开源的 U-Boot 进行开发,工作模式有启动加载模式和下载模式。
    的头像 发表于 12-24 10:00 1590次阅读
    fireflyAIO-3399J主板<b class='flag-5'>U-Boot</b>使用介绍

    u-boot】在stm32h7开发板体验u-boot

    u-boot在2017版本中加入了对Cortex-M系列内核的支持,正好手上有个h7的开发板,所以拿来试试,学习一下uboot。一 u-boot版本选择其实开始选用最早支持的版本比较好,因为新版本
    发表于 12-01 15:06 11次下载
    【<b class='flag-5'>u-boot</b>】在stm32h7<b class='flag-5'>开发板</b>体验<b class='flag-5'>u-boot</b>

    在Vitis调试ARM可信固件和U-boot

    在本篇博文中,我们将探讨如何在 Vitis 调试 Zynq UltraScale 器件启动镜像。这些启动镜像包括 ARM 可信固件 (ATF) 和 U-boot
    的头像 发表于 08-02 10:14 3430次阅读
    在Vitis<b class='flag-5'>中</b>调试ARM可信固件和<b class='flag-5'>U-boot</b>

    创建自定义的u-boot命令

    为什么会有这篇文章,因为小生被u-boot源码的设计所吸引了(源码对命令的处理过程)。自定义u-boot命令属于u-boot源码的开发技术啦,可能u
    的头像 发表于 08-08 14:46 1059次阅读

    Linux U-Boot开发指南

    介绍 U-Boot 的编译打包、基本配置、常用命令的使用、基本调试方法等, 为 U-BOOT 的移植及应用开发提供了基础。
    的头像 发表于 03-06 10:28 1238次阅读
    Linux <b class='flag-5'>U-Boot</b><b class='flag-5'>开发</b>指南