大概在 1999~2000 年期间为了防止自己忘记所作的学习心得纪录!
1999 年初次接触 Unix 系统,1999 年底接触 Red Hat 6.1,而在 2000 开始撰写一些心得文章,于是有了底下这些文本的产生。 这些文本对大家来说,可能没什么,但是对鸟哥来说,这是相当珍贵的!所有鸟站的数据起源,都是从这些文本开始的! 慢慢再将许多的指令分门别类的处理进去!网站的数据汇整,真的相当花费时间啊~
不过对于学习者来说,这些数据真的不要再读了!因为实在太老旧... 建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。最新文章请前往鸟站首页查阅啰!
其实应该在安装完 Linux 之后便开始编译内核,因为每个人所需要的内核都并不相同!举个例子来说,你安装了一个很新的网络卡,但是你的内核并不支持这一种网络卡,那你只好下载比较新的内核来编译,才能支持你的网络卡!另外,由于太大的内核对于整体的运行性能会比较慢,所以适当的内核对于你的 Linux 系统之运行效率也是有帮助的!因此,一般的玩家通常在安装完了 Linux 之后,便开始进行内核的重新编译工作!在 study-area 也曾提到:Linux的灵魂所在﹐其实就是其稳定的内核设计。我们可以将之看成是一个架于程序和硬件之间的界面操作系统﹐离开来内核﹐什么东西都用不了。而内核的编译好坏﹐也会影响到系统的性能﹐甚至﹐一些系统功能(如 ip networking)﹐就必须要编进内核才行。
不过,由于内核的更新速度太快了,如果你一直执著于最新的内核编译,那肯定会吃不消,所以通常我们的建议就是,除非你有新的需求,否则可以不用常常去更新内核的!
[root@tsai
/root]# uname -r
2.2.12-20 |
好啦,那要选择哪一个内核版本呢?目前你可以看到的内核版本主要有 2.2.X, 2.3.X 及 2.4.X,哪一个才适合你呢?我想,既然我们需要的是稳定版的 Linux ,那自然选择越稳定的越好啰,那基本上,所有 2.2.X 及 2.4.X 的都是属于稳定型的内核版本,至于 2.3.X 则是适合开发 Linux 软件的内核!另外,2.4.X并不是比2.2.X还新的意思,基本上,所有 2.2.X 及 2.3.X 与 2.4.X 都是同时开发的内核,只是因为其支持的程度或者是一些功能方面不完全相同,所以才会分成这些版本!而目前我们所想要使用的应该是 2.2.X 这个版本的系列内核,截至目前为止,这一版的最新内核应该是 2.2.19 这一个,当然,你也可以下载其他的内核!
另外,你也可以在我这里下载 linux-2.2.19.tar.gz
这个内核版本。基本上,最好是在系统安装完毕之后马上就进行内核编译工作,免得以后每次装一些特定功能的时候又要花一大轮时间编译。另外要说明的,由于小弟是以
2.2.18 这一版的内核来做升级的动作,所以以下是以 2.2.18 来做示范!
[root@tsai
/root]# cd /usr/src/
[root@tsai src]# rm linux [root@tsai src]# tar -zxvf /root/linux-2.2.18.tar.gz [root@tsai src]# mv linux linux-2.2.18 [root@tsai src]# ln -s linux-2.2.18 linux |
编译内核有许多方法,这里以窗口接口的方法来说明:
- 进入内核目录: cd /usr/src/linux
- 开始设置画面: make menuconfig
- 进入选择项目:
进入选择项目之后,你将会在窗口接口中看到很多的选项,请使用方向键、空白键与 enter 来进行选择。以下开始你要慢慢的详细挑选,如果有任何问题的话,请详细的看一下每一个选项中的 Help 。另外,如果没有需要的话,请尽量不要把内核边的太大!否则性能是会降低的喔!此外,由于很多时候你不晓得需不需要选择这个项目,那你可以将之编成模块(<M> 的项目),模块是在开机加载时有被加载才可以运行的咚咚!所以并不会使性能方面有太大的问题!
- Code maturity level options:请选择。这个项目主要在让你可以接受一些测试的版本的套件。
- Processor type and features:请选择进入,选你的 CPU 形式。
- Processor family:例如鸟哥的 CPU 为 P-166 则我可以选择 Pentium/K6/TSC/CyrixIII 这一项!
- Math emulation:这一项请不要选择,因为这是用软件来仿真硬件的计算内核,因为我们的 CPU 都是 P-100 以后的,所以不用选这项!
- Symmetric multi-processing support:这是是否支持 双CPU 的主板的选项,你可以选择也可以不选择,但如果你使用双CPU主板,这个就一定要选择。
- 其他保持默认值即可。
- Loadable module support:请选择,这是用来是否支持模块加载的。
- Enable loadable module support:请选择。
- Set version information on all symbols for modules:不要选,因为我们可能会具有两种以上的版本的内核,所以这一项不可选择。
- Kernel module loader:请选择。
- General setup:
- Networkking support:一定要选择。
- PCI support:请选择。
- Advanced Power management BIOS support:如果您的BIOS支持APM的话﹐请选择。
- Power off on shutdown:如果您选择了上一个﹐也请选择。
- 其他,保留缺省,或视实际情况设置。 例如我们实验室的机器需要与 SGI 的机器联系,所以就多选择了 SGI Visual Workstation support 这一项。
- Plug and Play support:将之全部选择。
- Block devices:里面放置了一些芯片组的选项,通常以默认值就可以了,不过,如果你的主板是最近的版子,例如 VIA 的 82C586 芯片组,哪就必须进来选择你的芯片组啦!
- Networking options:这是所有项目里面最重要的了,底下的选择
- Network firewalls﹐请选择。
- Socket Filtering﹐请选择。
- TCP/IP networking﹐请选择。
- IP: multicasting﹐请选择。
- IP: advanced router﹐请选择。
- IP: police routing﹐请选择。
- IP: verbose route monitoring﹐请选择。
- IP: firewalling﹐请选择。
- IP: use FWMARK value as routing key﹐请选择。
- IP: transparent proxy support﹐请选择。
- IP: masquerading﹐请选择。
- IP: ICMP masquerading﹐请选择。
- IP: masquerading special modules support﹐请选择。
- IP: ipautofw masq support﹐请选择为 Module。
- IP: ipportfw masq support﹐请选择为 Module。
- IP: ip fwmark masq-forwarding support﹐请选择为 Module。
- IP: optimize as router not host﹐请选择。
- IP: multicast routing﹐请选择。
- IP: aliasing support﹐请选择。
- IPX: Full internal IPX network﹐如果您的网络有Novell服务器﹐请选择。
- IPX: SPX networking﹐如果您的网络有Novell服务器﹐请选择。
- 其他﹐保留缺省﹐或视实际情况设置。
- Telephony Support:保留默认值。
- SCSI support:除非你有 SCSI 的设备,否则可以选择成为 M 的模块型态。
- Network device support:这个也是很重要的选项,与你的网络卡有关!
- Dummy net driver support:非常建议选择。
- Ethernet (10 or 100Mbit):除非您使用其他的网络形态﹐否则这个一定要选择。
- 3 COM cards:除非您的网络卡是这个牌子的﹐否则不选择。
- Western Digital/SMC cards:除非您的网络卡是这个牌子的(或兼容)﹐否则不选择。
- RealTek 8912/8139 (not 8019/9029!) support:除非您的网络卡是这 8912或8139这两个确切型号﹐否则不选择﹐不过﹐也可以选“M”。
- Other ISA cards:如果您有ISA网卡的话﹐可以选择。
- NE2000/NE1000 support:如果您不知道您的网络卡型号﹐这个可以试试选择。
- EISA, VLB, PCI and on board controllers:请选择。
- PCI NE2000 support:如果您用的是PCI网络卡﹐又不知道型号﹐这个可以试试选择。
- EtherExpressPro/100 support:如果您有此类网卡﹐请选择。
- Pocket and protable adaptors:如果您使用PCMCIA网卡﹐可以试试选择。
- 基本上在这个选项当中,就是选你有的网络卡的形式就对了!
- FDDI driver support:如果您没用使用FDDI﹐请不要选择。
- Frame relay DLCI support:如果您没用使用Frame relay﹐请不要选择。
- PPP (point-to-point) support:这个一定要选择。
- SLIP (serial line) support:如果您知道您ISP使用SLIP﹐可以选择。
- Token Ring driver support:如果您的网络不是这个形态﹐请不要选择。
- 至于其他﹐如果确定不使用的﹐就不要选择﹐如果不确定﹐可以保留缺省﹐或将之设成“M”。
- Amateur Radio support :有才选择,通常不选。
- IrDA (infrared) support:有才选择,通常不选。
- ISDN subsystem:有才选择,通常不选。
- Old CD-ROM drivers (not SCSI, not IDE):有才选择,通常不选。
- Character devices:有才选择,通常不选。
- USB support:有才选择,通常不选。
- Filesystems:这个与你的 Linux 系统可支持的文件型态有关,一定要进来选择。
- Quota support:请选择。
- DOS FAT fs support:请选择。
- MSDOS fs support:请选择。
- VFAT (Windows-95) fs support:请选择。
- ISO 9660 CDROM filesystem support:请选择。
- Microsoft Joliet CDROM extensions:请选择。
- NTFS filesystem support (read only):请选择。
- OS2/HPFS filessystem support (read only):如果您的机器还有OS/2系统﹐请选择。
- Network File Systems:请展开﹐喜欢的话﹐可以全部选择﹐但我们只关心‘NFS’和‘SMB’的部分。
- Partition Types:除非您找到相关项目﹐否则可以不理会。
- Native Language Support:请展开﹐然后选择﹕
- Codepage 850
- Codepage 950
- NLS ISO 8859-1
- Console drivers:除非您确定﹐否则保留缺省。
- Sound:如果您用的是Creative的SB16﹐或兼容声卡﹐可以不理会。
- Kernel hacking:保留缺省则可。
这样就编完了,请按下『exit』然后选择 save 后,即可离开窗口画面。
- 更改前一版的模块目录:
再来则是要开始让系统编译你刚刚设置的内核了,此时请注意,如果你使用的内核版本之前你已经有编过一次了,那样的话,在 /lib/modules 这个目录中应该会有前一版的模块,这时请到这个目录下将该内核目录更改名称。不过我们这里由于是第一次编译内核,所以在 /ib/modules 里面应该只有 2.2.12-20 这个目录,因此这一步就不用作了。
这个时候要开始编译我们的内核了,其实也是很简单,直接运行以下几个步骤即可:
[root@tsai linux]# make dep
[root@tsai linux]# make clean
[root@tsai linux]# make modules
这个步骤要花点时间的,所以按下 enter 后就可以去看电视了!
[root@tsai linux]# make modules_install
[root@tsai linux]# make bzImage
这个步骤是最久的一步,也请你去喝个茶吧!
这时才开始编译内核。其实有两种编译内核的方法,
分别是 make bzImage 及 make zImage,有何不同?
在 bzImage 编译的内核是经过压缩的,由于我们目前编的内核
都蛮大的,所以需要 bzImage 这个指令,如果你选择的内核很小,
就可以使用 make zImage 了(据说比较快一点)。
[root@tsai linux]# make bzlilo
最后一动啦,将内核安装在硬盘之上。在运行 make modules_install 后,会在你的 /lib/modules 形成一个专属于这个内核的模块目录,而在运行 make bzImage 成功之后,会在你的根目录造成两个重要的文件,就是我们最重要的内核开机程序了,分别是:vmlinuz 及 System.map 这两个文件。
好了,编译完就是要安装啦!由于害怕刚刚编译完的内核不能正常的开机,所以通常鸟哥都是手动来设置成多重开机的菜单,好让我们如果发生错误的设置,可以直接再次开机来进入 Linux 系统。编译内核有时候会遇到许多麻烦﹐尤其是当您从一个旧的版本升级上来。建议您看看 kernel-HOWTO 和 modules mini-howto 之外﹐还应该看看 /usr/src/linux/Documentation 里面的文章﹐尤其是 Changes?modules.txt?kmod.txt 等。而且﹐在编译(make menuconfig)的过程中﹐对任何不明白的选项﹐应该看看 Help 是怎么说的﹐这非常重要。
- 移动两个主要的开机档到 /boot 中:并加以更改名称
如此一来,则你的开机运行的 System.map 会找寻 2.2.18 这一版的信息!
[root@tsai linux]# cd /
[root@tsai /]# mv System.map /boot/System.map-2.2.18
[root@tsai /]# mv vmlinuz /boot/vmlinux-2.2.18
[root@tsai /]# cd /boot
[root@tsai /boot]# rm System.map
[root@tsai /boot]# ln -s System.map-2.2.18 System.map
- 编辑你的 /etc/lilo.conf 多重开机设置档:
这里就必须比较小心了,因为设置错误会让你开不了机的!只要设置一个文件就好了,那就是 /etc/lilo.conf 这个文件。重要的地方在于 default=linux-2.2.18 这一行,以及 image=/boot/vmlinuz-2.2.18 两行,需要指定正确才行!基本上这样就设置成功了!
[root@tsai /boot]# vi /etc/lilo.conf
进入 vi 的编辑画面,原始的 lilo.conf 有点像这样:
----
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linuximage=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-20.img
read-only
root=/dev/hda5other=/dev/hda1
label=windows
----
关于上述个相关的咚咚你可以到 设置lilo 去看,
而经过修改之后可以变成像是这样:
----
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux-2.2.18 <==缺省以 2.2.18 开机image=/boot/vmlinuz-2.2.12-20
label=linux-2.2.12-20
initrd=/boot/initrd-2.2.12-20.img
read-only
root=/dev/hda5image=/boot/vmlinuz-2.2.18 <==这是新的内核喔!
label=linux-2.2.18
read-only
root=/dev/hda5other=/dev/hda1
label=windows
- 启动 lilo :
这个时候请打入:你会看到如上的说明,可以看到 linux-2.2.18 有打星号,这表示缺省的开机档是以 linux-2.2.18 的内核来开机的!
[root@tsai /boot]# lilo
Added linux-2.2.12-20
Added linux-2.2.18 *
Added windows
- 重新开机:
现在你可以重新开机来测试一下你的内核了!当然,你也可以在开机过程中,出现 boot 时按下 tab 键,让你选择你要的开机档!
- 换回旧内核:
如果内核使用的不满意怎么办?你可以如此的换回来原先的内核:
- 进入 /boot 中,将 System.map 的链接档换成 System.map-2.2.12-20 这一个,
- 编辑 /etc/lilo.conf 文件,将缺省的开机档改成 linux-2.2.12-20 ,
- 最后再运行 lilo 即可!
另外,由于编译内核并以新的内核开机之后,所有的模块都会到新的目录去,如以上面的例子来看,以新的内核开机时,模块的加载会跑到 /lib/modules/2.2.18 中,所以如果你的网络卡不是模块中有的,而是自己安装的,那你得在重新安装一次到新的目录中,否则你的网络将无法连接喔!