linux内核第一记
1.linux体系结构
从上图可知,
Linux分为:用户空间和内核空间。内核空间和用户空间是程序执行的两种不同的状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。
www.2cto.com
2.linux内核架构
2.1系统调用接口(SCI)
SCI层为用户空间提供了一套标准的系统调用函数来访问Linux内核,搭起了用户空间到内核的桥梁。
2.2进程管理(PM)
进程管理的重点是创建进程(fork,exec),停止进程(kill,exit),并控制他们之间的通信(singal或POSIX机制),进程管理还包括控制活动进程如何共享CPU(进程调度).。
2.3内存管理(MM)
内存管理的主要作用是控制多个进程安全的共享内存区域。
2.4网络协议栈(NS)
网络协议栈为Linux提供了丰富的网络协议实现。
2.5虚拟文件系统(VFS) www.2cto.com
VFS隐藏各种文件系统的具体细节,为文件操作提供统一的接口。
2.6设备驱动(DD)
Linux内核中有大量的代码都在设备驱动程序中,他们控制特定的硬件设备。
2.7 Arch
Arch中包含内核所支持的每种CPU体系,在Arch目录中,都有每种CPU体系对应的子目录,子目录中又包含boot,mm,kenerl等子目录,分别控制系统引导,内存管理,系统调用等。如X86体系如下图:
linux内核第二记
目录结构(一般修改Arch和Drivers目录中的文件)
www.2cto.com
1.block目录
部分块设备驱动程序
2.crypto目录
加密、压缩、CRC校验算法
3.documentation
内核的文档
4.drivers目录
设备驱动程序
5.fs目录
存放各种文件系统的实现代码。每个子目录对应一中文件系统的实现,公用的源程序用于实现虚拟文件系统VFS
www.2cto.com
6.include目录
内核所需要的头文件。与平台无关的头文件在include/linux子目录下,与平台相关的都文件则放在相应的子目录中。
7.init目录
内核初始化代码
8.ipc目录
进程间通信实现代码
9.kenerl目录
Linux大多数核心功能都在这个目录实现(调度程序、进程控制、模块化)。
10.lib目录
库文件代码
11.mm目录
mm目录中的文件用于实现内存管理中与体系结构无关的部分
12.net目录
网络实现的协议代码
www.2cto.com
13.samples目录
13.samples目录
一些内核
编程的范例
14.script目录
配置内核的脚本
15.security目录
SElinux的模块
16.sound目录
音频设备的驱动程序
17.usr目录
cpio命令实现
18.virt目录
内核
虚拟机
linux内核第三记
Linux内核配置
Linux内核具有可定制的优点,具体步骤如下:
1.清理临时文件,中间文件和配置文件
·make clean:删除大部分产生文件(如编译中的.o文件)但是把配置保留下来。
·make mrproper:删除所有产生文件并把配置文件也删除了。
·make distclean:在make mrproper的基础上,还要删除编辑器文件和补丁文件。
2.确定目标系统的软硬件配置情况,比如CPU的型号,网卡的型号,所支持的网络协议等。
3.使下列的命令之一配置内核:
·make config:基于文本模式的交互式配置(以提问的方式配置)。
·make menuconfig:基于文本模式的菜单型配置(推荐使用)。
·make oldconfig:使用已有的配置文件(.config),但是会询问新增的配置选项。
·make xconfig:图形化的配置(需要安装图形化系统)
如果没有安装qt: www.2cto.com
sudo apt-get install libqt3-mt
sudo apt-get install libqt3-mt-dev
sudo make xconfig:
在make menuconfig后,ls -a:注意多了一个.config文件
一般情况下都用make menuconfig:如上图,y=*、n=[]、M,y或*代表的是将这个项目编译到内核中,n或空为不选择,M表示编译成模块。
[*]A.c---->A.o\
--->zimage(*要经历编译和连接)
[*]B.c---->B.o/
[M]D.c---->D.o(指编译)
[]E.c---X(不编译不连接)
配置项的选择:
参见内核配置参考.doc
常常利用已有的内核配置参考进行修改。例如进入arm中的s3c2410的配置:
把该配置拷贝到liunx内核下的.config中,然后在此基础上进行修改。
如:cp s3c2410_defconfig ../../../.config www.2cto.com
假如我要将我修改本身系统运行的内核: