Linux内核编译(Red Hat Enterprise/centos/Fedora)

本文描述的是为当前PC机编译内核的方法。
若您想了解更一般的通用的内核编译方法,可参考如下博文:
http://blog.csdn.net/crazycoder8848/article/details/44131735


好了,下面言归正传。

一. 下载内核源码包

注意,这里要下载的内核源码不是标准的Linux内核源码,而是Red Hat发行版的内核源码。

另外需要注意,Red Hat发行版的内核有不同的版本。具体下载哪个版本呢?

如果是想学习内核开发(例如,写驱动/做内核实验),则选择与自己PC机上当前跑的内核版本一致的即可。如果是想升级内核,那就选择一个高版本的下载。

我们这里就下载一个与PC机上当前跑的内核版本一致的吧。

可以通过如下命令,查看自己PC上当前跑的Red Hat的内核版本。

[root@12 ~]# uname -a

Linux 12  2.6.18-194.el5  #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

上面的 红色文字部分 就是笔者环境中的内核版本号了。

得到了内核版本号,就可以下载内核源码了。

以上面的版本为例,下载地址如下:

ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/kernel-2.6.18-194.el5.src.rpm

注意:

a) 如果想查看redhat发行版Linux的名称及版本号,可以执行命令 cat /etc/redhat-release

b) 如果是centos,则下载地址为类似如下的地址:

http://vault.centos.org/6.2/os/Source/SPackages/kernel-2.6.32-220.el6.src.rpm

c) 如果是fedora,则下载地址为类似如下的地址:

http://kojipkgs.fedoraproject.org/packages/kernel/2.6.33.3/85.fc13/src/kernel-2.6.33.3-85.fc13.src.rpm


二. 生成内核源码

上面下载的只是内核源码的rpm安装包。

针对此安装包,我们需要通过如下步骤,才能得到完整的redhat linux内核源码。


1) 用root用户登陆pc linux


2) 使用如下命令安装源码包

rpm -i  kernel-2.6.18-194.el5.src.rpm


安装完成后,在 /usr/src/redhat/目录下会生成一些目录:例如,BUILD  SOURCES  SPECS等。

其中SOURCES 目录下,应该是内核源码文件与补丁等。

以red hat为例,SOURCES 中包含:

linux-2.6.18.tar.bz2   ---- 标准的Linux内核源码包

一大堆.patch的文件  ---- 这些是源码补丁文件

若干个.config            ---- 这些是内核配置文件

其他的文件                ----  在下目前也不理解 :)


注意:如果是centos,相关目录是生成在 /root目录下。

对于fedora,笔者操作后发现,相关目录是在/root/rpmbuild目录下。



3) 使用如下命令得到完整的redhat linux内核源码

cd   /usr/src/redhat/SPECS

rpmbuild -bp kernel-2.6.spec --target=x86_64

注意:

如果你的机器是32位的,则将x86_64换成i686。


如果一切顺利,那么在“/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64”目录中,就会生成一份内核源码。这个源码,是在标准Linux内核源码的基础上,打上了RedHat(或centos/fedora)的补丁及相关配置的源码。


对于32位的fedora,生成的源码路径是/root/rpmbuild/BUILD/kernel-2.6.33/linux-2.6.33.i686


注意:

若命令执行时出现类似“unifdef is needed by kernel-2.6.18 ...”这样的错误,请下载安装unifdef。

如果你的Linux可以直接访问外网,一条“yum installunifdef”命令就OK了。

如果你的Linux不能直接上网,但是你有代理服务器可用。

那么先执行“export http_proxy=http://user_name:password@proxy_ip”命令,

再来一条“yum install unifdef”命令就OK了。

如果你很不幸,上面的yum install操作无法顺利执行。

那么,自己下载安装unifdef吧。

下载地址如下

ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/7/Everything/x86_64/os/Fedora/unifdef-1.171-5.fc6.x86_64.rpm

安装命令

rpm -i  unifdef-1.171-5.fc6.x86_64.rpm

如果还缺少其他工具,也请按此方法依次安装。


三、编译内核

通过如下命令配置并编译内核

cd   /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64

make menuconfig  /* 配置内核 */

make bzImage        /* 编译内核 */

make modules       /* 编译模块 */


如果仅仅是想学习驱动开发/做内核实验,则接下来就可以编写内核模块,然后编译、加载、调试模块了。

如果想安装新编译的内核,则执行如下命令。


make modules_install   /* 安装模块 */

make install                    /* 安装内核 */

reboot                             /* 重启机器。起来之后就是新内核了 */

剩下的事情,在下就不用说了吧 :)


最后,以上的编译方法仅仅适用于为当前PC机编译内核。

如果您想了解更一般的通用的内核编译方法,可以参考如下博文:

http://blog.csdn.net/crazycoder8848/article/details/44131735

如果您想了解内核模块的编译方法,可以参考如下博文

http://blog.csdn.net/crazycoder8848/article/details/44132731




你可能感兴趣的:(centos,fedora,red,hat,内核编译)