美文网首页
Linux Kernel Makefiles介绍

Linux Kernel Makefiles介绍

作者: 小田BSP | 来源:发表于2021-07-14 22:37 被阅读0次

    本文介绍Linux内核Makefiles的一些基础内容。

    一、概述

    Makefiles包括:

    文件 功能描述
    Makefile Linux内核顶层Makefile文件
    .config Linux内核配置文件
    arch/$(ARCH)/Makefile Linux内核体系结构相关的Makefile文件
    scripts/Makefile.* Linux内核kbuild Makefile的通用规则
    kbuild Makefiles Linux内核各级目录下的kbuild Makefile文件

    Linux内核顶层的Makefile文件递归访问内核源代码的子目录。

    每个子目录都有一个kbuild Makefile文件,根据.config文件内容构建内置或模块化目标。

    arch/$(ARCH)/Makefile文件向顶层Makefile提供特指定的体系结构信息。

    scripts/Makefile.*文件定义了kbuild Makefile构建内核的所有定义和规则等。

    Linux内核编译完成后,最终生成vmlinuxmodules

    Linux内核中的大多数Makefile都使用kbuild基础结构,kbuild文件的首选名称是Makefile。如果Makefilekbuild文件都存在,则使用kbuild文件。

    二、目标定义

    目标定义是kbuild Makefile里的核心部分,定义了要构建的文件、特殊的编译选项和递归输入的任何子目录。

    例:

    ## 1、该目录下build_test.c或.s文件将被编译成build_test.o的目标文件
    obj-y   += build_test.o
    
    ## 2、编译成内核模块
    obj-m += module_test.o
    
    ## 3、若在defconfig文件中配置CONFIG_TESTR为y,将被直接编译;配置为m,将被编译成内核模块;如果没配置或配置为is not set,则不编译
    obj-$(CONFIG_TEST)  += test.o 
    
    ## 4、内核模块包括多个文件
    obj-$(CONFIG_MODULE_TEST) += module_test.o                    ## CONFIG_MODULE_TEST配置为m,定义module_test为module_name
    module_test-y := module_test1.o module_test2.o module_test3.o ## $(<module_name>-y)的格式
    
    ## 5、如果配置CONFIG_DIR_TEST为y或m,则进入dir_test目录进行编译;否则不编译
    obj-$(CONFIG_DIR_TEST) += dir_test/
    
    ## 6、生成lib.a,lib-y通常仅用于lib/和arch/*/lib/目录下
    lib-y := test_lib.o
    
    ## 7、目录编译使用libs-y
    libs-y := test_dir/
    

    kbuild Makefile将编译所有$(obj-y)文件,然后调用$(AR)rcSTP将这些文件合并到built-in.a文件中。

    built-in.a中不包括符号表,稍后将通过scripts/link-vmlinux.sh脚本链接到vmlinux文件中。

    Linux内核引导期间,将按照链接顺序调用某些函数(例:module_init()等)。

    参考:

    Documentation/kbuild/makefiles.txt

    相关文章

      网友评论

          本文标题:Linux Kernel Makefiles介绍

          本文链接:https://www.haomeiwen.com/subject/wrpupltx.html