uboot源码——主Makefile的分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考博客:u-boot Makefile完全解读_williamwang2013的博客-CSDN博客

参考博客:U-boot主Makefile分析_XiaoBaWu的博客-CSDN博客

参考博客:U-boot配置及编译阶段流程宏观分析_XiaoBaWu的博客-CSDN博客

uboot来源于官方(uboot官网下载),或者SoC官方(研发s5pv210芯片的公司推出的开发板,SMDKV210),或者具体的开发板的官方(深圳市九鼎科技,X210)。

uboot根目录下主要文件有:/mkconfig,主Makefile,前者负责uboot的编译,后者负责编译。主要文件夹有:/board,/cpu,/common、/include等,board文件夹中每个子文件夹表示一个开发板,cpu文件夹中每个子文件夹都是一个SoC系列。

x210开发板的uboot的配置与编译步骤。

将源码解压在适当的目录下;

配置,即在uboot的根目录下执行“make  x210_sd_config”;

编译,即在uboot的根目录下执行“make”(或者“make -j2”,或者“make -s”,前者多线程编译,后者静默编译)。

整个配置与编译细节流程如下。

1、对配置行为进行分析

之所以要进行配置,是要确定所使用的文件夹、文件的路径。我们在在uboot的根目录下执行“make  x210_sd_config”时,x210_sd_config是目标,在主Makefile中2589行有如下代码。

x210_sd_config :	unconfig@$(MKCONFIG)   $(@:_config=)  arm  s5pc11x  x210  samsung  s5pc110@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk

该目标调用MKCONFIG所表示的脚本,即uboot根目录下的mkconfig脚本该脚本接收6个参数,分别是x210_sd,arm,s5pc11x,x210,samsung,s5pc110;$(@:_config=)表示匹配后面带有_config的参数,并取除去_config的部分,即取x210_sd。

在mkconfig脚本中,创建了一些符号链接,创建了include/config.mk文件(注意这里的config.mk不是根目录下的config.mk文件),创建了include/config.h文件。

其中,创建include/config.mk文件是为了让主Makefile在第133行包含。

# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export	ARCH CPU BOARD VENDOR SOC

而include/config.h文件中,仅有一行代码,即“#include<configs/x210_sd.h>”。

/* Automatically generated - do not edit */
#include <configs/x210_sd.h>

在进行配置前,configs文件夹就已经在include文件夹里面。configs文件夹里面的每个文件对应一个开发板的头文件,这些头文件都是一些宏定义配置文件,是移植时最主要的文件。

xjh@ubuntu:~/iot/embedded_basic_course/uboot/uboot_jiuding/include/configs# ls
x210_nand.h  x210_sd.h
xjh@ubuntu:~/iot/embedded_basic_course/uboot/uboot_jiuding/include/configs# 

从上面可以看出,sd表示inand。x210_sd.h文件被用来生成autoconfig.mk文件,后者又被主Makefile引入,指导整个编译过程。x210_sd.h文件中的宏会影响uboot中的大部分.C文件中的一些条件编译的选择,从而实现最终的可移植性。

2、对uboot主目录下的Makefile文件进行分析

(1)uboot的版本号。(24~29行)

VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h

(2)确定主机信息然后导出,“export   HOSTARCH  HOSTOS”。

HOSTARCH、HOSTOS分别表示主机的CPU架构和操作系统。

(3)实现静默编译。指令“make -s”,其中-s表示参数。(50~54行)

(4)两种编译管理方法。(78~123行)

原地编译,即编译得到的文件和源文件在同一个目录下,简单但是会污染源目录;单独文件夹输出的编译,即设置一个输出目录,承载编译输出结果。uboot默认原地编译。我们可以指定具体的输出目录:编译时用“make O=输出目录”;或者先“export BUILD_DIR=输出目录”,然后编译时直接make。

(5)OBJTREE,SRCTREE,TOPDIR。

它们分别表示编译后,.o文件存放的目录的根目录,源码目录的根目录,顶层目录。原地编译时,前者和中者目录是相等的。

(6)MKCONFIG。(101行)

它是Makefile中定义的一个变量,值为源码根目录下的mkconfig,而mkconfig是一个脚本。

(7)“include $(obj)include/config.mk”。(133行)

include/config.mk文件是在配置阶段生成的, 此文件的内容如下。

ARCH   = arm
CPU    = s5pc11x
BOARD  = x210
VENDOR = samsung
SOC    = s5pc110

这些配置项的配置值,来自主Makefile第2589行的配置项里的传参。

x210_sd_config :	unconfig@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk

在主Makefile中的134行将这些变量export出来作为环境变量。

export	ARCH CPU BOARD VENDOR SOC

(8)ARCH、CROSS_COMPILE。(136~182行)

