首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

内核Makefile编译的过程的学习之 Makefile

内核Makefile编译的过程的学习之 Makefile

1. make menuconfig

     该命令完成的工作 : 生成 .condig 文件

     将menuconfg'的配置项全部列在该文件中  

2. make  
      该命令完成的工作 :生成/include/config/auto.conf  
                                 将.config中的配置为编进内核或模块的选项定义在这里

                                 如  CONFIG_SMDK2440_CPU2440=y

                                 该文件被包含于 顶层Makefile中   

                               生成/include/linux/autoconf.h

                                 将.config中的配置为编进内核或模块的选项宏定义在这里

                                 如  #define CONFIG_SMDK2440_CPU2440 1
3. 顶层Makefile

      顶层Makefile决定哪些子目录被编译进vmlinux镜像


      # Objects we will link into vmlinux / subdirs we need to visit
       init-y          := init/
       drivers-y       := drivers/ sound/
       net-y           := net/
       libs-y          := lib/
      core-y          := usr/
       562 core-y          += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

   同时顶层Makefile中包含arch/arm/Makefile所以该目录也被编译进内核

     理解时可以将该目录看成顶层目录看待 Makefile 也看成顶层Makefile  

     arch/arm/Makefile  内容如下

       94 head-y   := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o

         core-y                          += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
     172 core-y                          += $(MACHINE)
     173 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2400/
     174 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2412/
     175 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2440/
     176 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2442/
     177 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2443/
            libs-y                          := arch/arm/lib/ $(libs-y)  

  这里的 CONFIG_ARCH_S3C2410 就是在/include/config/auto.conf 中定义

  编译内核时 将依次进入 init——y core——y libs——y driver——y net——y所列的目录中执行

  他们的Makefile 每个子目录生成 built-in.o(lib-y 目录中可能生成lib.a)

  最后 head-y 所表示的文件和这些 built-in.o lib.a 一起 链接成 vmlinux

4. 子目录下的Makefile
   各子目录下的 Makefile 决定该目录下的哪些文件编译进内核或模块 进入哪些子目录的

       内容如下 以/net/Makefile为例

        obj-y   := nonet.o
       obj-$(CONFIG_NET)               := socket.o core/     

       tmp-$(CONFIG_COMPAT)            := compat.o
       obj-$(CONFIG_NET)               += $(tmp-y)

      这里的CONFIG_NET 也是在auto.conf里定义

      可知 obj -y和 lib-y 同时决定编译哪些文件 进入哪些子目录

    5.总结  
       .config 中定义了一系列的变量  Makefile 根据这些变量  决定哪些

     文件被编译进内核 哪些文件被编译成模块 涉及哪些子目录
继承事业,薪火相传
返回列表