05.内核启动流程分析之makefile
        【摘要】 
                    
                        
                    
                                       linux内核makefile文件分类 
名称描述顶层makefile它是所有makefile文件的核心,从总体上控制着内核的编译、连接.config配置文件,在配置...
    
    
    
    linux内核makefile文件分类
| 名称 | 描述 | 
|---|---|
| 顶层makefile | 它是所有makefile文件的核心,从总体上控制着内核的编译、连接 | 
| .config | 配置文件,在配置内核时生成。所有makefile文件(包括顶层目录及各级子目录)都是根据.config来决定使用那些文件 | 
| arch/$(ARCH)/Makefile | 对于体系结构的makefile,它用来决定那些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核映像 | 
| scripts/Makefile.* | Makefile共用的通用规则、脚本等 | 
| kbuild Makefiles | 各级子目录下的Makefile,它们相对简单,被上一层Makefile调用来编译当前目录下的文件 | 
  分析makefile从顶层开始,顺藤摸瓜的分析下去,会涉及到所有的makefile文件。各级子目下的makefile完成的动作obj -y += obj -m +=
   make uImage时,uImage在arch/arm/makefile中,顶层makefile中一定包含了底层的makefile。
system\linux-2.6.22.6\linux-2.6.22.6\drivers\char目录下的makefile
/*-y表示后面的内容会被编译进内核*/
obj-y	 += mem.o random.o tty_io.o n_tty.o tty_ioctl.o
/*-m表示后面的内容会被编译成模块*/
obj-m	 += s3c24xx_leds.o
/*a.c,b.c编译成一个模块,ab.ko*/
obj -m += ab.o
ab -objs :=a.o b.o
  
 - 1
- 2
- 3
- 4
- 5
- 6
- 7
.config会生成auto config.h和auto.conf两个文件
/*顶层makefile已经包含了*/
-include include/config/auto.conf
  
 - 1
- 2
system\linux-2.6.22.6\linux-2.6.22.6 目录下的makefile
/*uIamge其实时一个头部。真正的linux在后面vmlinux*/
zImage Image xipImage bootpImage uImage: vmlinux
	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
/*vmlinux的依赖*/
vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
/*各部分如下*/
vmlinux-init := $(head-y) $(init-y)
/*arch\arm\makefile中定义了head-y*/
head-y		:= arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
/*linux-2.6.22.6\makefile*/
/*init目录下所有涉及的文件会编译成built-in.o*/
init-y		:= init/
init-y		:= $(patsubst %/, %/built-in.o, $(init-y))
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
/*linux-2.6.22.6\makefile*/
/*core-y = usr/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o*/
core-y		:= usr/
core-y		+= kernel/ mm/ fs/ ipc/ security/ crypto/ block/
core-y		:= $(patsubst %/, %/built-in.o, $(core-y))
/*所有目录涉及的文件都会编译成built-in.o libs-y= lib/lib.a lib/built-in.o*/
libs-y		:= lib/
libs-y		:= $(libs-y1) $(libs-y2)
libs-y1		:= $(patsubst %/, %/lib.a, $(libs-y))
libs-y2		:= $(patsubst %/, %/built-in.o, $(libs-y))
/*所有目录涉及的文件都会编译成built-in.o drivers-y	:= drivers/built-in.o sound/built-in.o*/
drivers-y	:= drivers/ sound/
/*所有目录涉及的文件都会编译成built-in.o  net-y		:= net/built-in.o*/
net-y		:= net/
vmlinux-all  := $(vmlinux-init) $(vmlinux-main)
vmlinux-lds  := arch/$(ARCH)/kernel/vmlinux.lds
/*以上这些原材料如何编译进内核?直接编译内核可以看出来*/
/*第一个文件:arch/arm/kernel/head.o*/
/*链接脚本:arch/arm/kernel/vmlinux.lds*/
arm-linux-ld-EL -p--no-undefined-X-o vmlinux
/*lds决定原材料的排布*/
-T arch/arm/kernel/vmlinux.lds
/*原材料*/
arch/arm/kernel/head.o arch/arm/kernel/init task.o 
init/built-in.o 
-start-group usr/built-in.o arch/arm/kernel/built-
in.o arch/arm/mm/built-in.o arch/arm/common/built-in.o arch/arm/mach-s3c2410/built-in.o arch/arm/mach-s3c2400/built-in.o arch/arm/mach-s3c2412/built-in.o arch/arm/mach-s3c2440/built-in.o arch/arm/mach-s3c2442/built-in.o arch/arm/mach-
s3c2443/built-in.o arch/arm/nwfpe/built-in.o arch/arm/plat-s3c24xx/built-in.o kernel/built-in.o mm/built-in.o fs/built-
in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o arch/arm/lib/lib.a lib/lib.a arch/arm/lib/built-in.o lib/built-in.o drivers/built-in.o sound/built-in.o net/built-in.o--end-group.tmp kallsyms2.o
  
 - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
顶层makefile的包含代码
/*包含到顶层目录*/
include $(srctree)/arch/$(ARCH)/Makefile
ARCH      ?=arm
  
 - 1
- 2
- 3
- 4
文章来源: blog.csdn.net,作者:嵌入式与Linux那些事,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_16933601/article/details/102886655
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)