|
|
 |
|
|
1. 第二篇:Linux内核(Linux Kernel)篇 |
  |
|
 |
|
HP : 1029 / 1715
MP : 4138 / 29491
EXP : 61%
|
|
rotartsinimdA
           
成员等级: 69
发表总数: 12416
金币总数: 429
所属组别: 管理员
注册日期: 2003/01/1

|
第二篇:Linux Kernel
提起Linux内核(Linux Kernel),网络上有大量的文章讨论如何编译内核,在此,xxbin并不会详细说明整个编译的细节,细节问题请查阅Linux Kernel HOW-TO。
为什么要自己编译内核? 1> 发行版自带的内核版本不够高,或者有漏洞和bug; 2> 发行版自带的内核不是为你的CPU优化的,比如redhat通常的内核都是for i386的,如果你用高档的芯片,芯片的性能就没有完全发挥出来; 3> 发行版自带的内核太过大众化,不是为你的机器优化的,如果你还用着发行版自带的内核,你可以试着运行一下lsmod,肯定会列出一堆模块,比如网卡的驱动、甚至是文件系统模块等等。 4> 发行版自带的内核提供的功能不能满足你的要求,比如你要用Linux做一个文件服务器,想用IBM的EVMS来做卷管理,想用IBM JFS for Linux来做文件系统,那么你肯定得自己重新编译内核了。 5> more and more
上面提到过Linux内核的版本,在这里有必要解释一下,Linux的内核分两种,一种是stable版本的,就是稳定版,稳定版从1.0.x开始而且目前是以偶数编号发表的; 象1.0.x/1.2.x/2.0.x /2.2.x/2.4.x等都是稳定版,另外一种版本是测试版,即发展中的内核 (1.1.x/1.3.x/2.1.x/2.3.x/2.5.x等等), 专门作为测试用的,如果你是想玩玩测试版内核的新功能倒是没有问题,但是如果用Linux来跑一些比较重要的应用,xxbin强烈建议你用稳定版的内核,在这篇文章写的时候,The latest stable version of the Linux kernel is: 2.4.20 。 
针对我们上面提出的问题,我们需要对我们的内核做一些优化工作:
1> 发行版自带的内核版本不够高,或者有漏洞和bug; 在通常情况,应该选择最后的稳定版本内核,比如现在我们应该选择2.4.20
2> 发行版自带的内核不是为你的CPU优化的 在编译内核的时候,注意选择最符合你的CPU型号的选项。(新版本的内核在config的时候会自己选择)
3> 发行版自带的内核太过大众化,不是为你的机器优化的 首先,运行lsmod,看看你的发行版的内核用了哪些模块,哪些模块是你必须要用的?编译内核在选择某个功能是编译成模块还是编译进内核的一个原则就是看你是否频繁的需要这个功能,比如网卡驱动,SCSI驱动,文件系统等,就不应该编译成模块。
OK, step by step
下载内核源代码 建议从 http://www.kernel.org/ 下载你所需要的内核源代码,比如xxbin现在选择的是2.4.20 wget http://www.kernel.org/pub/linux/kernel/v2....-2.4.20.tar.bz2 tar -xvjf linux-2.4.20.tar.bz2
确定我们需要的功能和模块 运行 dmesg 来查看你的机器的硬件配置,这里我们关注的是CPU内型,网卡具体型号,SCSI/RAID卡型号(如果有的话 ),并把它们纪录下来。 比如我们论坛的机器:
CPU: Intel Pentium III (Katmai) stepping 03 agpgart: Detected Intel 440BX chipset agpgart: AGP aperture is 64M @ 0xe0000000 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx PIIX4: IDE controller on PCI bus 00 dev 39 hda: QUANTUM FIREBALL CR4.3A, ATA DISK drive hdc: IBM-DPTA-372050, ATA DISK drive hdd: ATAPI CD-ROM DRIVE 32X MAXIMUM, ATAPI CD/DVD-ROM drive eth0: VIA VT6102 Rhine-II at 0xe400, 00:05:5d:a5:06:6f, IRQ 10.
很简单,我们用PIII的CPU,440BX的主板,显卡是AGP的,用的是普通的IDE硬盘和光驱,IDE控制芯片是PIIX4的,网卡型号是VIA VT6102 Rhine-II。 或许有人会问——声卡呢?显卡的具体型号呢? 注意一点,我们是在配置服务器,对于服务器来说,内核越精简越好,服务器有个普通的显卡驱动能看到字符界面就可以了,声音嘛,有个PC喇叭也就OK了。
运行mount来看看我们用了什么文件系统: 结果是我们的机器都是用ext3文件系统的,不过需要注意的是,现在的内核启动的时候都需要Initial RAM disk(initrd)的支持,就是说内核在最初启动的时候会建立一个RAMDISK,然后把一个小的initrd image解压到RAMDISK中,先用这个RAMDISK做一些初始化的工作,最后才会chroot到硬盘上的系统。 因此我们需要 ext3 ext2(initrd所需) initrd
配置Linux Kernel选项 在Linux Kernel src目录下运行: make menuconfig 启动字符菜单方式的Kernel配置(这一步看个人喜好,有的人喜欢make config)
在Processor type and features选项里面选择你机器的CPU型号,这里就是(Pentium-III/Celeron(Coppermine)) Processor family 在General setup选项里面去掉 ISA bus support,因为我们没有用到ISA的卡 在Plug and Play configuration选项里面去掉<*> ISA Plug and Play support 进入Block devices选项,按照下面进行选择:
| CODE | <*> Normal floppy disk support < > XT hard disk support < > Compaq SMART2 support < > Compaq Smart Array 5xxx support < > Mylex DAC960/DAC1100 PCI RAID Controller support <M> Loopback device support <M> Network block device support <*> RAM disk support (4096) Default RAM disk size (NEW) [*] Initial RAM disk (initrd) support
|
在这里解释一下,如果你需要一些磁盘阵列或者RAID的支持,那些有关阵列的选项需要关注一下,Loopback device的支持是为了能够直接mount ISO/FS的映像文件,Network block device的支持是为了网络文件系统,因为这两个东西都不是必需的,因此选择成为模块,而RAM disk是必需的(RAM Disk size一般不会超过4096KB,取决于你的initrd映像文件大小),并且需要initrd,因此这两个我们直接编译进入内核。
在ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices中,选择你的IDE芯片,在这里是Intel PIIXn chipsets support。
如果你有SCSI卡,可以在SCSI support -> SCSI low-level drivers选择你的型号的SCSI支持。
内核中Multi-device support (RAID and LVM)的配置都是有关LVM和软件RAID的选项,xxbin将在下一篇有关FS/LVM的文章中详细描述。
在Network device support->Ethernet (10 or 100Mbit)中选择我们的网卡驱动(在这里是VIA Rhine support),并且去掉PCMCIA network device support。 在Character devices选项中,选择/dev/agpgart (AGP Support),并且选择Intel 440LX/BX/GX and I815/I820/I830M/I830MP/I840/I845/I850/I860 support,去掉Intel I810/I815/I830M (on-board) support、VIA chipset support、AMD Irongate, 761, and 762 support、Generic SiS support和ALI chipset support等芯片的支持;并且去掉Direct Rendering Manager (XFree86 DRI support)选项。
在File systems选项中,选择ext3和ext2,并且编译进入内核,把ISO9660选择成为模块方式。
最后去掉所有有关Sound、USB support和Bluetooth support的支持。
一切配置好之后保存配置。
编译Linux Kernel 运行: make dep (确保所有的依赖关系没有问题,比如include文件) make mrproper (做最干净的清除动作,可以删除原有的.o文件) make bzImage (建立压缩的内核映像,编译完成之后你可以从arch/i386/boot(x86 PC 内核)目录下找到 bzImage 文件) make modules (编译模块) make modules_install (安装模块,模块被安装到 /usr/lib/<内核版本号>目录下)
制作新的initrd
cp /boot/initrd-2.4.18.img /tmp/initrd.gz
这里的initrd-2.4.18.img是发行版自带的initrd(也可以利用/sbin/mkinitrd命令自己来做一个),因为发行版把ext3的支持编译成为模块的,并在自带的initrd里面load了这些模块,我们修改了内核的配置,因此也要改改initrd。
cd /tmp gzip -d initrd.gz (接压initrd映像文件) mount -o loop -t ext2 initrd /mnt/ (使用loopback方式mount解压后的initrd映像) cd mnt (进入mount起来的initrd文件系统) vi linuxrc 编辑initrd的启动文件linuxrc,去掉一些insmod和modprobe的语句(因为很多东西我们都直接编译进入内核了),xxbin的linuxrc文件如何,仅供参考:
| CODE | #!/bin/nash echo Mounting /proc filesystem mount -t proc /proc /proc echo Creating root device mkrootdev /dev/root echo 0x0100 > /proc/sys/kernel/real-root-dev echo Mounting root filesystem mount --ro -t ext3 /dev/root /sysroot umount /proc pivot_root /sysroot /sysroot/initrd
|
cd /tmp (退出/mnt目录,以便umount) umount /mnt gzip -9 /tmp/initrd cp /tmp/initrd.gz /boot/initrd-2.4.20.img
配置使用新内核并重新启动
cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20 vi /etc/lilo.conf
编辑/etc/lilo.conf文件,加入一节
| CODE | image=/boot/vmlinuz-2.4.20 label=linux-2.4.20 initrd=/boot/initrd-2.4.20.img read-only root=/dev/hda5
|
注意上面的root=选项,请填写你自己的root分区。
lilo -v (刷新lilo配置)
(因为xxbin喜欢用lilo,因此这里用lilo来做范例,如果你是用其它的BOOT Loader,请自己查资料)
到现在为止,内核的编译和配置基本上完成了,我们所要做的就是reboot机器选择使用新的内核。 
reboot 重起之后在LILO上选择使用新的内核,如果顺利的话,屏幕在显示一堆信息之后会显示Login:提示符让你登陆。 登陆进去之后用dmesg看看启动信息是否有问题,如果一切OK的话就大功告成了。
这样我们就有了一个纯银打造的内核了! (什么才算白金内核?请听下回分解。 coming soon...)

 xxbin@netbuddy.org |
 |
