20230510vmlinux编译过程

1.进入linux内核源码目录下,打开Makefile文件,搜索vmlinux

cmd_link-vmlinux =                                               \          
    $(CONFIG_SHELL) $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)";    \
    $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)

 vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
     +$(call if_changed,link-vmlinux)
     
 分析:  .进入linux内核源码目录下,scripts/目录下,打开Kbuild.include文件,搜索if_changed
    218 if_changed = $(if $(newer-prereqs)$(cmd-check),                              \                                
    219     $(cmd);                                                              \
    183 cmd = @set -e; $(echo-cmd) $($(quiet)redirect) $(cmd_$(1))
    解释:
         @set -e:编译时遇到任何错误就退出
          $(cmd_$(1)) :调用cmd_link_vmlinux

2.进入linux内核源码目录下,scripts目录下,打开linux-vmlinux.sh文件

重点解析上面这句话:
$(CONFIG_SHELL) < " < " <"(LD)" “ ( K B U I L D L D F L A G S ) " " (KBUILD_LDFLAGS)" " (KBUILDLDFLAGS)""(LDFLAGS_vmlinux)”;
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
$@是生成的目标文件vmlinux

 ${LD} ${KBUILD_LDFLAGS} -r -o ${1} ${objects}  

在这里插入图片描述

可知生成的都是built-in.a和lib.a文件

3.进入linux内核源码目录下,打开Makefile文件,搜索built-in.a和lib.a文件

 KBUILD_VMLINUX_OBJS := $(head-y) $(patsubst %/,%/built-in.a, $(core-y))
 KBUILD_VMLINUX_OBJS += $(addsuffix built-in.a, $(filter %/, $(libs-y)))
 KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))
 KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y))
 KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))
 KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y))             
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值