[ARM Linux系统移植] U-Boot 中添加自己的开发板

在先前的文章中,我们已经了解到了 u-boot 的大致启动流程。从这篇文章开始,就开始着手于 u-boot 的移植。

以下记录的移植步骤都是基于 i.MX 官方移植好的 u-boot 进行的,以降低移植复杂度。

1. 步骤记录

以下步骤的主要目的就是针对自己的开发板,设置自己独立的“一撮”相关文件,不影响其他板子配置。为了更加方便看出所移植文件前后的变化,后续变化了的地方会通过粗体标出。

1.1 添加默认配置文件

在之前了解到,执行编译的时候,其中一个步骤就是指定默认配置文件。所以这边也需要建立自己板子的配置文件。

configs 目录下,我们基于 mx6ull_14x14_evk_defconfig 文件进行修改:

  • $ cp mx6ull_14x14_evk_defconfig mx6ull_my_emmc_defconfig

修改的文件内容如下,其中第 1 行和第 4 行的相关名称进行了更改:

configs/mx6ull_my_emmc_defconfig
  1. CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_my_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
  2. CONFIG_ARM=y
  3. CONFIG_ARCH_MX6=y
  4. CONFIG_TARGET_MX6ULL_MY_EMMC=y
  5. CONFIG_CMD_GPIO=y

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

开发板对应的头文件里有许多对 u-boot 配置的定义,这边参照 include/configs/mx6ullevk.h 文件:

  • $ cp mx6ullevk.h mx6ull_my_emmc.h

文件里的内容众多,先只修改顶部宏定义:

include/configs/mx6ull_my_emmc.h
  1. #ifndef __MX6ULL_MY_EMMC_CONFIG_H
  2. #define __MX6ULL_MY_EMMC_CONFIG_H

1.3 添加板级文件夹

每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等等。这边我们参照 board/freescale/mx6ullevk 文件夹下的内容:

  • $ cp -R mx6ullevk/ mx6ull_my_emmc

接着修改一下源文件的名字:

  • $ mv mx6ullevk.c mx6ull_my_emmc.c

因为修改了源文件的名称,所以还需要修改当前目录下的 Makefile 文件,这样才能编译 mx6ull_my_emmc.c

>board/freescale/mx6ull_my_emmc/Makefile
  1. # (C) Copyright 2015 Freescale Semiconductor, Inc.
  2. #
  3. # SPDX-License-Identifier:  GPL-2.0+
  4. #
  5.  
  6. obj-y  := mx6ull_my_emmc.o

接着还需要修改当前目录下的 imximage.cfg 文件,以使用当前目录下的 bin 文件:

board/freescale/mx6ull_my_emmc/imximage.cfg
  1. PLUGIN  board/freescale/mx6ull_my_emmc/plugin.bin 0x00907000

目录中的 Kconfig 文件也需要修改,特别注意 if 判断里面的值不要忘了修改:

board/freescale/mx6ull_my_emmc/Kconfig
  1. if TARGET_MX6ULL_MY_EMMC
  2.  
  3. config SYS_BOARD
  4.     default "mx6ull_my_emmc"
  5.  
  6. config SYS_VENDOR
  7.     default "freescale"
  8.  
  9. config SYS_CONFIG_NAME
  10.     default "mx6ull_my_emmc"
  11.  
  12. endif

最后需要修改的是目录下的 MAINTAINERS 文件,修改的内容如下,原先文件中指定了两个 defconfig 文件,此处改成了一个:

board/freescale/mx6ull_my_emmc/MAINTAINERS
  1. MX6ULLEVK BOARD
  2. M:  Peng Fan <peng.fan@nxp.com>
  3. S:  Maintained
  4. F:  board/freescale/mx6ull_my_emmc/
  5. F:  include/configs/mx6ull_my_emmc.h
  6. F:  configs/mx6ull_my_emmc_defconfig

1.4 修改 u-boot 图形界面配置文件

u-boot 支持图像界面配置,所以这边也需要修改相应的文件,对应的文件为 arch/arm/cpu/armv7/mx6/Kconfig

相应的修改如下,首先添加相应的 config 项,接着添加 source 项:

arch/arm/cpu/armv7/mx6/Kconfig
  1. config TARGET_MX6ULL_MY_EMMC
  2.     bool "Support mx6ull_my_emmc_evk"
  3.     select MX6ULL
  4.     select DM
  5.     select DM_THERMAL
  6. ……
  7. source "board/freescale/mx6ull_my_emmc/Kconfig"

2. 编译和验证

编译步骤和原先一样,只是变为指定刚才添加的默认配置文件:

  • $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
  • $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_my_emmc_defconfig
  • $ make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

编译完成后,我们可以在 board/freescale/mx6ull_my_emmc 目录下看一下,是否有 .o 文件生成;还需要整体搜索一下项目,看是否有大量文件引用 mx6ull_my_emmc.h 文件。如果以上都满足,就可以基本判断当前阶段的移植工作成功了。

接下来可以将 u-boot 烧写进 SD 卡,开发板启动 u-boot 再次确认一下(SD 启动,拨码开关对应 10000010):

  • $ imxdownload u-boot.bin /dev/sdb

启动后,u-boot 控制台打印的信息如图 1 所示,可以从中核对编译的时间。同时从打印的信息中可以看到,当前 u-boot 的屏幕和网络还没有移植好,这两点移植工作将在之后的文章中进行记录。

图1 u-boot 控制台打印信息