u-boot 移植(二)创建新平台的板级支持
soc
:s3c2440
board
:jz2440
uboot
:u-boot-2016.11
toolchain
:gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi
文章目录
如何添加新的板级支持?
因为u-boot-2016.11
默认支持smdk2410的平台,但是没有对smdk2440的支持,所以在这里我打算在源码中添加相应的文件;实践之后,总结了一下大概需要修改这几个地方,简单列举如下:
- 复制
board/samsung/smdk2410
路径下的所有文件,保存在board/samsung/smdk2440/
中,然后需要对复制的文件做相应的修改; - 修改相应的
Kconfig
,使得make menuconfig
可以支持smdk2440
; - 复制
include/configs/
下的smdk2410.h
,创建文件smdk2440.h
; - 修改
board/samsung/smdk2440/
的MAINTAINERS
文件; - 修改
scripts/config_whitelist.txt
文件,添加相应的CONFIG_
选项,防止编译报错;
步骤
1.创建板级支持
我们先复制smdk2410
的所有文件到smdk2440
下;
cd board/samsung/
cp -rf smdk2410 smdk2440
将smdk2440
路径下的smdk2410.c
文件重命名为smdk2440.c
;
然后修改该路径下的Kconfig
和Makefile
;
Kconfig
内容修改如下:
if TARGET_SMDK2440
config SYS_BOARD
default "smdk2440"
config SYS_VENDOR
default "samsung"
config SYS_SOC
default "s3c24x0"
config SYS_CONFIG_NAME
default "smdk2440"
endif
Makefiel
修改后内容如下:
#
# (C) Copyright 2000-2006
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
#
# SPDX-License-Identifier: GPL-2.0+
#
obj-y := smdk2440.o
obj-y += lowlevel_init.o
2.修改Kconfig
修改/arch/arm/Kconfig
文件;具体如下所示;
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -145,6 +145,10 @@ config TARGET_SMDK2410
bool "Support smdk2410"
select CPU_ARM920T
+config TARGET_SMDK2440
+ bool "Support smdk2440"
+ select CPU_ARM920T
+
config TARGET_ASPENITE
bool "Support aspenite"
select CPU_ARM926EJS
@@ -992,6 +996,7 @@ source "board/phytec/pcm051/Kconfig"
source "board/phytec/pcm052/Kconfig"
source "board/ppcag/bg0900/Kconfig"
source "board/samsung/smdk2410/Kconfig"
+source "board/samsung/smdk2440/Kconfig"
source "board/sandisk/sansa_fuze_plus/Kconfig"
source "board/schulercontrol/sc_sps_1/Kconfig"
source "board/siemens/draco/Kconfig"
修改完成之后,执行make menuconfig
可以在配置界面看到smdk2440的支持选项;具体如下图所示;
3.修改smdk2440.h
复制include/configs/
下的smdk2410.h
,创建文件smdk2440.h
;
cd include/configs/
cp smdk2410.h smdk2440.h
vi smdk2440.h
修改smdk2440.h,修改原来几个2410
的宏定义为2440
,具体内容如下;
#ifndef __CONFIG_H
#define __CONFIG_H
/*
* High Level Configuration Options
* (easy to change)
*/
#define CONFIG_S3C24X0 /* This is a SAMSUNG S3C24x0-type SoC */
#define CONFIG_S3C2440 /* specifically a SAMSUNG S3C2440 SoC */
#define CONFIG_SMDK2440 /* on a SAMSUNG SMDK2440 Board */
4.修改MAINTAINERS
再次进入板级路径下board/samsung/smdk2440/
,修改MAINTAINERS
文件;
SMDK2440 BOARD
M: David Müller <d.mueller@elsoft.ch>
S: Maintained
F: board/samsung/smdk2440/
F: include/configs/smdk2440.h
F: configs/smdk2440_defconfig
以前u-boot
版本添加新的板级支持需要在boards.cfg
文件中增加新的板级信息,当前版本已经通过修改MAINTAINERS
文件来支持这样的操作,在源码根路径一下也可以找到这个文件,会介绍每个语法的含义。
5.修改config_whitelist.txt
最后还需要修改config_whitelist.txt
文件,因为在smdk2440.h
中添加了CONFIG_SMDK2440
,所以,要把这个宏定义添加到config_whitelist.txt
文件中,这样最终编译的时候不会报错;
make xxxx_defconfig 都做了哪些事情?
按照原来系统中我们执行了make smdk2440_defconfig
之后,会自动生成一个头文件include/config.h
,打开看一下会发现,其中包含了头文件configs/smdk2440.h
,所以smdk2440.h
需要我们手动复制过来;
* Automatically generated - do not edit */
#define CONFIG_BOARDDIR board/samsung/smdk2440
#include <config_defaults.h>
#include <config_uncmd_spl.h>
#include <configs/smdk2440.h>
#include <asm/config.h>
#include <config_fallbacks.h>
最终执行脚本mk.sh
,进行编译,具体在上一篇中有提到;
#!/bin/bash
TOOLCHAIN=/opt/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin
export ARCH=arm
export PATH=$TOOLCHAIN:$PATH
export CROSS_COMPILE=arm-linux-gnueabi-
make smdk2440_defconfig
make -j4
安静地等待编译结束,至此,已经添加smdk2440
的板级支持文件成功;