|
|
| 2. Re:xxbin的Linux安装调试笔记 |
  |
|
 |
|
HP : 82 / 827
MP : 542 / 13896
EXP : 11%
|
|
名动江湖
           
成员等级: 34
发表总数: 1627
金币总数: 253
所属组别: Team4Linux
注册日期: 2003/02/21

|
好啊!好啊!!
 一是热情,二是执着! |
 |
|
|
| 3. RE: xxbin的Linux安装调试笔记 |
  |
|
 |
|
HP : 1029 / 1715
MP : 4138 / 29491
EXP : 61%
|
|
rotartsinimdA
           
成员等级: 69
发表总数: 12416
金币总数: 429
所属组别: 管理员
注册日期: 2003/01/1

|
| QUOTE | 好啊!好啊!!  |
呵呵,你可能更希望看到apache/proftpd/postfix整合的文章吧? 不过偶的下一篇是关于LVM/FS的。 

 xxbin@netbuddy.org |
 |
|
|
| 4. Re:第二篇:Linux内核(Linux Kernel)篇 (xxbin的Linux安装调试笔记)... |
  |
|
 |
|
HP : 82 / 827
MP : 542 / 13896
EXP : 11%
|
|
名动江湖
           
成员等级: 34
发表总数: 1627
金币总数: 253
所属组别: Team4Linux
注册日期: 2003/02/21