这两个是环境变量,ARCH定义为当前编译的目标的CPU架构,在这里是ARM;CROSS_COMPILE定义交叉编译工具的前缀;

3、对uboot主目录下的config.mk文件进行分析

(9)“include $(TOPDIR)/config.mk”。(主Makefile中的185行)

注意这是根目录下的config.mk文件,不是include/config.mk。

(10)编译工具定义。(根目录下的config.mk中的94~107行)

AS	= $(CROSS_COMPILE)as
LD	= $(CROSS_COMPILE)ld
CC	= $(CROSS_COMPILE)gcc
CPP	= $(CC) -E
AR	= $(CROSS_COMPILE)ar
NM	= $(CROSS_COMPILE)nm
LDR	= $(CROSS_COMPILE)ldr
STRIP	= $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
RANLIB	= $(CROSS_COMPILE)RANLIB

(11)包含开发板配置项目。(根目录下的config.mk中的112行)

# Load generated board configuration
sinclude $(OBJTREE)/include/autoconf.mk

autoconf.mk是在配置中自动生成的,它是一些宏,指导编译进行方向。它的配置原料是include/configs/x210_sb.h,include/configs下的每个头文件对应一个开发板。

(12)链接脚本。(在根目录下的config.mk中的142~149行)

如果定义了CONFIG_NAND_U_BOOT,则链接脚本是u-boot-nand.lds,没有定义则链接脚本为u-boot.lds。u-boot.lds这个脚本位于board\samsung\x210下。

uboot的最终链接地址是在Makefile中用-Ttext xxxx的形式来指定,好像和链接链接脚本没有多大的关联?

(13)TEXT_BASE。(在根目录下的config.mk中的156~158行)

为整个uboot链接时指定链接地址。

(14)自动推导规则。(在根目录下的config.mk中的239~256行)

(15)整个Makefile的第一个目标ALL。(在主Makefile中第291行)

其实我们make时,就是make ALL。

综上所述,整个配置和编译过程涉及的文件主要有:主目录下的Makefile文件、根目录下的config.mk文件(被主Makefile文件调用),根目录下的mkconfig文件(配置阶段的配置脚本)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Designing Virtual Connect for vSphere 5.x

Designing Virtual Connect for vSphere 5.x如何在 HP C7000刀笼使用VC以满足vSphere 5.x 英文视频连接如下&#xff1a;http://professionalvmware.com/2013/05/vbrownbag-follow-up-designing-virtual-connect-for-vsphere-with-joe-clark-elgwhoppo/1&#xff1a;首先介绍一…

VMware vCenter Converter 关闭SSL加密,提高35-40%性能

VMware vCenter Converter 关闭SSL加密,提高35-40%性能原文&#xff1a;http://www.vmwarearena.com/2013/07/improving-transfer-rate-of-p2v-and-v2v.htmlVMware vCenter Converter Standalone 5.0 is a free tool from VMware to easily perform P2V(Physical to virtual co…

图像拼接算法及实现

第一章 绪论 1.1 图像拼接技术的研究背景及研究意义 图像拼接(image mosaic)是一个日益流行的研究领域&#xff0c;他已经成为照相绘图学、计算机视觉、图像处理和计算机图形学研究中的热点。图像拼接解决的问题一般式&#xff0c;通过对齐一系列空间重叠的图像&#xff0c;构…

程序员,你还在 Select * 吗?

应用程序慢如牛&#xff0c;原因多多&#xff0c;可能是网络的原因、可能是系统架构的原因&#xff0c;还有可能是数据库的原因。 那么如何提高数据库SQL语句执行速度呢&#xff1f;有人会说性能调优是数据库管理员&#xff08;DBA&#xff09;的事&#xff0c;然而性能调优跟程…

学习笔记-记ActiveMQ学习摘录与心得(二)

上个周末被我玩过去了&#xff0c;罪过罪过&#xff0c;现在又是一个工作日过去啦&#xff0c;居然有些烦躁&#xff0c;估计这几天看的东西有点杂&#xff0c;晚上坐下来把自己首要工作任务总结总结。上篇学习博客讲了ActiveMQ的特性及安装部署&#xff0c;下面先把我以前启动…

谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)

C#支持单继承&#xff0c;说到继承就不得不说new&#xff0c;virtual和override这三个关键词&#xff0c;灵活正确的使用这三个关键词&#xff0c;可以使程序结构更加清晰&#xff0c;代码重用性更高。 以下是msdn中对new&#xff0c;virtual和override的定义&#xff1a; …

unsigned char s1 : 2的用法

#include<stdio.h> #include<stdlib.h> //默认按照四字节对齐 //#pragma pack(1) union V {struct X{unsigned char s1 : 2;unsigned char s2 : 3;unsigned char s3 : 3;} x;unsigned char c; } v; //#pragma pack()int main(void) {v.c 100;//对应的二进制数字是…

