微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 内核Makefile编译的过程的学习之 Makefile

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

时间:10-02 整理:3721RD 点击:
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 根据这些变量  决定哪些

     文件被编译进内核 哪些文件被编译成模块 涉及哪些子目录      

可以连载写你的学习

求e币 大家回复下吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top