专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
TQ2440 学习笔记—— 28、移植U-Boot【U-Boot 的配置过程】
2019-07-13 01:16
发布
生成海报
站内文章
/
嵌入式Linux
12338
0
1283
(韦东山——嵌入式Linux 应用开发完全手册)
1、U-Boot 工程简介
U-Boot ,全称为Universal Boot loader, 即通用Bootloader。 它的名字有两重含义:可以引导多种操作系统:Linux、NetBSD、VxWorks0、QNX、RTEMS、ARTOS、Lynx等;
支持多种架构的CPU :PowerPC、MIPS、x86、ARM、NIOS、XScale等。
具有如下特性:
2、U-Boot 源码结构
在 U-Boot-1.1.6 的基础上分析和移植,从sourceforge 网站下载U-Boot-1.1.6.tar.bz2 后解压即可得全部源码。 U-Boot-1.1.6 根目录下共有26个子目录,可以分为4类:
a、平台相关的或开发板相关的。 b、通用的函数。 c、通用的设别驱动程序。 d、U-Boot 工具、示例程序、文档。 U-Boot 顶层目录说明
U-Boot 中各目录的层次结构,分法不绝对,为移植提供指导意义。
3、U-Boot 的配置过程(按照韦东山老师对TQ2440进行更改)
要想了解对于某款开发板,使用哪些文件、哪个文件首先执行、可执行文件占用内存等情况,最好的方法就是阅读它的Makefile。 根据顶层Readme 文件的说明,可以知道如果要使用开发板 board /
,就先执行 “ make
_config”命令进行配置,然后执行 “ make all ”。
U-Boot 的配置过程
在顶层Makefile 中可以看到如下代码
上面的smdk2410是原来的,下面是新增了一个EmbedSky 的。 假定在U-Boot-1.1.6的根目录下编译,则其中的MKCONFIG 就是根目录下的mkconfig文件。 $(@:_config=) 的结果就是将"EmbedSky_config “ 中的” _config “去掉,结果为 ”EmbedSky“;所以” make EmbedSky_config “ 实际上就是执行如下命令:
./mkconfig EmbedSky arm arm920t EmbedSky NULL s3c24x0
mkconfig 的作用,文件中有说明:
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
解释:对于S3C2440,被称为SoC, 上面除CPU 外,还集成了包括UART、USB 控制器、NAND Flash 控制器等设备(称为片上外设)。S3C2440 中的CPU 为ARM920T。
下面分析mkconfig 的作用:
(1)确定开发板名称 BOARD_NAME,相关代码如下:
对于” ./mkconfig EmbedSky arm arm920t EmbedSky NULL s3c24x0 “命令, 其中没有”--“、”-a“、”-n“等符号,所以第11~22行没做任何事情(它的作用就是分析上面命令的参数)。第11、12 行两个变量仍维持原来的值。
执行完23 行后,BOARD_NAME 的值等于第一个参数,即EmbedSky。
(2)创建到平台/开发板相关的头文件的链接
略过mkconfig 文件中的一些没有起作用的行,如下图所示:
第33行判断源代码目录和目标文件目录是否一样,可以选择在其他目录下编译U-Boot,这可以令源代码目录保持干净,可以同时使用不同的配置进行编译。
OBJTREE
:= $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
如果定义了BUILD_DIR,那就讲BUILD_DIR的值赋值给OBJTREE,否则将CURDIR复制给OBJTREE。
我们通过71可以看到BUILD_DIR是没有定义的。故SRCTREE和OBJTREE相等,不符合执行else 语句分支的代码。
第46~48行进入include 目录,删除 asm 文件(这是上一次配置时建立的链接文件),然后再建立asm 文件,并令它链接 向asm-$2 目录,即asm-asm。
继续代码
第51 行删除 asm-$2/arch 目录,即asm-asm/arch 目录。 对于” ./mkconfig EmbedSky arm arm920t EmbedSky NULL s3c24x0 “命令,$6 为 ”s3c24x0“,不为空,也不是“NULL”,所以第53行的条件不满足,将执行else 分支。 第56行中LNPREFIX 为空,所以这个命令实际上就是“ln -s arch-$6 asm-$2/arch”,即“ln -s arch-$6 asm-asm/arch”。 第60、61行重新建立asm-asm/proc 文件,并让它链接向proc-armv目录。
(3)创建顶层Makefile 包含的文件 include/config.mk,如下图所示:
对于” ./mkconfig EmbedSky arm arm920t EmbedSky NULL s3c24x0 “命令,上面的几行代码创建的config.mk 文件内容如下:
(4)创建开发板相关的头文件 include/config.h,如下图所示:
APPEND 维持原值 ”no“,所以config.h被重新建立,它的内容如下:
总结:配置命令”make EmbedSky_config“,实际的作用就是执行 ” ./mkconfig EmbedSky arm arm920t EmbedSky NULL s3c24x0 “命令。假设执行” ./mkconfig $1 $2 $3 $4 $5 $6 “命令,则产生如下结果。
(1)开发的名称BOARD_NAME 等于$1。 (2)创建到平台/开发板相关的头文件的链接,如下图所示:
(3)创建顶层Makefile 包含的文件include/config.mk,如下图所示:
(4)创建开发板相关的头文件include/config.h,如下图所示:
从这4个结果可以知道,如果要在board 目录下新建一个开发板
的目录,则在include/config 目录下也要建立一个文件
.h, 里面存放的就是开发板
的配置信息。如下是TQ2440 板子的两个文件。
配置文件可以根据已有的一些开发为模板进行更改。
U-Boot 还没有类似Linux 一样的可视化配置界面(比如使用make menuconfig 来配置),要手动 修改配置文件include/config
.h 来裁剪、设置U-Boot。
配置文件中有以下两类宏: (1)一类是选项,前缀为”CONFIG_“,它们用于选择CPU、SOC、开发板类型、设置系统时钟、选择设备驱动等。比如:
(2)另一类是参数,前缀为“CFG_”,它们用于设置 malloc 缓冲池的大小、U-Boot 的提示符、U-Boot 下载文件时的默认加载地址、Flash 的起始地址等。比如:
”CONFIG_“ 除了设置一些参数外,主要用来设置U-Boot 的功能、选择使用文件中的哪一部分;而“CFG_”用来设置更细节的参数。
Ta的文章
更多
>>
TQ2440 学习笔记—— 28、移植U-Boot【U-Boot 的配置过程】
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