如何定制自己的linux内核

如何定制自己的linux内核,第1张

一 前言

为什么要编译自己的内核?这可能会有各种不同的答案,列举如下:

1 为了研究,学习内核源码

2 为了支持新的硬件或者打开某项内核功能。

3 升级内核到更新版本。

4 按自己的要求定制和优化内核功能。

如此种种...

折腾不需要理由,这里我就不在多说,下面直接进入主题。

编译方式

编译内核有多种方式,从kernel.org下载选择下载需要的版本的内核源码,

如:linux-2.6.32-rc1.tar.bz2,下载内核源码到/home/user/目录,进入下载目录,解压压缩包。

#cd /home/user/

#tar -xjvf linux-2.6.32-rc1.tar.bz2

二 准备编译环境

开始之前,首先确认下面软件包已经安装(编译中标普华4.0时,直接全部安装CD3可保证此条件)。

* rpmdevtools

* yum-utils

fedora系统可以使用如下命令安装:

#yum install yum-utils rpmdevtools

1. 生成一个rpmbuild命令工作所需的目录树,下面命令可以完成该 *** 作,也可以手动建立目录树。

命令建立:

#rpmdev-setuptree

此命令将会在/usr/src/rpmbuild/目录下生成如下目录结构(如果此位置没有,则可能在当前用户目录下).

# tree /usr/src/rpmbuild/

rpmbuild/

|-- BUILD

|-- RPMS

|-- SOURCES

|-- SPECS

`-- SRPMS

上面部分是rpmbuild的环境建立。rpm

3. 安装内核源码包需要的依赖组件(在此可以跳过此步 *** 作)

su -c 'yum-builddep kernel-<version>.src.rpm'

4.安装内核源码到系统,默认目录在/usr/src/neoshine:

rpm -Uvh kernel-<version>.src.rpm

三 配置内核(生成config配置文件)

下面将介绍如何解开源码包,并修改,配置和重新打包源码

1. 解开源码包并打上所有的补丁到BUILD目录

cd ~/rpmbuild/SPECS

rpmbuild -bp --target=`uname -m` kernel.spec

kernel源码将在这里找到:

/usr/src/neoshine/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>directory

配置内核源码

1. 进入内核源码:

cd ~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch/

2. 复制/boot/config*配置文件到源码目录下,此config文件也可以是已经配好或者其他地方备份的kernel配置文件:

cp /boot/config2.6- 2.6.$ver.$arch .config

3. 先检查kernel配置中新增的选项:

make oldconfig

4. 定制内核功能,关闭initrd支持选项,执行图形化内核配置工具:

make menuconfig

注:在generic setup选项下找到initial RAM system and RAM disk(initramfs and initrd) support 项,取消编译。同时确保跟文件系统对应的驱动和系统所在存储器对应的驱动都已经编译到内核(否则会无法启动系统).

5. 在.config文件第一行改为下面内容(注意:没有此行时,后面的编译会报错)

# i386

6. 拷贝.config到SOURCES/:

cp .config ../SOURCES/config-$arch

四 编译新内核

1. 下面开始准备编译新的内核包

打开SPEC/kernel.spec

vim SPEC/kernel.spec

改变下面行内容,可以定制自己的内核扩展名(如fc10之类):

%define buildid .<自己内核的小版本名>

下一步将生成一个新内核的rpm包,此过程需要编译内核源码包

使用下面命令生成新的内核源码包

rpmbuild -bb --with baseonly --without debuginfo --target=`uname -m` kernel.spec

参数说明:bb表示只编译二进制包,即不生成源码包,without debuginfo 表示没有调试信息,

target=`uname -r`表示生成对应当前平台的内核包

如果上面的命令成功执行完成,那么会在BUILD/i686目录下生成新的内核安装包

五 安装新内核

rpm -ivh kernel-$ver-$arch.rpm

此步 *** 作会自动安装内核到boot目录下,安装对应内核模块到/lib/modules/目录下,并且生成新内核对应的grub引导菜单。

修改grub引导菜单为以下格式

title new kernel

kernel /boot/vmlinuz-$ver-$arch root=/dev/sdax(hdax)

注意,此处不要使用uuid指定跟文件系统(可能会无法挂载根分区而导致内核死机),也不要再加和显示相关的参数(内核不支持对应设置时,只会看到一个黑黑的屏幕)。

至此一个禁用initrd的新内核配置安装完毕!

Linux系统结构一般有3个主要部分:内核kernel、命令解释层Shell或其他 *** 作环境、实用工具1.Linux内核内核是系统的核心,是运行程序和管理磁盘、打印机等硬件设备的核心程序。 *** 作系统向用户提供一个 *** 作界面,它从用户那里接收命令,并且把命令送给内核去执行。当 Linux安装完毕之后,一个通用的内核就被安装到主机中,这个通用内核能满足绝大部分用户的需求,但普遍适用性内核对具体的某台主机来说,可能有一些并不需要的内核程序将被安装。因此,Linux允许用户根据主机的实际配置定制 Linux的内核,从而有效地简化 Linux内核,提高系统启动速度。2.Linux ShellShell是系统的用户界面,提供了用户与内核进行交互 *** 作的接口。它接收用户输入的命今,并且把它送入内核执行。 *** 作系统在系统内核与用户之间提供 *** 作界面, Linux存在多种 *** 作环境,分别是基于图形界面的集成桌面环境和基于Shell命令行环境。Shell是一个命令解释器,它解释由用户输入的命令,并且送到内核。Shell编程语言具有普通编程语言的很多特点,如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。作为命令行 *** 作界面的替代, Linux还提供了像 Windows那样的可视化图形界面X-window的图形用户界面。3.实用工具标准的 Linux系统都有配套的实用工具程序,如编辑器、浏览器、办公套件及其它系统管理工具等,用户可以自行编写需要的应用程序。

新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译Linux内核。

为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:

(1)自己定制编译的内核运行更快(具有更少的代码)

(2)系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)

(3)不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞

(4)

将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7518534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存