Linux内核分析(一)---linux体系简介内核源码简介内核配置编译安装
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux内核分析(⼀)---linux体系简介内核源码简介内核配置编
译安装
Linux内核分析(⼀)
从本篇博⽂开始我将对linux内核进⾏学习和分析,整个过程必将⼗分艰⾟,但我会坚持到底,同时在博⽂中如果那些地⽅有问题还请各位⼤神为我讲解。
今天我们会分析到以下内容:
1.Linux体系结构简介
2.Linux内核源码简介
3.Linux内核配置、编译、安装
l Linux体系结构简介
1.Linux体系结构(linux系统构成)
Linux可以分为两部分,分别为⽤户空间和内核空间具体如下图:
a)⽤户空间包括:⽤户的应⽤程序、C库
b)内核空间包括:系统调⽤接⼝、内核(狭义内核)、平台架构相关的代码
2.为什么要分为内核空间和⽤户空间
我们在分析u-boot的时候就说到过,我们的cpu在不同的⼯作模式下可以访问的寄存器是不⼀样的,所以为了保护我们的操作系统,避免⽤户程序将内核搞崩,所以进⾏了内核空间和⽤户空间的划分。
a)Arm处理器⼯作模式划分:usr、FIQ、IRQ、svc、abt、und、sys(具体介绍在)
b)X86处理器⼯作模式划分:Ring0—Ring3,Ring0下可以执⾏特权指令,可以访问IO设备,Ring3则有很多的限制
注:我们可以通过系统调⽤和硬件中断来完成⽤户空间到内核空间的转移
3.Linux内核结构(⼴义内核)
Linux内核由七个部分构成,具体如下图:
a)系统调⽤接⼝(SCI):open、read、write等系统调⽤
b)进程管理(PM):创建进程、删除进程、调度进程等
c)内存管理(MM):内存分配、管理等
d)虚拟⽂件系统(VFS):为多种⽂件系统提供统⼀的操作接⼝
e)⽹络协议栈:提供各种⽹络协议
f)CPU架构相关代码(Arch):为的是提⾼⾄移植性
g)设备驱动程序(DD):各种设备驱动,占到内核的70%左右代码
l Linux内核源码简介
1.源码获取
Linux内核获取有两种⽅法,⼀种是在直接获取,另⼀种是使⽤git获取(具体⽅法参考⽹络)。
2.源码⽬录简介
其源码主要有以下⽬录(介绍重要⽬录):
a)Arch⽬录:存放处理器相关的代码。
下设⼦⽬录,分别对应具体的CPU,每个⼦⽬录有boot,mm,以及kernel三个⼦⽬
录,分别对应系统引导以及存储管理,和系统调⽤
b)Include⽬录:内核所需要的⼤部分头⽂件⽬录。
与平台⽆关的在include/linux⼦⽬录下,与平台相关的则放在include相应
的⼦⽬录中。
c)fs⽬录:存放各种⽂件系统的实现代码。
d)init⽬录:init⼦⽬录包含核⼼的初始化代码(不是系统的引导代码)。
其包含两个⽂件main.c和version.c,可以⽤来研究核
⼼如何⼯作。
e)ipc⽬录:包含核⼼进程间的通信代码。
f)kernel⽬录:包含内核管理的核⼼代码。
与硬件相关代码放在arch/*/kernel⽬录下。
g)mm⽬录:包含了所有的内存管理代码。
与硬件相关的内存管理代码位于arch/*/mm⽬录下。
h)scripts⽬录:包含⽤于配置核⼼的脚本⽂件。
i)lib⽬录:包含了核⼼的库代码,与硬件相关的库代码被放在arch/*/lib/⽬录下
l Linux内核配置、编译、安装
1.X86配置
Linux内核的编译有两种⽅法,具体如下:
a)交互式:在内核顶层的⽬录下运⾏make config,按照提⽰⼀步⼀步的按照⾃⼰的需求对内核进⾏配置。
b)菜单式:在内核顶层的⽬录下运⾏make menuconfig,菜单式的按照⾃⼰的需求对内核进⾏配置。
2.X86编译
Linux内核的编译要经过以下步骤,具体如下:
1.内核编译:linux内核的编译有以下两种⽅法。
n make zImage:编译出的内核⼩于512k(⽼版本内核)
n make bzImage:通⽤编译命令
注:在以上两个命令中加V=1可查看编译过程中的详细信息
2.内核模块编译:执⾏make modules编译内核模块。
3.内核模块安装:执⾏make modules_install将编译好的内核模块复制到当前系统的/lib/modules下的**⽬录下。
4.内核模块打包:执⾏mkinitrd initrd-$version $version对内核模块进⾏打包,其中initrd-$version表⽰要打包为的⽂件的名
字,$version表⽰要打包的⽬录即我们上⼀步⽣成的⽬录。
3.X86安装
Linux内核的安装要经过以下步骤,具体如下:
a)拷贝内核:复制1编译出来的内核映像到启动⽬录cp arch/$cpu/boot/bzImage(1编译出来的bzimage)/boot/vmlinuz-
$version
b)拷贝内核模块⽂件:执⾏cp initrd-$version(4⽣成的⽂件) /boot/ 将4⽣成的⽂件拷贝到boot下
c)修改启动配置⽂件:修改/etc/grub.conf⽂件。