|
你怎么知道?我真是FT!不过,我已经装好了bsd4.7了.等不及你了. 不过,对你binbin老大这种无私的精神我还是要拍马屁的.感谢xxbin的引领!!要我感受到GPL的精神!!!
 一是热情,二是执着! |
 |
|
|
| 5. Re:第二篇:Linux内核(Linux Kernel)篇 (xxbin的Linux安装调试笔记)... |
  |
|
 |
|
HP : 82 / 827
MP : 542 / 13896
EXP : 11%
|
|
名动江湖
           
成员等级: 34
发表总数: 1627
金币总数: 253
所属组别: Team4Linux
注册日期: 2003/02/21

|
建议加入精华的说!!
 一是热情,二是执着! |
 |
|
|
| 6. RE: 第二篇:Linux Kernel (xxbin的Linux安装调试笔记)... |
  |
|
 |
|
HP : 1029 / 1715
MP : 4138 / 29491
EXP : 61%
|
|
rotartsinimdA
           
成员等级: 69
发表总数: 12416
金币总数: 429
所属组别: 管理员
注册日期: 2003/01/1

|
| QUOTE | 你怎么知道?我真是FT!不过,我已经装好了bsd4.7了.等不及你了. 不过,对你binbin老大这种无私的精神我还是要拍马屁的.感谢xxbin的引领!!要我感受到GPL的精神!!! ;) ;) ^_^ ^_^ |
呵呵,如果要用Linux做服务器,需要做很多修改和优化工作,在这些优化工作还未完成之前,最好不要安装别的一些软件。
PS: 偶把xxbin的Linux安装调试笔记单独开了一个主题,并在这个主题里面做了文章联结。

 xxbin@netbuddy.org |
 |
