linux的内核文件结构
移植的话主要是看arch的文件目录,里面是关于芯片的代码。
首先我们先阅读linux的内核的makefile文件
1)首先我们先看内核是如何决定编译那些文件的
查看顶层的makefile文件
init-y := init/
drivers-y := drivers/ sound/ firmware/
net-y := net/
libs-y := lib/
core-y := usr/
virt-y := virt/
.......
core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
$(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))
vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
$(init-) $(core-) $(drivers-) $(net-) $(libs-) $(virt-))))
将变量vmlinux-dirs打印出来的话是:
usr arch/arm/nwfpe arch/arm/kernel arch/arm/mm arch/arm/common arch/arm/probes arch/arm/net arch/arm/crypto arch/arm/firmware arch/arm/mach-s3c24xx arch/arm/plat-samsung kernel certs mm fs ipc security crypto block drivers sound firmware net arch/arm/lib lib virt
就是内核文件的各个目录的名字
知识点:
1、filter函数是过滤后bai面的字符串,返回符符合的字符串
比如:source := a.s b.c c.cpp
$(filter %.c %.s, $(source)) 返回的是a.s b.c
2、patsubst是替换字符的意思
$(patsubst %.c,%.o,x.c.c bar.c)
3、-y表示直接编译进内核,-m表示编译为模块
把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o”
vmlinux-alldirs 打印出来是:
arch/arm/common arch/arm/crypto arch/arm/firmware arch/arm/kernel arch/arm/kvm arch/arm/lib arch/arm/mach-s3c24xx arch/arm/mm arch/arm/net arch/arm/nwfpe arch/arm/oprofile arch/arm/plat-samsung arch/arm/probes arch/arm/vdso arch/arm/vfp arch/arm/xen block certs crypto drivers firmware fs ipc kernel lib mm net security sound usr virt
知识点:
$(sort LIST)
函数名称:排序函数—sort。
函数功能:给字串“LIST”中的单词以首字母为准进行排序(升序),并取掉重复
$(sort foo bar lose foo)
返回值为:“bar foo lose” 。
init-y := $(patsubst %/, %/built-in.o, $(init-y))
core-y := $(patsubst %/, %/built-in.o, $(core-y))
drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y))
net-y := $(patsubst %/, %/built-in.o, $(net-y))
libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
libs-y := $(libs-y1) $(libs-y2)
virt-y := $(patsubst %/, %/built-in.o, $(virt-y))
编译之后,每个目录都会形成(目录名)built-in.o的文件,例如initbuilt-in.o
这样之后,内核的目录就全部包含进来了。
2、配置linux内核
执行命令make nenuconfig就可以对根据kconfig文件来对linux进行配置,配置完成之后就回生成.config文件,在编译的时候,系统会根据这个文件
对内核进行编译。
上面的菜单项的功能