源代码
Linux内核总是不断发展
![](/icons/93200de.gif)
![](/icons/93200dou.gif)
最新
![](/icons/93200de.gif)
内核Kernel2.6.0对USB2.0予以正式
![](/icons/93200de.gif)
支持
![](/icons/93200dou.gif)
以及内核模块文件后缀最显著
![](/icons/93200de.gif)
![](/icons/93200yi.gif)
个变化由*.o到*.ko等等
![](/icons/93200dou.gif)
我们可以从www.kernel.org到tarball
![](/icons/93200de.gif)
源代码包
前期准备
大家都知道
![](/icons/93200de.gif)
要先升级“module-init-tools“软件Software包
![](/icons/93200dou.gif)
否则
![](/icons/93200de.gif)
话
![](/icons/93200dou.gif)
等你安装内核模块文件
![](/icons/93200de.gif)
时候
![](/icons/93200dou.gif)
系统会提示你:Warning: you may need to
![](/icons/93200install.gif)
module-init-tools See http://www.codemonkey.org.uk/post-h...4.21-23.src.rpm
进入目录下并安装:
#rpm -e --nodeps modutils (强行卸载原有
modutilsRPM包) #rpm -ivh modutils-2.4.21-23.src.rpm
(把源代码包安装到了 /usr/src/redhat目录下)
#cd /usr/src/redhat/SPECS (进入规范标准文件目录下)
#rpmbuild --bb modutils.spec (生成 2进制
RPM包)
#cd ../RPMS/i386 (转入刚生成
2进制
RPM包所在位置)
#rpm -ivh modutils*.rpm (刚生成两个[modutils-2.4.21-23.i386.rpm
和modutils-debuginfo-2.4.21.23.i386.rpm] 2进制
RPM包![](/icons/93200dou.gif)
起安装吧!)
![](/icons/93200yinwei.gif)
是在RedHat9.0
![](/icons/93200de.gif)
平台
![](/icons/93200dou.gif)
RedHat
![](/icons/93200de.gif)
用户可能还会遇到
![](/icons/93200yi.gif)
些麻烦
![](/icons/93200dou.gif)
我会慢慢说
![](/icons/93200de.gif)
![](/icons/93200dou.gif)
除了要以上
![](/icons/93200de.gif)
升级的外
![](/icons/93200dou.gif)
还有个文件(/etc/rc.d/rc.sysinit)可能有缺陷
![](/icons/93200dou.gif)
![](/icons/93200yinwei.gif)
/proc/ksyms文件在新内核(Kernel2.6.0)中已经没有了
![](/icons/93200dou.gif)
打开文件命令如下:
#vi /etc/rc.d/rc.sysinit 找到:
! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null
&& [ -f /proc/ksyms ]; then
USEMODULES=y fi
替换成:
! LC_ALL=C
grep -iq nomodules /proc/cmdline 2>/dev/null;
then USEMODULES=y fi
也就是把“&& [ -f /proc/ksyms ]”去掉
![](/icons/93200dou.gif)
保存文件(操作的前最好做备份以免删错
![](/icons/93200dou.gif)
这个文件是系统
![](/icons/93200chushi.gif)
脚本
![](/icons/93200dou.gif)
重要
![](/icons/93200de.gif)
很)
![](/icons/93200dou.gif)
这样子内核才能加载模块
![](/icons/93200dou.gif)
当然能启动iptable了
![](/icons/93200dou.gif)
否则在新内核中启动时红色
![](/icons/93200de.gif)
“failed“非常醒目
![](/icons/93200dou2.gif)
(请在新内核中核查/proc/sys/kernel/modprobe中
![](/icons/93200de.gif)
内容是不是: /sbin/modprobe
![](/icons/93200dou.gif)
也可手工注入指令:#echo "/sbin/modprobe" > /proc/sys/kernel/modprobe)
![](/icons/93200dou2.gif)
下面开始构造新内核
、准备源代码
1、下载到tarball包的后
![](/icons/93200dou.gif)
将内核tarball包复制到/usr/src目录下
![](/icons/93200dou.gif)
假定包在当前目录中
![](/icons/93200dou.gif)
运行以下命令:
#cp -2.6.0.tar.gz /usr/src
2、转到/usr/src目录并解开tarball包
#cd /usr/src #tar xvzf -2.6.0.tar.gz
3、如果你还下载了补丁包
![](/icons/93200dou.gif)
则打上补丁
![](/icons/93200dou.gif)
你也可以运行scripts/patch-kernel脚本文件自动打上补丁(准备好补丁包)或 #zcat patch-2.6.0.gz|patch -p1
2、定制内核
定制内核是门很大
![](/icons/93200de.gif)
学问
![](/icons/93200dou.gif)
需要大量
![](/icons/93200de.gif)
硬件知识
![](/icons/93200dou.gif)
特别是2.6.0
![](/icons/93200de.gif)
内核
![](/icons/93200dou.gif)
如果你从 2.4.N配置文件装载进去
![](/icons/93200de.gif)
![](/icons/93200dou.gif)
![](/icons/93200de.gif)
确
![](/icons/93200dou.gif)
很多人遇到过麻烦
![](/icons/93200dou2.gif)
我是重新配置文件(X窗口进行)
![](/icons/93200dou.gif)
配制内核的前请清理源代码树
![](/icons/93200dou.gif)
如果还没有进入 /usr/src/linux-2.6.0目录
![](/icons/93200dou.gif)
请进入此目录
![](/icons/93200dou.gif)
命令如下:
#make mrproper (刚解开
tarball包不需此步骤) #make gconfig (需要Gtk开发库
支持)
或make config 或make xconfig(需要Qt开发库
支持)
注意:如果你是ext3文件系统
![](/icons/93200dou.gif)
则在定制内核配置文件时把对Ext3、Ext2文件
![](/icons/93200de.gif)
支持直接编译进内核
![](/icons/93200dou.gif)
否则
![](/icons/93200dou.gif)
等你启用新内核时机器就会当掉
![](/icons/93200dou.gif)
出错信息如下:kernel panic : no init found ,try passing init = option to kernel......或者是:kernel panic:VFS:Unable to mount root fs _disibledevent=>
3、编译内核及模块
定制好
![](/icons/93200de.gif)
内核配置文件(/usr/src/linux- 2.6.0/.config)的后
![](/icons/93200dou.gif)
激动
![](/icons/93200de.gif)
时刻到来了
![](/icons/93200dou.gif)
编译内核及模块
![](/icons/93200dou.gif)
#make (此命令已完成make bzImage及make modules
![](/icons/93200de.gif)
工作),bzImage内核文件在arch/i386/boot目录中
![](/icons/93200dou.gif)
你
![](/icons/93200de.gif)
CPU区别内核文件存放位置也区别
![](/icons/93200dou.gif)
我是Intel
![](/icons/93200de.gif)
CPU
注意:我在RedHat7.2平台时曾出现无法编译
![](/icons/93200de.gif)
出错信息
![](/icons/93200dou.gif)
出错信息如下:
/tmp/cc2Hu7sH.s:3: Error: Unknown pseudo-op: `.incbin' make[1]:
*** [usr/initramfs_data.o] Error 1 make:
*** [usr] Error 2![](/icons/93200dou.gif)
重新装了个9.0
![](/icons/93200de.gif)
才解决此问题
![](/icons/93200dou2.gif)
介绍说明:make命令在我
![](/icons/93200de.gif)
1.6GHz
![](/icons/93200dou.gif)
128MB
![](/icons/93200de.gif)
机器上跑了足足27分钟
4、安装模块及内核文件
#make modules_
以上这个命令可以分解成make modules_
![](/icons/93200install.gif)
和make
![](/icons/93200install.gif)
![](/icons/93200dou.gif)
make modules_
![](/icons/93200install.gif)
安装内核模块到/lib/modules/2.6.0下
![](/icons/93200dou2.gif)
make
![](/icons/93200install.gif)
完成mkinitrd命令及内核(bzImage)和
![](/icons/93200System.gif)
.map
![](/icons/93200de.gif)
拷贝
![](/icons/93200dou.gif)
请查看/boot目录
![](/icons/93200dou.gif)
文件名是有区别
![](/icons/93200de.gif)
![](/icons/93200dou.gif)
如是GRUB 引导器
![](/icons/93200dou.gif)
make
![](/icons/93200install.gif)
命令已帮你自动修改了引导选项
![](/icons/93200dou.gif)
对于LILO则要手工修改
![](/icons/93200dou.gif)
重写引导记录
介绍说明:make modules_
![](/icons/93200install.gif)
这个命令在我
![](/icons/93200de.gif)
1.6GHz,128M
![](/icons/93200de.gif)
机器上只跑了 3十几秒
![](/icons/93200dou.gif)
很快
![](/icons/93200de.gif)
哦
5、后记
最后
![](/icons/93200de.gif)
工作就是重启系统(#shutdown -r now),检验
![](/icons/93200yi.gif)
下你
![](/icons/93200de.gif)
劳动成果吧
![](/icons/93200dou2.gif)
差点忘了还有
![](/icons/93200yi.gif)
点
![](/icons/93200dou.gif)
可能对你很重要
![](/icons/93200dou.gif)
进入新内核的后我发现rpm命令不能用了
![](/icons/93200dou.gif)
原来这是RPM
![](/icons/93200de.gif)
![](/icons/93200yi.gif)
个Bug
![](/icons/93200dou.gif)
特别是对于RH9
![](/icons/93200de.gif)
用户
![](/icons/93200dou.gif)
请打开/etc/profile文件
![](/icons/93200dou.gif)
命令如下:
#vi /etc/profile (在文件
末尾加上几句如下)
[`uname -r`="2.6.0" ];
then export LD_ASSUME_KERNEL=2.2.5 fi
也就是给系统加上
![](/icons/93200yi.gif)
个全局
![](/icons/93200de.gif)
环境变量
![](/icons/93200dou.gif)
也可直接键入#export LD_ASSUME_KERNEL=2.2.5
使用新内核可能出现
![](/icons/93200de.gif)
问题及对策:
1、新内核根本起不来
![](/icons/93200dou.gif)
解决思路方法:重新配置内核(学问挺大)
![](/icons/93200dou.gif)
也许还根引导记录有关(很少了)
2、新内核模块无法加载
![](/icons/93200dou.gif)
会导致很多问题
![](/icons/93200dou.gif)
比如了防火墙没法工作了
![](/icons/93200dou.gif)
mount不上光盘和vfat及ntfs文件系统
![](/icons/93200dou.gif)
其解决思路方法:升级module- init-tools软件Software包(我是modutils-2.4.21- 23.src.rpm包)
![](/icons/93200dou.gif)
RedHat
![](/icons/93200de.gif)
用户可能还要修改/etc/rc.d/rc.sysinit文件
3、RedHat用户rpm命令不能使用
![](/icons/93200dou.gif)
解决办法:请把变量在全局配置文件中声明
延伸阅读
最新评论