|
|
| 7. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 243 / 1217
MP : 1496 / 20847
EXP : 70%
|
|
测试中......
           
成员等级: 49
发表总数: 4488
金币总数: 279
所属组别: 核心成员
注册日期: 2003/01/10

|
顶~~

 |
 |
|
|
| 8. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 91 / 919
MP : 706 / 15808
EXP : 79%
|
|
NBO幼儿园文宣组组长
           
成员等级: 37
发表总数: 2119
金币总数: 252
所属组别: 核心成员
注册日期: 2003/01/2

|
up
 《红楼梦》我看了五遍,也没有受影响,我是把它当历史读的……《红楼梦》里阶级斗争很激烈,有好几十条人命。 |
 |
|
|
| 9. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 92 / 924
MP : 714 / 15873
EXP : 96%
|
|
名动江湖
           
成员等级: 37
发表总数: 2144
金币总数: 197
所属组别: 核心成员
注册日期: 2003/01/3

|
这个一定要顶。 |
 |
|
|
| 10. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 399 / 1332
MP : 1933 / 22813
EXP : 30%
|
|
媾懑镎卅伊
           
成员等级: 54
发表总数: 5800
金币总数: 6,902
所属组别: 核心成员
注册日期: 2003/01/10

|
very good!
 Keep Walking... |
 |
|
|
| 11. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 0 / 21
MP : 3 / 339
EXP : 86%
|
|
新手上路

成员等级: 1
发表总数: 9
金币总数: 27
所属组别: 普通成员
注册日期: 2003/07/17

|
支持 |
 |
|
|
| 12. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 0 / 648
MP : 304 / 9927
EXP : 94%
|
|
名动江湖
           
成员等级: 26
发表总数: 913
金币总数: 214
所属组别: 高级成员
注册日期: 2003/08/25

|
真的不错,刚学习linux,看了这些,真是,真是没得说了。在此感谢xxbin

 蟠龙岂是池中物,一遇风云即化龙; 九霄龙吟惊天变,风云忌讳潜水游。 成也风云, 败也风云; |
 |
|
|
| 13. Re: 第二篇:Linux内核(Linux Kernel)篇 |
  |
|
 |
|
HP : 0 / 200
MP : 33 / 3086
EXP : 0%
|
|
江湖异人
       
成员等级: 9
发表总数: 100
金币总数: 151
所属组别: 普通成员
注册日期: 2003/08/9

|
不错~~~ 很详细~~ 还可以补充个netfilter/iptables的配置,里面很多模块也是很有趣的哦~~
 骏马啊,你四条腿。 大海啊,你全是水。 |
 |
|
|
| 14. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 0 / 163
MP : 24 / 1884
EXP : 53%
|
|
江湖游侠
     
成员等级: 7
发表总数: 74
金币总数: 101
所属组别: 普通成员
注册日期: 2004/12/7

|
跟一个,啃骨头ing…………
 知我者谓我心忧,不知我者谓我何求!
|
 |
|
|
| 15. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 0 / 325
MP : 75 / 4299
EXP : 1%
|
|
名动江湖
           
成员等级: 14
发表总数: 225
金币总数: 258
所属组别: 中级成员
注册日期: 2004/05/12

|
学习 |
 |
|
|
| 16. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 82 / 827
MP : 542 / 13896
EXP : 11%
|
|
名动江湖
           
成员等级: 34
发表总数: 1627
金币总数: 253
所属组别: Team4Linux
注册日期: 2003/02/21

|
我其实到现在都想知道什么是白金内核,XXBIN能不能用语言说说,如果你没空写过程的话。等了有几年了,那些coming soon还是.....,呵呵
 一是热情,二是执着! |
 |
|
|
| 17. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记) |
  |
|
 |
|
HP : 0 / 194
MP : 32 / 2853
EXP : 78%
|
|
武林侠客
      
成员等级: 8
发表总数: 96
金币总数: 43
所属组别: 普通成员
|