linux内核结构学习笔记

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文件,在编译的时候,系统会根据这个文件
对内核进行编译。

在这里插入图片描述
上面的菜单项的功能
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值