一、为什么要编译内核;
有时我们为了实现某些功能,比如对 iptables 的防火墙有些需要内核支持;还有实现一些硬件
的支持等,这时我们需要重编内核;
二、内核源码版本的选择;
如果发行版本提供内核源码,最好还是用发行版本提供的;比如 Fedora 4.0 提供了很多版本的内核源码;我们安装好后,他自带的配置文件大多能满足我们的需要,对于新手来说,根据自带的内核的配置文件 .config ,我们也能学到一点如何配置内核。也没有什么难的,熟能生巧罢了;
如果从 kernel.org 下载最新稳定版本的内核也是可以的;
三、内核源码安装或解压;
对于 Fedora Core 4.0 来说,内核源码是放在 /usr/src/kernels 目录中;如果通过在线升级内核,也是放在这个目录中;如果您的系统中的 /usr/src/kernels/ 中没有内容,说明您没有安装内核的源码包 kernel-devel 软件包;
您可以通过软件包管理器来补装 ,请参考 相关文档。
如果您用 Fedora Core 4.0 ,我建议您在保留老内核的基础上,在线下载最新版本的内核 kerenl-devel 和对应版本的 kernel 或者从 kernel.org 下载,有时可能新的 kerenl 已经解决了您所面对的问题,这时就没有必要编译内核了;
有时我们为了实现某些功能,比如对 iptables 的防火墙有些需要内核支持;还有实现一些硬件
<script type="text/javascript"><!--google_ad_client = "pub-2299987709779770";google_ad_width = 300;google_ad_height = 250;google_ad_format = "300x250_as";google_ad_type = "text_image";google_ad_channel ="";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "0000FF";google_color_url = "008000";google_color_text = "000000";//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> |
二、内核源码版本的选择;
如果发行版本提供内核源码,最好还是用发行版本提供的;比如 Fedora 4.0 提供了很多版本的内核源码;我们安装好后,他自带的配置文件大多能满足我们的需要,对于新手来说,根据自带的内核的配置文件 .config ,我们也能学到一点如何配置内核。也没有什么难的,熟能生巧罢了;
如果从 kernel.org 下载最新稳定版本的内核也是可以的;
三、内核源码安装或解压;
对于 Fedora Core 4.0 来说,内核源码是放在 /usr/src/kernels 目录中;如果通过在线升级内核,也是放在这个目录中;如果您的系统中的 /usr/src/kernels/ 中没有内容,说明您没有安装内核的源码包 kernel-devel 软件包;
您可以通过软件包管理器来补装 ,请参考 相关文档。
如果您用 Fedora Core 4.0 ,我建议您在保留老内核的基础上,在线下载最新版本的内核 kerenl-devel 和对应版本的 kernel 或者从 kernel.org 下载,有时可能新的 kerenl 已经解决了您所面对的问题,这时就没有必要编译内核了;
如果您是通过在线安装的内核源码包
,比如通过
apt+synaptic
或者
yum
安装的,内核源码会被放到
/usr/src/kernel
下的目录中,您要进入相对应的目录进行编译;
如果您是是下载
kernel
和
kernel-devel
的
rpm
包,可以通过来安装;
[root@localhost beinan]# rpm -ivh kernel*.rpm
如果您是从
kernel.org
下载的类似
linux-2.6.13.tar.bz2
或者
linux-2.6.13.tar.gz
的,您要把下载下来的文件移到
/usr/src
目录中解压;
然后进入解压的目录中进行配置和编译;
[root@localhost beinan]# mv linux-2.6.13.tar.bz2
[root@localhost beinan]# cd /usr/src/
[root@localhost src]# tar jxvf linux-2.6.12.3.tar.bz2
[root@localhost beinan]# cd /usr/src/
[root@localhost src]# tar jxvf linux-2.6.12.3.tar.bz2
提示:
本文以
linux-2.6.12.3
为例,其实通过发行版的升级版的
kernel-devel
和从
kernel.org
下载下来的差不多,大同小异;不同的是通过在线升级的
rpm
格式的内核源码包,有配置文件
.config
可以参考;安装到的目的地是
/usr/src/kernel
对
FC 4.0
来说;如果您要高编译和配置内核,
四、内核的配置;
1 、进入目录执行 make mrproper ,对于从 kernel.org 下载而来的 tar.bz 格式的源码包;
四、内核的配置;
1 、进入目录执行 make mrproper ,对于从 kernel.org 下载而来的 tar.bz 格式的源码包;
[root@localhost src]# cd linux-2.6.12.3/
[root@localhost linux-2.6.12.3]#
[root@localhost src]# cd linux-2.6.12.3/
[root@localhost linux-2.6.12.3]# make mrproper
[root@localhost linux-2.6.12.3]# make menuconfig
[root@localhost linux-2.6.12.3]#
[root@localhost src]# cd linux-2.6.12.3/
[root@localhost linux-2.6.12.3]# make mrproper
[root@localhost linux-2.6.12.3]# make menuconfig
对于
Fedora Core 4.0
,如果您是通过在线安装的
kernel
和
kernel-devel
新版本的包,比如是
2.6.12
-1.1398_FC4-i686
,你可以直进入
/usr/src/kernel/
相应的目录中直接执行
make menuconfig
;利用发行版本提供的
.config
来配置,这样方便点。不要
make mrproper
,否则
.config
就没有了;这也是为什么要用发行版本提供的内核源码升级包的原因;
其它配置和安装大同小异;模仿总可以吧;
2. 简要的配置内核;
2. 简要的配置内核;
进入配置内核的配置模式后,我们可能一无所知,看下面;
内核配置有两种方法,一种是直接置入内核
*
;另一种是编成模块
M
;两种方法各有优点;直接编入内核的,比如设备的启动,不再需要加载模块的这一过程了;而编译成模块,则需要加载设备的内核支持的模块;但直接把所有的东西都编入内核也不是可行的,内核体积会变大,系统负载也会过重。我们编内核时最好把极为重要的编入内核;其它的如果您不明白的,最好用默认。
1 )移动键盘上下左右键,按 Enter 进入一个目录。把指针移动到 Exit 就退出当前目录到上级目录;
1 )移动键盘上下左右键,按 Enter 进入一个目录。把指针移动到 Exit 就退出当前目录到上级目录;
2
)针对自己机器存在的问题进行修改,比如大内存的支持;
选择自己机器的 CPU ;
选择自己机器的 CPU ;
移动键盘到
Processor type and features --->
,然后按
ENTER
进入;
找到 Processor family (Pentium-Pro) ---> 按 ENTER 进入;
找到 Processor family (Pentium-Pro) ---> 按 ENTER 进入;
进入后我们发现有好多
CPU
的型号可选;一般的情况下要根据
bash-3.00# cat /proc/cpuinfo 输出的信息来选,比如我们的是 Celeron ( P4 )一代的,应该选如下的,当然默认的 486 也是可以正常运行的,既然我们重编一次内核,就得选中对应型号的,也许性能有所提高呢;
bash-3.00# cat /proc/cpuinfo 输出的信息来选,比如我们的是 Celeron ( P4 )一代的,应该选如下的,当然默认的 486 也是可以正常运行的,既然我们重编一次内核,就得选中对应型号的,也许性能有所提高呢;
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)
对大内存支持;如果内存是 1G 或者 1G 以上,但小于 4G 的,就要选 4G 支持;如果超过 4G 的,要选 64G 的支持;
High Memory Support (4GB) --->
(X) 4GB
( ) 64GB
(X) 4GB
( ) 64GB
还有比如声卡等硬件,需要我们一步一步的查看;如果有不明之处,就要按
[shift]+
?的组合键来查看说明。一般的情况下,
2.6.x
的内核会根据机器的情况自动配出一个文件,只需要我们来查看一下,把重要的地方改改就行了;
再举个例子:比如我现在所用的声卡是
intel ac97
的,我应该怎么配置呢?
首先要知道自己的声卡的芯片组,我们要通过
lspci -v
来查看;
[root@localhost beinan]#lspci -v
只查看声卡的,应该用如下的方法:
[root@localhost beinan]# lspci -v |grep audio
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)
通过上面的输出,我们知道这台机器用的是
intel AC97
声卡;所以我们要特别注意
AC97
的配置;
找到 Device Drivers ---> Sound --->
<M> Sound card support 声卡的支持,这个是一定要选中的吧;
<M> Advanced Linux Sound Architecture 对声卡支持的ALSA驱动的支持;
下面有OSS驱动,只是一部份。如果想用OSS的驱动更全的,可以去买;其它的就看如下的选吧;
<M> Sequencer support
<M> Sequencer dummy client
<M> OSS Mixer API
<M> OSS PCM (digital audio) API[*] OSS Sequencer API
<M> RTC Timer support[*] Verbose printk
[ ] Debug
<M> Sound card support 声卡的支持,这个是一定要选中的吧;
<M> Advanced Linux Sound Architecture 对声卡支持的ALSA驱动的支持;
下面有OSS驱动,只是一部份。如果想用OSS的驱动更全的,可以去买;其它的就看如下的选吧;
<M> Sequencer support
<M> Sequencer dummy client
<M> OSS Mixer API
<M> OSS PCM (digital audio) API[*] OSS Sequencer API
<M> RTC Timer support[*] Verbose printk
[ ] Debug
大多是默认的就好,如果您不知道是做什么用的,或者怎么用;
然后我们再向下看有
Generic devices --->
进入里面
<M> Dummy (/dev/null) soundcard
<M> Virtual MIDI soundcard
<M> MOTU MidiTimePiece AV multiport MIDI
<M> UART16550 serial MIDI driver
<M> Generic MPU-401 UART driver
ISA devices ---> 如果您用ISA声卡就在这里面选;
PCI devices ---> 如果您用PCI声卡,就在这里面选,集成声卡也在这里;
USB devices ---> 这是USB声卡内核支持选项;我有一个这样的声卡,但没有试过;
PCMCIA devices ---> 这是PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。
<M> Dummy (/dev/null) soundcard
<M> Virtual MIDI soundcard
<M> MOTU MidiTimePiece AV multiport MIDI
<M> UART16550 serial MIDI driver
<M> Generic MPU-401 UART driver
ISA devices ---> 如果您用ISA声卡就在这里面选;
PCI devices ---> 如果您用PCI声卡,就在这里面选,集成声卡也在这里;
USB devices ---> 这是USB声卡内核支持选项;我有一个这样的声卡,但没有试过;
PCMCIA devices ---> 这是PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。
因为我用的是 Intel 集成的声卡,所以要在 PCI 中选择,我们在 中可以看到有两个与 INTEL 有关的;
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
这个才是Intel AC97声卡的;
< > Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 这个是机器集成的INTEL猫的蜂鸣器的;
< > Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 这个是机器集成的INTEL猫的蜂鸣器的;
因为我发现如果把猫的蜂鸣器的驱动也选上,可能造成两个冲突。所以只能选上面的那个;
我们再回到
Open Sound System --->
中看看,与我用的声卡是不是有关的?
<M> Open Sound System (DEPRECATED)
<M> Intel ICH (i8xx) audio support
<M> OSS sound modules
<M> Loopback MIDI device support
<M> Microsoft Sound System support
<M> Intel ICH (i8xx) audio support
<M> OSS sound modules
<M> Loopback MIDI device support
<M> Microsoft Sound System support
我们也可以看到 Open Sound System 中也有好多的声卡驱动,大家根据前面的 lspci -v 来选择吧。
3 )对于操作系统所采用的文件系统的支持要编入内核,最好不要编成模块;(重要)
比如我的
Fedora core 4.0
所采用的文件系统用的是
ext3
,所以我要把它直接编入内核;好处是不受模块丢失或者损坏而不能启动系统;而有时您把系统所采用的文件系统编译成模块,出现
VFS
错误,也有这方面的事,可能是您没有把
ext3
加入到相应的加载模块的配置文件中,所以我们为了减少麻烦,把风险降到最低,还是要直接置入内模的好;
File systems --->
<*> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels
<*> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels
如果您还有其它的硬盘分区要读取,比如是 reiserfs 、 ext2 、 fat 、 fat32 、 ntfs 等,这样的可以编成模块来支持;
再举一例:如果您的的操作系统用的是
reiserfs
的文件系统,当然就要把
reiserfs
的直接编入内核,其它的可以编成模块来支持了;
4 )对于硬盘及 RAID 的支持,要直接编入内核;
比如 ATA 、 SATA 、 SCSI 及 RAID 的支持直接内核支持;有时编完内核后,启动时不能识别硬盘和 RAID ,大多事情出在这里; Slackware 中在这方面有的是模块支持,我们可以把它由模块 M 改成内核 * 来支持; 如果您不明白,就按默认进行; SATA 的硬盘的支持除了选中 SATA 的支持、 IDE 设备的支持以外,还要选中 SCSI 的支持;
5 )对于咱们所没有的设备,可以在内核中不选,熟能生巧罢了;
比如我没有 ISDN 设备 ,所以就把 ISDN 去掉;
ISDN subsystem --->
< > Linux telephony support
< > Linux telephony support
如果您没有
1394
的设备
,当然可以把
1394
的支持也去掉;等等。。。。。。。
如果您有
USB
的设备,要把
USB
方面好好看看;比如大家常用的移动硬盘;
USB
猫等,还有扫描仪等;
内核配置就说这么多吧,太多了,我也说不清楚,水平有限啊;
配置好后先要保存
Save Configuration to an Alternate File
出来一个
Enter a filename to which this configuration
,
should be saved as an alternate. Leave blank to abort.
.config
.config
按回车就行了,这样就保存住了;
然后退出
Exit
,这时也会出现保存
;
如果你想把
.config
保存起来,可以再复制一份到安全一点的目录,以备后用;
五、编译内核;
五、编译内核;
[root@localhost linux-2.6.12.3]# make
[root@localhost linux-2.6.12.3]# make modules_install
[root@localhost linux-2.6.12.3]# make modules_install
这样就编译好了,并把模块也安装在了
/lib/modules
目录中了,请看:
[root@localhost linux-2.6.12.3]# ls /lib/modules/
2.6.11-1.1369_FC4 2.6.12.3
2.6.11-1.1369_FC4 2.6.12.3
六、安装内核及配置 grub 或 lilo ;
1 、复制 bzImage 等相关文件,并创建 initrd 文件;
[root@localhost linux-2.6.12.3]# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.12.3
[root@localhost linux-2.6.12.3]# cp System.map /boot/System.map-2.6.12.3
[root@localhost linux-2.6.12.3]# cd /boot
[root@localhost linux-2.6.12.3]# /sbin/mkinitrd initrd-2.6.12.3.img 2.6.12.3
[root@localhost linux-2.6.12.3]# cp System.map /boot/System.map-2.6.12.3
[root@localhost linux-2.6.12.3]# cd /boot
[root@localhost linux-2.6.12.3]# /sbin/mkinitrd initrd-2.6.12.3.img 2.6.12.3
我们把
编译出来的
bzImage
,拷入到
/boot
目录,拷贝成
vmlinuz-2.6.12.3
;
并且用 mkinitrd 来创建 imitrd-xxx.img 文件,其中 xxx 为内核的版本号,是通过 查看 /lib/modules 来版本来对应的,我们是编译出来的是 2.6.12.3 ,所以就运行上面的命令创建,创建的出来的是 initrd-2.6.12.3.img ;不创建这个文件,有时是启动不起来的,比如提示 VFS 错误等;
并且用 mkinitrd 来创建 imitrd-xxx.img 文件,其中 xxx 为内核的版本号,是通过 查看 /lib/modules 来版本来对应的,我们是编译出来的是 2.6.12.3 ,所以就运行上面的命令创建,创建的出来的是 initrd-2.6.12.3.img ;不创建这个文件,有时是启动不起来的,比如提示 VFS 错误等;
2 、查看系统引导管理器 grub 或者 lilo 的配置文件。
如果想要让新内核能让系统引导管理器
grub
和
lilo
的菜单上能看得到,必须改
grub.conf
或者
lilo.conf
,但我们必须保留老内核的在
grub
和
lilo
的启动菜单,毕竟我们编内核不能百分百的成功,对不对??安全第一吧;
我只说
grub
的,我没有
lilo
,也不会用。所以咱们还是
GRUB
吧,
FC 4
系统引导管理器是
GRUB
,所以我们谈谈
GRUB
的设置;
查看
/etc/grub.conf
;
比如我的
grub.conf
的内容是这样的;
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,7)
# kernel /boot/vmlinuz-version ro root=/dev/hda8
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
#splashimage=(hd0,7)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,7)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXP
rootnoverify (hd0,0)
chainloader +1
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,7)
# kernel /boot/vmlinuz-version ro root=/dev/hda8
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
#splashimage=(hd0,7)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,7)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXP
rootnoverify (hd0,0)
chainloader +1
我们要把老内核的启动保留下来,以防不测,我们只加入新的内核的启动;所以我加上这样一段;
title Fedora Core (2.6.12.3)
root (hd0,7)
kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.12.3.img
root (hd0,7)
kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.12.3.img
咱们再来看一下改过后的配置文件;
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,7)
# kernel /boot/vmlinuz-version ro root=/dev/hda8
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
#splashimage=(hd0,7)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.12.3)
root (hd0,7)
kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.12.3.img
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,7)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXP
rootnoverify (hd0,0)
chainloader +1
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,7)
# kernel /boot/vmlinuz-version ro root=/dev/hda8
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
#splashimage=(hd0,7)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.12.3)
root (hd0,7)
kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.12.3.img
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,7)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXP
rootnoverify (hd0,0)
chainloader +1
然后重新启动机器,如果出现
VFS
错误,可能就是我写重要的那个地方出了错误;
注意: 如果重新启用内核后,原来安装的显示卡驱动,比如 NVIDIA 和 ATI 的驱动还要重新安装;
相关文档:《Fedora 软件包管理器system-config-packages》
相关文档:《Fedora/Redhat 在线安装更新软件包,yum 篇》
相关文档:《用apt+synaptic 在线安装或升级Fedora core 4.0 软件包》
上一篇:《linux 内核管理概述》
下一篇:《linux file.src.rpm 使用方法的简单介绍 》
<script type="text/javascript"><!--google_ad_client = "pub-2299987709779770";google_ad_width = 468;google_ad_height = 15;google_ad_format = "468x15_0ads_al_s";google_ad_channel ="";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "0000FF";google_color_url = "008000";google_color_text = "000000";//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>注意: 如果重新启用内核后,原来安装的显示卡驱动,比如 NVIDIA 和 ATI 的驱动还要重新安装;
相关文档:《Fedora 软件包管理器system-config-packages》
相关文档:《Fedora/Redhat 在线安装更新软件包,yum 篇》
相关文档:《用apt+synaptic 在线安装或升级Fedora core 4.0 软件包》
<script type="text/javascript"><!--google_ad_client = "pub-2299987709779770";google_ad_width = 728;google_ad_height = 90;google_ad_format = "728x90_as";google_ad_type = "text_image";google_ad_channel ="";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "0000FF";google_color_url = "008000";google_color_text = "000000";//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> |
下一篇:《linux file.src.rpm 使用方法的简单介绍 》