1.makefile
在linux内核源码的根目录下面有一个makefile文件
各级目录下也都有自己的Makefile文件
顶层的makefile文件通过include各个子目录下面的makefile文件
就可以把整个内核源码全部包含进来
2.根目录下面的makefile文件
在第546行,会include体系架构相关的makefile文件
include arch/$(SRCARCH)/Makefile
在编译内核的时候有指定SRCARCH等于X86,那么就会include x86的makefile
除此之外,还有子目录init,drivers,net等都有对应的赋值
# Objects we will link into vmlinux / subdirs we need to visit
init-y := init/
drivers-y := drivers/ sound/ firmware/
net-y := net/
libs-y := lib/
core-y := usr/
virt-y := virt/
3.编译过程
整个linux内核的编译过程:
顶层的makefile不断地去调用各个子目录下面的makefile;
把各个子目录下面的源代码编译出来;
最终把他们链接成一个镜像文件
4.以/drivers/tty中的makefile文件为例
4.1 Kconfig
kconfig中的配置信息就是menuconfig中看到的信息
4.2 makefile
obj-$(CONFIG_TTY) += tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o \
tty_buffer.o tty_port.o tty_mutex.o tty_ldsem.o
CONFIG_TTY在kconfig配置,会在最开始menuconfig中进行配置这个变量等于m还是y
linux内核源码编译类似于堆积木,在各个子目录中生成编译的中间文件,即build-in.o文件,最后linux内核会把这些build-in.o文件进行整合,生成内核的image文件