本文描述的是为当前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