📄 tlsa讲义02章.txt
字号:
第二章 核心模块和定制
核心功能
单一核心和模块化核心
稳定核心和正在发展核心
使用核心源代码树和它多包含文档
配置、重建、定制安装核心和模块
2.1 核心基础
核心的功能
核心的版本号X.Y.Z
附加的第四号码
使用正在发展的核心的原因
系统管理要使用稳定的核心
核心基本网站www.kernel.org
2.1 核心基础
核心的结构:调度、结构、设备驱动、文件系统、网络、内存管理、系统调用
资源树结构:核心文件、Doc文件、Include文件、结构依赖、驱动、网络
2.1 编译核心
前期准备知识:
备份与压缩命令
用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩.下面分别介绍备份与压缩的命令.
2.1 tar命令
tar命令 可以为文件和目录创建档案。
利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。
利用 tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。
2.1 tar命令
语法∶tar [主选项+辅选项] 文件或者目录
使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用.
与其他Linux命令不同,tar的选项之前k可以不需要加“-”符号.
2.1 tar命令
主选项∶
c 创建新的档案文件.如果用户想备份一个目录或是一些文件,就要选择这个选项.
r 把要存档的文件追加到档案文件的未尾.例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中.
2.1 tar命令
t 列出档案文件的内容,查看已经备份了哪些文件.
u 更新文件.就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后.
x 从档案文件中释放文件.
C 指定释放目录
2.1 tar命令
辅助选项∶
f 使用档案文件或设备,这个选项通常是必选的.
k 保存已经存在的文件.例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖.
m 在还原文件时,把所有文件的修改时间设定为现在.
2.1 tar命令
v 详细报告tar处理的文件信息.如无此选项,tar不报告文件信息.
w 每一步都要求确认.
z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩.
2.1 gzip命令
gzip命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.
gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.
2.1 gzip命令
语法∶gzip [选项] 压缩(解压缩)的文件名
各选项的含义∶
-c 将输出写到标准输出上,并保留原有文件.
-d 将压缩文件解压.
-l 对每个压缩文件,显示下列字段∶ 压缩文件的大小, 未压缩文件的大小, 压缩比, 未压缩文件的名字,
2.1 gzip命令
-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩.
-t 测试,检查压缩文件是否完整.
-v 对每一个压缩和解压的文件,显示文件名和压缩比.
-num 用指定的数字num调整压缩的速度,-1或-fast表示最快压缩方法(低压缩比),-9或-best表示最慢压缩方法(高压缩比).系统缺省值为6.
附注:bzip2命令
如果压缩文件的后缀为.bz2
使用命令bzip2 –d xxx.bz2
例如:linux-2.6.10.tar.bz2
则:
bzip2 –d linux-2.6.10.tar.bz2
tar xvf linux-2.6.10.tar
2.1 编译核心
下列条件,需要对核心进行重新编译:
针对特定的CPU类型优化核心
提供对没有编译到标准核心文件中的硬件驱动的支持
支持特殊的硬件
BUG修复或增加新特征所需的驱动更新
使用新功能以及为了优化内存的使用
2.2.1 准备源码
光盘或从网络上下载
Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代 码。任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。而Linux的内核则是这些特点的最直接的代表。
2.2.1 准备源码
Linux内核版本发布的官方网站是<http://www.kernel.org/>,国内各大ftp上一般都可 以找到某些版本的内核。新版本的内核的发布有两种形式,一种是完整的内核版本,另 外一种是patch文件,即补丁。完整的内核版本比较大,比如linux-2.6.10.tar.bz2就有35M之多。完整内核版本一般是.tar.gz(.tgz)文件或者是.bz2文件,二者分别 是使用gzip或者bzip2进行压缩的文件,使用时需要解压缩。
2.2.1 准备源码
patch文件则比较小,一般 只有几十K到几百K,也有的会超过1M。但是patch文件是针对于特定的版本的,需要找到 自己对应的版本才能使用。
如果下载了patch文件,比如patch-2.2.20,就可以进行patch操作(下面假设patch-
2.2.20已经位于/usr/src目录下了,否则需要先把该文件拷贝到/usr/src下):
#patch -p0 < patch-2.2.20
2.2.1 准备源码
解压源码到/usr/src目录下
了解本机相关的硬件配置
浏览目录下相关文档文件
2.2.1内核编译的流程
编译开始----- make mrproper;检查所需的连接
配置核心
编译核心
编辑/etc/lilo.conf
重新启动新核心
重新启动机器
发现并修理故障
2.2.1内核编译
编译开始
通常要运行的第一个命令是:
#cd /usr/src/linux
#make mrproper
该命令确保源代码目录下没有不正确的目标.o文件以及文件的互相依赖。如使用刚下载的完整的源程序包进行编译,本步可以省略。而如果多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。
2.2.1内核编译
make 可自动决定一个大程序中哪些文件需要重新编译,并发布重新编译它们的命令。
make并不是仅仅能够处理C语言程序,它可以处理那些编译器能够在Shell命令下运行的的各种语言的程序。事实上,GNU Make不仅仅限于程序,它可以适用于任何如果一些文件变化导致另外一些文件必须更新的任务。
2.2.1内核编译
如果要使用make,必须先写一个称为Makefile的文件,该文件描述程序中各个文件之间的相互关系,并且提供每一个文件的更新命令。在一个程序中,可执行程序文件的更新依靠OBJ文件,而OBJ文件是由源文件编译得来的。
2.2.1内核编译
一旦合适的Makefile文件存在,每次更改一些源文件,在shell命令下简单的键入:
make
就能执行所有的必要的重新编译任务。Make程序根据Makefile文件中的数据和每个文件更改的时间戳决定哪些文件需要更新。对于这些需要更新的文件,Make基于Makefile文件发布命令进行更新,进行更新的方式由提供的命令行参数控制。
2.2.1内核编译
Make程序需要一个所谓的Makefile文件来告诉它干什么。在大多数情况下,Makefile文件告诉Make怎样编译和连接成一个程序。
2.2.1内核编译
当Make重新编译这个编辑器时,所有改动的C语言源文件必须重新编译。如果一个头文件改变,每一个包含该头文件的C语言源文件必须重新编译,这样才能保证生成的编辑器是所有源文件更新后的编辑器。每一个C语言源文件编译后产生一个对应的OBJ文件,如果一个源文件重新编译,所有的OBJ文件无论是刚刚编译得到的或原来编译得到的必须从新连接,形成一个新的可执行文件。
2.2.1内核编译
一个简单的Makefile文件包含一系列的“规则”,其样式如下:
目标(target)…: 依赖(prerequiries)…
<tab>命令(command)
内核编译
接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下选项的设置。
配置内核可以根据需要与爱好使用下面命令中的一个:
#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用,必须安装ncurse
s-dev和tk4-dev库)
内核编译
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -