栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux系统移植:Kernel 顶层 Makefile(上)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux系统移植:Kernel 顶层 Makefile(上)

文章目录

Linux系统移植:Kernel 顶层 Makefile(上)

一、版本号二、MAKEFLAGS 变量三、命令输出四、静默输出五、编译结果输出目录六、代码检查七、模块编译八、设置目标架构和交叉编译器九、调用构建文件十、交叉编译工具链设置十一、头文件路径变量十二、导出变量

Linux系统移植:Kernel 顶层 Makefile(上)

之前分析过 uboot 源码目录下的顶层 makefile 文件,uboot 的顶层 makefile 参考了了许多 linux 顶层 makefile 的代码,前面有很多代码思路基本差不多

一、版本号

版本信息不多说

二、MAKEFLAGS 变量

makeflags 用来查找相对于内核 src 根目录的 make include 文件,他的值 始终自动的传递给子 make,我们可以在代码中看到 MAKEFLAGS:

三、命令输出

Linux 编译的时候可以通过 “V=1” 来输出完整的命令,和 uboot 一样

代码老样子,V 为 1, quiet 和 Q 为空,输出完整命令,V 为 0 ,则 quiet=quiet_、Q = @,屏蔽掉完整命令

四、静默输出

编译的时候使用 “make -s” 就可实现静默编译,编译的时候就不会打印任何的信息:

quiet 为 silent_ 时不会打印任何信息

后面还有一行

用来传递参数给子 make

五、编译结果输出目录

编译时使用 “O=xxx” 可将编译产生的过程文件输出到指定的目录中

代码判断 O 存在且来自命令行后就会将 O 的值赋值给 KBUILD_OUTPUT (编译输出目录),然后判断 KBUILD_OUTPUT 不为空的话,则创建该目录,并将所有的 make 结果设置为该目录

六、代码检查

使用参数 “ C=1” 使能代码检查,检查那些需要重新编译的文件,“C=2”用于检查所有的源码文件

代码逻辑和前面的相同

七、模块编译

Linux 允许单独编译某个模块,使用命令 “make M=dir” 或者旧语法 “make SUBDIRS=dir”,相关代码如下:

代码对两个指令都支持

根据 KBUILD_EXTMOD 决定编译部分还是全部模块,然后设置 srctree、objtree、VPATH 这三个变量并输出

八、设置目标架构和交叉编译器

Linux 编译要设置目标板架构 ARCH 和交叉编译器 CROSS_COMPILE

编译时要把这两个参数传进去,对于 IMX 板子可以直接先设置成下面参数,减少编译指令长度

ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-
九、调用构建文件

Linux 顶层 Makefile 也会调用文件 scripts/Kbuild.include,里面是一些辅助调用的代码:

十、交叉编译工具链设置

下面的代码是配置交叉编译工具的代码,比如 LD-链接器、gcc 编译器等等

十一、头文件路径变量

顶层 Makefile 定义了两个变量 保存头文件路径:USERINCLUDE 和 LINUXINCLUDE

在默认输入情况下,srctree=.,hdr-arch=arm,KBUILD_SRC 为空,带入后展开代码:

USERINCLUDE := 
    -I./arch/arm/include/uapi 
    -Iarch/arm/include/generated/uapi 
    -I./include/uapi 
    -Iinclude/generated/uapi 
    -include ./include/linux/kconfig.h
LINUXINCLUDE := 
    -I./arch/arm/include 
    -Iarch/arm/include/generated/uapi 
    -Iarch/arm/include/generated 
    -Iinclude 
    -I./arch/arm/include/uapi 
    -Iarch/arm/include/generated/uapi 
    -I./include/uapi 
    -Iinclude/generated/uapi 
    -include ./include/linux/kconfig.h
十二、导出变量

后面就是一堆导出变量,用于给子 make 使用

export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
export ARCH SRCARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
export CPP AR NM STRIP OBJCOPY OBJDUMP
export MAKE AWK GENKSYMS INSTALLKERNEL PERL PYTHON UTS_MACHINE
export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS

export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV CFLAGS_KASAN
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
export KBUILD_ARFLAGS
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号