我爱编程

Linux内核编译安装过程

2017-07-13  本文已影响3464人  六月天的安静

前言

什么是内核(kernel)

Kernel是操作系统的核心,掌控者所有硬件设备的控制权。也即是说,你所希望计算机帮你完成的各项工作,都需要通过内核的帮助才能完成,当然,如果你想要完成的某个功能是内核没有提供的,那么我们就无法通过内核来控制计算机完成这项工作了。如果我们想要让内核去完成这个功能,那么我们就必须将该功能的模块 “添加” 到内核当中,这就类似于 “驱动程序” ,有了这样一个“驱动程序”的支持之后,我们的硬件(CPU、网卡)才能去完成之前不能完成的功能。这里的模块 “添加” 我们这有一个专业的词语叫做编译。那么内核到底是什么呢?其实内核就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的检测程序与驱动模块。我们知道当操作系统读完BIOS并加载MBR中的Boot Loader之后,就能加载内核到内存当中了,然后就开始检测硬件设备、挂载根目录来获取内核模块来驱动所有的硬件设备,之后就开始会叫 /bin/init 进程来完成系统的启动。内核文件是在 /boot 目录下一个以 vmlinuz 开头的文件,有时我们会发现 /boot 目录下有好几个以 vmlinuz 开头的文件,也就是说主机上有多个内核,但是启动的时候仅能选择一个来加载,所以说 Linux 是单内核模块化体系

什么是模块化

模块化可以这样理解,一个程序可以完成很多个功能,那么每个独立的功能就可以称之为功能模块,这些独立的功能模块组合起来就可以完成一系列的大的功能,这里我们就是将功能进行模块化。内核也是一样的道理,还记得 Linux 的哲学思想之一吗?就是集合小命令完成大人物。这里的小命令相对于大的任务也是模块化的

什么时候我们需要对内核进行编译呢

既然内核文件里面包含了硬件检测与驱动模块,如果一个新的硬件设备在添加的时候发现内核里面没有支持该硬件的驱动模块,那该怎么办呢?难道我们就要重新编译一个内核么?显然这种做法是不恰当的,你要知道编译内核是一件很麻烦的事情,需要专业的管理员需要很长时间来编译的,我们一直说模块的概念,在这里就充分体现了模块化的优势了,就是说我们可以单独的将具有支持该硬件的功能模块编译,,然后让内核去加载它,这样内核不就可以使用了吗?况且也不影响之前内核对原有设备的支持能力。

内核编译过程

一、编译前准备工作
1、获取目标主机硬件设备相关信息:
(1) CPU:

(2) PCI设备:

(3)了解全部硬件设备信息
hal-device

二、开发环境及源码
(1)安装开发包组

(2)获取内核源码

(3)内核功能的选择

三、内核编译的步骤

(1)首先下载所需要的内核代码文件

(2)解压缩源代码文件到指定目录

(3)给解压后的文件(linux-3.18.60)建立软连接

Paste_Image.png Paste_Image.png
Paste_Image.png Paste_Image.png

(4)copy 当前系统内核的配置文件模板文件到新内核目录下 :

Paste_Image.png Paste_Image.png
解释一下上面的步骤: 从boot目录拷贝一个config文件过来主要是为了方便,这个文件里保存都是之前你在安装系统是内核所安装的模块,这里拷贝过来为了主要为了方便演示,具体各位以后在应用中需要什么的模块那各位就自己去筛选了(这种工作几乎不会做当然除非有特殊需求的)。

(5)选定配置(我们使用 make menuconfig

Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png
(6)开始进行编译

<1> 打开虚拟窗口:

Paste_Image.png

** <2>编译:**

Paste_Image.png
然后我们用命令screen -r 5014 就可以打开之前关闭的screen窗口了: Paste_Image.png

(7)安装模块(make modules_install)
在命令行执行命令 : make modules_install **

**(8)安装内核(make install)
执行命令 make install 安装内核相关文件,主要目的将所有的编译之后的内容拷贝安装到相应的目录。

四、对其编译的内核进行验证
重启系统,选中自己编译的内核对其进行验证

Paste_Image.png

五、清理删除

在已经执行过编译操作的内核源码树做重新编译:
需要事先清理操作:

Paste_Image.png Paste_Image.png Paste_Image.png
卸载内核 Paste_Image.png
上一篇下一篇

猜你喜欢

热点阅读