验证编译环境
从网上下载U-BOOT程序并解压到任意目录下。加载到U-BOOT根文件目录,输入
make smdk2410_config
因为U-BOOT对许多单板都做了支持,这个指令表示我们使用的是smk2410单板。
当显现如下时,表示配置成功。
接着我们输入
make
发现跳出一大堆错误信息,经过查找发现是不知道从什么版本开始,U-BOOT就不在指定编译器,需要我们手动指定。这里有两个方法:
- 在输入make指令之前先输入
make ARCH=arm CROSS_COMPILE=arm-linux-
- 修改U-BOOT根目录下的Makefile文件
打开U-BOOT根目录下的Makefile文件248行左右,在endif后面加上一句
CROSS_COMPILE=arm-linux-
如下所示:
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
CROSS_COMPILE=arm-linux-
KCONFIG_CONFIG ?= .config
export KCONFIG_CONFIG
最后保存退出,再make一次。
发现bin文件成功生成,说明我们用的编译环境没有问题。
创建一个新的单板
因为U-BOOT 2016.11支持S3C2410,所以我们只要复制一份,对其中的一些配置进行修改就可以让U-BOOT支持我们现在用的S3C2440单板。
1.创建单板目录
直接复制 board/samsung/ 目录下的smdk2410文件夹到当前目录,并重命名为smdk2440。
但是复制过来的肯定是不能直接用的,接着看smdk2440文件夹下的有哪些文件
首先我们把smdk2410.c重命名为smdk2440.c。
既然文件名改了,那么对应的Makefile肯定也要改,修改后如下
#
# (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
接着我们打开MAINTAINERS文件,“maintainer“”按字面意思翻译过来是“维修者”,但是看内容应该是告诉编译器一些头文件和配置文件的路径,修改后如下
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
首先第4行应该是说明SMDK2440单板的路径是board/samsung/smdk2440/,这个没有问题,我们就是在这个目录下创建单板的。接着看第5行,应该是smdk2440头文件的路径,我们切过去看一下,发现没有这个文件,说明到时候需要我们自己添加。接着看第6行,应该是smdk2440配置文件的路径,切过去看,也没有这个文件,需要我们自己添加。
最后我们打开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
这个Kconfig文件的意思,是如果定义了TARGET_SMDK2440,即我们的目标是让U-BOOT支持S3C2440,那么配置系统单板为smdk2440,芯片厂家为samsung,SOC(片上系统)为s3c24x0,系统或单板名字为smdk2440。
这样我们smdk2440单板目录下的文件就暂时都修改好了,但是我们发现少了 include/configs/smdk2440.h和configs/smdk2440_defconfig两个文件,以及一个TARGET_SMDK2440宏,所以我们下一步就要去解决这几个问题。
首先解决文件问题,因为有可能TARGET_SMDK2440宏就定义在这两个文件中。
我们先看U-BOOT原本就有的include/configs/smdk2410.h文件,发现里面定义了很多宏,其中一些宏用来说明地址,一些宏用来控制编译器编译哪些文件,从而裁剪U-BOOT的I2C,USB,SPI等功能。这里我们先不修改,直接把smdk2410.h复制到当前文件夹,并重命名为smdk2440.h。
接着看configs/smdk2410_defconfig,应该也是一些配置,我们复制重命名为smdk2440_defconfig后,修改如下
CONFIG_ARM=y
CONFIG_TARGET_SMDK2440=y
CONFIG_BOOTDELAY=5
# CONFIG_SYS_STDIO_DEREGISTER is not set
# CONFIG_DISPLAY_BOARDINFO is not set
CONFIG_HUSH_PARSER=y
CONFIG_SYS_PROMPT="SMDK2440 # "
CONFIG_CMD_USB=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_FAT=y
CONFIG_CMD_UBI=y
CONFIG_USB=y
CONFIG_USB_STORAGE=y
CONFIG_USB_KEYBOARD=y
发现U-BOOT原本的两个文件中都没有找到TARGET_SMDK2410这个宏,所以我们要用到Linux的查找功能。输入
grep -rn "TARGET_SMDK2410" ~/work/project/u-boot-2016.11/
这里r表示递归查找,n表示显示在文件中的行数,TARGET_SMDK2410要查找的关键词,~/work/project/u-boot-2016.11/表示我的查找文件夹,大家根据自己的实际情况修改。
查找结束后一共有3个匹配项,只有最后一个完全匹配,所以我们打开arch/arm/Kconfig文件,在后面添加一个config选项,如图:
接着我们回到根文件夹,试着配置编译一下,发现出现问题。
经过网上查找发现应该要在arch/arm/Kconfig的998行后面加上一句
source "board/samsung/smdk2440/Kconfig"
最后如图:
接着我们再回到根文件夹,输入
make smdk2440_config
make
u-boot.bin文件成功生成,这样我们一个单板就创建完成了。
下面附上补丁文件链接:
链接:https://pan.baidu.com/s/1v85_5VApVgmMG9IXrwgCiQ
提取码:bb6y