Linux内核编译之高手教程(1)


   下载源代码

Linux内核总是不断发展的,最新的内核Kernel2.6.0对USB2.0予以正式的支持,以及内核模块文件后缀最显著的一个变化由*.o到*.ko等等,我们可以从www.kernel.org下载到tarball的源代码包。

前期准备

大家都知道的要先升级“module-init-tools“软件包,否则的话,等你安装内核模块文件的时候,系统会提示你:Warning: you may need to install module-init-tools See http://www.codemonkey.org.uk/post-h...4.21-23.src.rpm。

进入下载目录下并安装:

  1.  #rpm -e --nodeps modutils 强行卸载原有的modutilsRPM包)#rpm -ivh modutils-2.4.21-23.src.rpm 把源代码  
  2. 包安装到了    /usr/src/redhat目录下)  
  3. #cd /usr/src/redhat/SPECS 进入规范文件目录下)  
  4. #rpmbuild --bb modutils.spec 生成二进制的RPM包)  
  5. #cd ../RPMS/i386 转入刚生成的二进制的RPM包所在位置)  
  6. #rpm -ivh modutils*.rpm 刚生成两个[modutils-2.4.21-  
  7. 23.i386.rpm    与modutils-debuginfo-  
  8. 2.4.21.23.i386.rpm]二进制的RPM包,一起安装吧!)    

因为是在RedHat9.0的平台,RedHat的用户可能还会遇到一些麻烦,我会慢慢说的,除了要以上的升级之外,还有个文件/etc/rc.d/rc.sysinit)可能有缺陷,因为/proc/ksyms文件在新内核Kernel2.6.0)中已经没有了,打开文件命令如下:

  1.  #vi /etc/rc.d/rc.sysinit找到:if ! LC_ALL=C   
  2. grep -iq nomodules /proc/cmdline 2>/dev/null    && [ -  
  3. f /proc/ksyms ]; thenUSEMODULES=yfi替换  
  4. 成:if ! LC_ALL=C grep -iq nomodules /proc/cmdline   
  5. 2>/dev/null; thenUSEMODULES=yfi 

也就是把“&& [ -f /proc/ksyms ]”去掉,保存文件操作之前最好做备份以免删错,这个文件是系统初始脚本,重要的很),这样子内核才能加载模块,当然能启动iptable防火墙了,否则防火墙在新内核中启动时红色的“failed“非常醒目。请在新内核中核查/proc/sys/kernel/modprobe中的内容是不是: /sbin/modprobe,也可手工注入指令:#echo "/sbin/modprobe" > /proc/sys/kernel/modprobe)。下面开始构造新内核。


相关内容