linux:make 参数 ARCH与CROSS

发布时间:2024-12-25 15:40

'cross-cultural communication'强调文化适应性 #生活技巧# #职场沟通技巧# #商务英语#

嵌入式linux: make 参数 ARCH与CROSS_COMPILE 解读

转自:https://blog.csdn.net/zydlyq/article/details/50997582?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase

经常看到make 命令带一些参数,例如海思编译内核时使用命令

make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

这时什么意思呢?

ARCH
即architecture,就是选择编译哪一种cpu architecture,也就是编译arch/目录下的哪一个子目录。如指定make ARCH=arm就是编译arch/arm下的代码。如果不指定,make将使用本机(用什么机器编译就是什么)的cpu作为缺省ARCH.注意:arch/arm下不但有arm体系架构特有的代码,还有arm特有的kconfig,也就是配置选项,所以在make menuconfig,make xxxx_defconfig的时候也必须指定ARCH=arm。

CROSS_COMPILE

即交叉编译器的前缀(prefix),也就是选择将代码编译成目标cpu的指令的工具,如指定make CROSS_COMPILE=arm-none-linux-gnueabi-就是使用arm-none-linux-gnueabi-gcc, arm-none-linux-gnueabi-ld等工具将代码编译成arm的可执行指令。如果不指定CROSS_COMPILE参数,make时将认为prefix为空,即使用gcc来编译。这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。

在配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。这是最最基础的信息,首先要确定的。

如果你是为当前使用的PC机编译内核,则无须设置。

否则的话,就要明确设置。

这里以arm为例,来说明。

有两种设置方法():

a) 修改Makefile

打开内核源码根目录下的Makefile,修改如下两个Makefile变量并保存。

ARCH := arm
CROSS_COMPILE := arm-linux-

注意,这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。

b) 每次执行make命令时,都通过命令行参数传入这些信息。

这其实是通过make工具的命令行参数指定变量的值。

例如

配置内核时时,使用

make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

编译内核时使用

make ARCH=arm CROSS_COMPILE=arm-linux-

注意,实际上,对于编译PC机内核的情况,虽然用户没有明确设置,但并不是这两项没有配置。因为如果用户没有设置这两项,内核源码顶层Makefile(位于源码根目录下)会通过如下方式生成这两个变量的值。

SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/
-e s/arm./arm/ -e s/sa110/arm/
-e s/s390x/s390/ -e s/parisc64/parisc/
-e s/ppc./powerpc/ -e s/mips./mips/
-e s/sh[234]./sh/ )

ARCH?= $(SUBARCH)
CROSS_COMPILE ?=

经过上面的代码,ARCH变成了PC编译机的arch,即SUBARCH。因此,如果PC机上uname -m输出的是ix86,则ARCH的值就成了i386。

而CROSS_COMPILE的值,如果没配置,则为空字符串。这样一来所使用的工具链程序的名称,就不再有类似arm-linux-这样的前缀,就相当于使用了PC机上的gcc。

最后再多说两句,ARCH的值还需要再进一步做泛化。因为内核源码的arch目录下,不存在i386这个目录,也没有sparc64这样的目录。

因此顶层makefile中又构造了一个SRCARCH变量,通过如下代码,生成他的值。这样一来,SRCARCH变量,才最终匹配到内核源码arch目录中的某一个架构名。

SRCARCH := $(ARCH)

ifeq ($(ARCH),i386)
SRCARCH := x86
endif

ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif

ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif

ifeq ($(ARCH),sh64)
SRCARCH := sh
endif

网址:linux:make 参数 ARCH与CROSS https://www.yuejiaxmz.com/news/view/563457

相关内容

巧用CSS cross
运动更安全 长城精灵CROSS上市
bad value (‘armv5’) for ‘
新款丰田卡罗拉Cross首发,外观进行了升级,三种版本可选
在线学习(online learning)的总结本文已参与「新人创作礼」活动,一起开启掘金创作之路。 1、什么是在线学习
吉利金鹰cross轿车麦弗逊独立悬架设计(全套含7张CAD图纸).zip
函数的参数
Research progress on the quality of life of the elderly and its influencing factors
Python中函数的参数定义和可变参数
数码参数网站

随便看看