[194] ifeq need-sub-make = 0

         该篇主要分析这部分主makefile内容

[1906] end need-sub-make

[211] C: 源代码check, KBUILD_CHECKSRC

[220] M: 指定外部模块目录,KBUILD_EXTMOD

extmod-prefix: 外部模块路径

ifeq ($(abs_srctree),$(abs_objtree))srctree := .building_out_of_srctree :=
elseifeq($(abs_srctree)/, $(dir $(abs_objtree)))srctree :=elsesrctree := $(abs_srctree)endifbuilding_out_of_srctree := 1
endif 

objtree := .

VPATH := $(srctree) 为什么不直接用绝对路径

version_h

clearn-target :=

no-dot-config-targets

no-sync-config-targets

single-targets:

config-build:

默认空,如果KBUILD_EXTMOD为空,且MAKECMDGOALS包含%config,置1;

mixed-build:

默认空,

如果KBUILD_EXTMOD为空,且MAKECMDGOALS包含%config,且多于1个 goals,置1;

如果MAKECMDGOALS 包含有single-targets,且还包含有其他,置1;

如果MAKECMDGOALS包含有clean-targets,且还包含有其他,置1;

如果MAKECMDGOALS包含有install,和modules-install,置1;

need-config:

默认是1,如果MAKECMDGOALS 只包含 no-dot-config-targets,清空;

may-sync-config:

默认是1,如果MAKECMDGOALS 只包含no-sync-config-targets,清空;

如果KBUILD_EXTMOD被定义,清空;

single-build:

默认空,如果MAKECMDGOALS包含single-targets,置1;

[327]ifdef mixed-build

递归构建每一个goals

__build_one_by_one: for $(MAKECMDGOALS):make -f $(srctree)/Makefile each

[343]else mixend-build

单个构建的处理放在下面分析

[1905]end mixend-build

单个构建的处理分析

include scripts/kbuild.include: 各种makefile函数的定义

KERNELRELEASE  KERNELVERSION

include scripts/subarch.include: 获取宿主机架构SUBARCH

ARCH ?= $SUBARCH: 交叉编译的话,需要提前指定ARCH

UTS_MACHINE := $ARCH

SRCATCH := $ARCH

KCONIFG_CONFIG ?= .config

KBUILD_DEFCONFIG := defconfig

HOST配置:编译选项,shell等

[430]交叉编译器配置:

CC = $(CROSS_COMPILE)gcc

LD = $(CROSS_COMPILE)gcc

.......

[472]各种FLAG:

CHECKFLAGS:

NOSTDINC_FLAGS:

CFLAGS_MODULE:

.........

[483]USERINCLUDE

LINUXINCLUDE

KBUILD_XXXX

[539]config 目标和 build 目标共享的规则

scripts_basic: 基础的辅助构建, make $(build)=scripts/basic

outputmakefile: 如果obj和src不是同一个目录,在obj目录生成makefile,根据前面定义的宏building_out_of_srctree来判断是否需要

CC_VERSION_TEXT

[592] end  config 目标和 build 目标共享的规则

[594] ifdef config-build

include arch/$(SRCARCH)/Makefile: 获取KBUILD_DEFCONFIG定义

%config or config: outputmakefile scriptps     构建kconfig

make $build=scripts/kconfig $@

[611]else config-build

build目标构建分析

[1904]end config-build

build目标构建分析

[612]config-build = 0

__all: 如果定义KBUILD_EXTMOD,则依赖modules,否则依赖all

KBUILD_MODULES:

默认空;

如果MAKECMDGOALS包含 all modules nsdeps,则置1;

如果MAKECMDGOALS为空,则置1;

KBUILD_BUILTIN:

默认1;

如果MAKECMDGOALS 是 modules, 则清空;

include include/config/auto.conf: 如果定义 need-config,则包含。里面包含了kconfig生成的所有配置

[654]KBUILD_EXTMOD为空: 构建vmlinux

core-y := init/ usr/

drivers-y := drivers/ sound/

drivers-$(CONFIG_SAMPLES) += samples/

drivers-y += net/ virt/

libs-y := lib/

[661]end KBUILD_EXTMOD为空

all: vmlinux   all 默认目标

[669] 一些编译选项的宏

include arch/$(SRCARCH)/Makefile:  可以在这个目录增加架构相关的配置

[690] ifdef need-config

[691]ifdef may-sync-config

include include/config/auto.conf.cmd: 定义了 kconfig文件的依赖关系,以及auto.conf,确保这些可以是最新的

%/config/auto.conf %/config/auto.conf.cmd %/generated/autoconf.h: $(KCONFIG_CONFIG)

make -f $(srctree)/Makefiel syncconfig

[715]else may-sync-config

include/config/auto.conf: ????

[730] end may-sync-config

[731] end ifdef need-config

kBUILD_xx: 编译选项控制

[961] include-y: scripts/Makefile.xxxx

KBUILD_IMAGR ?= vmlinux

INSTALL_PATH ?= /boot

INSTALL_DTBS_PATH = $(INSTALL_PATH)/dtbs/$(KERNELRELEASE)

MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)

module strip compressed sign: 相关操作

[1096] MODORDER: $(extmod-prefix)modules.order

MODULES_NSDEPS: $(extmod-prefix)modules.nsdeps

[1099] if 没有定义KBUILD_EXTMOD

core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/

vmlinux-dir = core-y core-m drivers-y drivers-m libs-y libs-m

vmlinux-alldir = vmlinux-dir Documentation core- drivers- libs-

subdir-modorder = core-y/modules.order core-m/modules.order libxxx driversxxx

build-dirs = vmlinux-dir

clean-dirs = vmlinux-alldirs

KBUILD_VMLINUX_OBJS = head-y  core-y/built-in.a  libs-y/built-in.a drivers-y/built-in.a

