[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 行的相关名称进行了更改:
- CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_my_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
- CONFIG_ARM=y
- CONFIG_ARCH_MX6=y
- CONFIG_TARGET_MX6ULL_MY_EMMC=y
- CONFIG_CMD_GPIO=y
1.2 添加开发板对应的头文件
开发板对应的头文件里有许多对 u-boot 配置的定义,这边参照 include/configs/mx6ullevk.h 文件:
- $ cp mx6ullevk.h mx6ull_my_emmc.h
文件里的内容众多,先只修改顶部宏定义:
- #ifndef __MX6ULL_MY_EMMC_CONFIG_H
- #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 :
- # (C) Copyright 2015 Freescale Semiconductor, Inc.
- #
- # SPDX-License-Identifier: GPL-2.0+
- #
- obj-y := mx6ull_my_emmc.o
接着还需要修改当前目录下的 imximage.cfg 文件,以使用当前目录下的 bin 文件:
- PLUGIN board/freescale/mx6ull_my_emmc/plugin.bin 0x00907000
目录中的 Kconfig 文件也需要修改,特别注意 if 判断里面的值不要忘了修改:
- if TARGET_MX6ULL_MY_EMMC
- config SYS_BOARD
- default "mx6ull_my_emmc"
- config SYS_VENDOR
- default "freescale"
- config SYS_CONFIG_NAME
- default "mx6ull_my_emmc"
- endif
最后需要修改的是目录下的 MAINTAINERS 文件,修改的内容如下,原先文件中指定了两个 defconfig 文件,此处改成了一个:
- MX6ULLEVK BOARD
- M: Peng Fan <peng.fan@nxp.com>
- S: Maintained
- F: board/freescale/mx6ull_my_emmc/
- F: include/configs/mx6ull_my_emmc.h
- F: configs/mx6ull_my_emmc_defconfig
1.4 修改 u-boot 图形界面配置文件
u-boot 支持图像界面配置,所以这边也需要修改相应的文件,对应的文件为 arch/arm/cpu/armv7/mx6/Kconfig。
相应的修改如下,首先添加相应的 config 项,接着添加 source 项:
- config TARGET_MX6ULL_MY_EMMC
- bool "Support mx6ull_my_emmc_evk"
- select MX6ULL
- select DM
- select DM_THERMAL
- ……
- 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 的屏幕和网络还没有移植好,这两点移植工作将在之后的文章中进行记录。