juc线程池原理(六):jdk线程池中的设计模式

一、jdk中默认线程池中的代理模式 单例类线程池只有一个线程&#xff0c;无边界队列&#xff0c;适合cpu密集的运算。jdk中创建线程池是通过Executors类中提供的静态的方法来创建的&#xff0c;其中的单例类线程池的方法如下&#xff1a; public static ExecutorService newSin…

Code First :使用Entity. Framework编程(6) ----转发 收藏

Chapter6 Controlling Database Location,Creation Process, and Seed Data 第6章 控制数据库位置&#xff0c;创建过程和种子数据 In previous chapters you have seen how convention and configuration can be used to affect the model and the resulting database schema.…

计算多个文档之间的文本相似程度

首先我们上代码&#xff1a; from sklearn.feature_extraction.text import CountVectorizer corpus [ UNC played Duke in basketball, Duke lost the basketball game, I ate a sandwich ] vectorizer CountVectorizer(binaryTrue,stop_wordsenglish)#设置停用词为英语&…

双边滤波

双边滤波 高斯滤波是最常用的图像去噪方法之一&#xff0c;它能很好地滤除掉图像中随机出现的高斯噪声&#xff0c;但是在之前的博客中提到过&#xff0c;高斯滤波是一种低通滤波&#xff08;有兴趣的点击这里&#xff0c;查看之前的博客&#xff09;&#xff0c;它在滤除图像中…

用SQL语句更改数据库名,表名,列名

参考SQL Server联机丛书的 sp_renamedb与sp_rename一、更改数据库名sp_renamedb更改数据库的名称。语法sp_renamedb [ dbname ] old_name ,[ newname ] new_name 参数[ dbname ] old_name 是数据库的当前名称。old_name 为 sysname 类型&#xff0c;无默认值…

Gabor滤波器原理

一、什么是Gabor函数&#xff08;以下内容含部分翻译自维基百科&#xff09; 在图像处理中&#xff0c;Gabor函数是一个用于边缘提取的线性滤波器。Gabor滤波器的频率和方向表达同人类视觉系统类似。研究发现&#xff0c;Gabor滤波器十分适合纹理表达和分离。在空间域中&#x…

Linux中的MAN命令

学习Linux的同学&#xff0c;都会使用man来查阅一些命令的帮助信息&#xff0c;常见的使用方法就是“man 命令名称”这样简单的格式。本文就对man命令简要介绍一下。 l man命令的章节 man就是manual的缩写&#xff0c;用来查看系统中自带的各种参考手册&#xff0c;但是手册页分…

全局曝光和卷帘曝光的区别

全局曝光和卷帘曝光是常见的相机曝光方式。一般来说&#xff0c;CCD相机是全局曝光&#xff0c;而CMOS相机则存在卷帘曝光。那么&#xff0c;这两种方式孰优孰劣呢&#xff1f;或者说&#xff0c;他们两者的差别在哪里呢&#xff1f;那么&#xff0c;先从两者的定义说起。 全局…

Titanium 列表显示TableView

效果&#xff1a; Titanium中列表显示需要创建TableView var tableView Ti.UI.createTableView({style: Ti.UI.iPhone.TableViewCellSelectionStyle.NONE //TableView样式}); TableView的每一个行叫做TableViewRow 设置TableViewRow的hasChild为true便可显示这样的效果&#x…

discuz x2.5插件开发傻瓜图文教程,用demo说话

2019独角兽企业重金招聘Python工程师标准>>> 刚刚接触DZ的插件开发&#xff0c;记个傻瓜图文教程&#xff0c;一是分享给初学者&#xff0c;二是方便自己以后回忆。 本篇文章适合人群&#xff1a;有一定的PHP开发经验&#xff0c;想通过一个简单明了的demo快速了解…

uva 11174(排列组合+搜索)

依然是liurujia计数练习题。依然是自己想没想出来&#xff0c;在MOD是素数的情况下除以x即为乘x的逆。这个真心以前没听过&#xff0c;用了这个方法后处理就变得十分巧妙。 整个程序步骤还是很清晰的&#xff0c;先上来算阶乘与逆&#xff08;求数的逆还是有点没理解透&#xf…

S5PV210的地址映射简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 S5PV210属于ARM Cortex-A8架构&#xff0c;是32位的CPU&#xff0c;有32根地址线和32根数据线。 这表明该CPU的寻址空间为4G&#xff0c;地址映射关系见下述。 S5PV210的地址映射 S5PV210的地址映射…

树莓派(Raspberry Pi):完美的家用服务器

出处&#xff1a;http://linux.cn/thread/11884/1/1/ 树莓派&#xff08;Raspberry Pi&#xff09;&#xff1a;完美的家用服务器 自从树莓派发布后&#xff0c;所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒&#xff0c;但…