ifdef CONFIG_MODULES(来自kconfig),  += libs-y/lib.a

KBUILD_VMLINUX_LIBS =

ifdef CONFIG_MODULES, +=libs-y(非/结尾),否则libs-y/lib.a

KBUILD_LDS = arch/$(SRCARCH)/kernel/vmlinux.lds

KBUILD_ALLDIRS: 供 scripts/Makefile.package使用

vmlinux-deps = KBUILD_LDS KBUILD_VMLINUX_OBJS KBUILD_VMLINUX_LINBS

autoksyms_recursive:

ifdef CONFIG_TRIM_UNUSED_KSYMS

KBUILD_MODULES = 1

autoksyms_recursive: descend modules.order

shell $(srctree)/scripts/adjust_autoksyms.sh :

make -f $(srctree)/Makefile vmlinux

endif

autoksyms_h quiet_cmd_autoksyms_h cmd_autoksyms_h

autoksyms_h: xxxx

ARCH_POSTLINK: arm没有

cmd_link-vmlinux: ld

vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps)

targets := vmlinux

vmlinux-deps subdir-modorder : descend

archprepare: outputmakefile   archheaders archscripts scripts include/cnfig/kernel.release ... include/generates/autoconf.h

prepare: prepare0 prepare-objtool preprare-resolve_btfids

asm-generic

[1270] kernel header:生成和安装

[1307] kernel selftest: 运行自检脚本

[1324] devicetree file:

[1370] modules ifdef CONFIG_MODULES

modules: vmlinux modules_check

make -f scriptes/Makefile.modpost

cmd_modules_order =

[1440] else CONFIG_MODULES

[1675] else KBUILD_EXTMOD

[1729] end KBUILD_EXTMOD

linux makefile 框架分析2相关推荐

  1. linux makefile 框架分析1

    主Makefile [17] MAKECMDGOALS: 命令行传入的构建对象 [22] __all : 默认目标 [40] sub_make_done: 存在的意义,构建框架存在递归调用的行为,而对 ...

  2. linux音频框架分析,Alsa音频子系统Codec---al5623.c内核代码框架分析

    驱动代码位于: sound/soc/codec/alc5623.c 随便找个Linux内核都会有. 1.首先进行i2c总线驱动加载在: static int __init alc5623_modini ...

  3. Linux v4l2框架分析

    背景 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 V4L2(Video for Linu ...

  4. contiki makefile框架分析 contiki学习之一

    在linux下的工程编译,基本都可以使用makefile这个工具来完成.Contiki OS亦如此,下面分析contiki整个Makefile的框架,对makefile的具体内容暂不做分析.本文依赖于 ...

  5. Android/Linux Thermal框架分析及其Governor对比

    https://www.cnblogs.com/arnoldlu/p/6388151.html 图表 1 Thermal框架 随着SoC性能的快速提升,功耗也极大提高,带来的负面影响是SoC的温度提高 ...

  6. Linux USB驱动框架分析 【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...

  7. linux v4l2系统详解,Linux摄像头驱动学习之:(一)V4L2_框架分析

    这段时间开始搞安卓camera底层驱动了,把以前的的Linux视频驱动回顾一下,本篇主要概述一下vfl2(video for linux 2). 一. V4L2框架: video for linux ...

  8. OS相关驱动 Linux USB驱动框架分析

    初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了.好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发 ...

  9. java连接linux服务器执行shell命令(框架分析+推荐)

    java连接linux服务器执行shell命令(框架分析+推荐) 一.分类+连接方式 程序打成jar包,在本地服务器上执行shell命令.这种使用MyRuntimeUtil工具类 java程序远程li ...

最新文章

  1. 计算机网络安全防护体系研究
  2. Leetcode334反转字符串[C++题解]:双指针
  3. php 获取signature,PHP开发微信无法获取到signature,timestamp,nonce
  4. java用tkmapper分组查询_mybatis example group by count 分组求和 - java分组求和
  5. Spring Cloud与Duddo比较(非原创)
  6. linux 相关零碎知识整理
  7. 浅析Asp.net MVC 中Ajax的使用
  8. java webview框架_java - Android WebView 无法正常显示网页图表
  9. hdu5823 (附带数的二进制子集)
  10. --c语言运算符_C按位运算符-能力问题和解答
  11. 加加速度matlab,关于加加速度的若干机械运动分析及MATLAB模拟
  12. GitHub推出云端IDE,可在浏览器里使用VS Code了
  13. 钉钉作弊,被判5年!
  14. quickselect java,实现快速选择
  15. 关于QT中的音频通信问题
  16. 机器人开发--技术路线简介
  17. VRP--车辆路径问题 c++
  18. 四个小故事—体验经济:互联网生存的秘密
  19. 超级计算机运行吃鸡,pdd花6万买的超级电脑,第二天玩吃鸡显卡被击穿,网友:人傻钱多...
  20. Codeforces 558C Amr and Chemistry 暴力 - -

热门文章

  1. 【有奖话题】一场因疫苗引发的技术风波?
  2. 药监局:强化疫苗批签发管理 加大生产企业检查力度
  3. 解决find命令报错: paths must precede expression(转)
  4. 世界各国实际利率存款利率支付利息收入所得税率利息差贷款利率(1960-2022)
  5. 第9课时 自由行走的机器人
  6. linux下qt的odbc库编译,linux qt QODBC连接sql server 驱动 有关问题 ,实在是没辙了
  7. uniapp多端小程序中中各部分尺寸的计算方法
  8. LeetCode笔记:Biweekly Contest 83
  9. coreldraw x5 选择工具快捷键_CorelDRAW-X5快捷键
  10. php soapclient 参数,序列化 – 序列化PHP SOAPClient对象