欢迎访客 ( 登陆 | 注册 )

论坛索引 | 最新主题 | 热门主题 | 搜索论坛 | 成员列表 | 在线帮助

 
第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
« 上一篇主题 | 下一篇主题 » 跟踪主题 | 邮寄主题 | 打印主题
  xxbin 离线 荣誉奖品 (1)
  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 smile.gif

针对我们上面提出的问题,我们需要对我们的内核做一些优化工作:

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卡型号(如果有的话 smile.gif ),并把它们纪录下来。
比如我们论坛的机器:

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 &nbsp;


    在这里解释一下,如果你需要一些磁盘阵列或者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机器选择使用新的内核。 biggrin.gif

    reboot
    重起之后在LILO上选择使用新的内核,如果顺利的话,屏幕在显示一堆信息之后会显示Login:提示符让你登陆。
    登陆进去之后用dmesg看看启动信息是否有问题,如果一切OK的话就大功告成了。

    这样我们就有了一个纯银打造的内核了! (什么才算白金内核?请听下回分解。 coming soon...)


    user posted image
    xxbin@netbuddy.org
  • 发表于2003/03/15, 17:50
        Top
      天天 离线
    2. Re:xxbin的Linux安装调试笔记
    HP : 82 / 827
    MP : 542 / 13896
    EXP : 11%
    名动江湖


    成员等级: 34
    发表总数: 1627
    金币总数: 253
    所属组别: Team4Linux
    注册日期: 2003/02/21

    好啊!好啊!! biggrin.gif


    一是热情,二是执着!
    发表于2003/03/15, 17:52
           Top
      xxbin 离线 荣誉奖品 (1)
    3. RE: xxbin的Linux安装调试笔记
    HP : 1029 / 1715
    MP : 4138 / 29491
    EXP : 61%
    rotartsinimdA


    成员等级: 69
    发表总数: 12416
    金币总数: 429
    所属组别: 管理员
    注册日期: 2003/01/1

    QUOTE
    好啊!好啊!! biggrin.gif


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



    user posted image
    xxbin@netbuddy.org
    发表于2003/03/15, 18:02
        Top
      天天 离线
    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了.等不及你了.smile.gif不过,对你binbin老大这种无私的精神我还是要拍马屁的.感谢xxbin的引领!!要我感受到GPL的精神!!! wink.gif wink.gif wink.gif happy.gif happy.gif


    一是热情,二是执着!
    发表于2003/03/15, 18:09
           Top
      天天 离线
    5. Re:第二篇:Linux内核(Linux Kernel)篇 (xxbin的Linux安装调试笔记)...
    HP : 82 / 827
    MP : 542 / 13896
    EXP : 11%
    名动江湖


    成员等级: 34
    发表总数: 1627
    金币总数: 253
    所属组别: Team4Linux
    注册日期: 2003/02/21

    建议加入精华的说!!


    一是热情,二是执着!
    发表于2003/03/15, 18:10
           Top
      xxbin 离线 荣誉奖品 (1)
    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了.等不及你了.smile.gif不过,对你binbin老大这种无私的精神我还是要拍马屁的.感谢xxbin的引领!!要我感受到GPL的精神!!! wink.gif &nbsp;;) &nbsp;;) &nbsp;^_^ &nbsp;^_^


    呵呵,如果要用Linux做服务器,需要做很多修改和优化工作,在这些优化工作还未完成之前,最好不要安装别的一些软件。

    PS: 偶把xxbin的Linux安装调试笔记单独开了一个主题,并在这个主题里面做了文章联结。


    user posted image
    xxbin@netbuddy.org
    发表于2003/03/15, 18:14
        Top
      bug 离线
    7. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 243 / 1217
    MP : 1496 / 20847
    EXP : 70%
    测试中......


    成员等级: 49
    发表总数: 4488
    金币总数: 279
    所属组别: 核心成员
    注册日期: 2003/01/10

    顶~~


    user posted image
    发表于2003/03/15, 21:28
          Top
      user 在线
    8. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 91 / 919
    MP : 706 / 15808
    EXP : 79%
    NBO幼儿园文宣组组长


    成员等级: 37
    发表总数: 2119
    金币总数: 252
    所属组别: 核心成员
    注册日期: 2003/01/2

    up biggrin.gif


    《红楼梦》我看了五遍,也没有受影响,我是把它当历史读的……《红楼梦》里阶级斗争很激烈,有好几十条人命。
    发表于2003/03/16, 13:55
           Top
      ghost 离线
    9. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 92 / 924
    MP : 714 / 15873
    EXP : 96%
    名动江湖


    成员等级: 37
    发表总数: 2144
    金币总数: 197
    所属组别: 核心成员
    注册日期: 2003/01/3

    这个一定要顶。
    发表于2003/03/18, 23:55
            Top
      一只大偶尔 离线
    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...
    发表于2003/03/19, 09:55
          Top
      dragonszr 离线
    11. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 0 / 21
    MP : 3 / 339
    EXP : 86%
    新手上路


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

    支持
    发表于2003/07/17, 10:58
         Top
      意鸣 离线
    12. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 0 / 648
    MP : 304 / 9927
    EXP : 94%
    名动江湖


    成员等级: 26
    发表总数: 913
    金币总数: 214
    所属组别: 高级成员
    注册日期: 2003/08/25

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


    user posted image
    蟠龙岂是池中物,一遇风云即化龙;
    九霄龙吟惊天变,风云忌讳潜水游。
    成也风云, 败也风云;
    发表于2003/08/29, 13:52
          Top
      小冬 离线
    13. Re: 第二篇:Linux内核(Linux Kernel)篇
    HP : 0 / 200
    MP : 33 / 3086
    EXP : 0%
    江湖异人


    成员等级: 9
    发表总数: 100
    金币总数: 151
    所属组别: 普通成员
    注册日期: 2003/08/9

    不错~~~
    很详细~~
    还可以补充个netfilter/iptables的配置,里面很多模块也是很有趣的哦~~


    骏马啊,你四条腿。
    大海啊,你全是水。
    发表于2003/08/29, 18:53
         Top
      kinguo` 离线
    14. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 0 / 163
    MP : 24 / 1884
    EXP : 53%
    江湖游侠


    成员等级: 7
    发表总数: 74
    金币总数: 101
    所属组别: 普通成员
    注册日期: 2004/12/7

    跟一个,啃骨头ing…………



    知我者谓我心忧,不知我者谓我何求!
    发表于2004/12/8, 23:02
         Top
      sailor 离线
    15. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 0 / 325
    MP : 75 / 4299
    EXP : 1%
    名动江湖


    成员等级: 14
    发表总数: 225
    金币总数: 258
    所属组别: 中级成员
    注册日期: 2004/05/12

    学习
    发表于2005/05/20, 15:38
         Top
      天天 离线
    16. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 82 / 827
    MP : 542 / 13896
    EXP : 11%
    名动江湖


    成员等级: 34
    发表总数: 1627
    金币总数: 253
    所属组别: Team4Linux
    注册日期: 2003/02/21

    我其实到现在都想知道什么是白金内核,XXBIN能不能用语言说说,如果你没空写过程的话。等了有几年了,那些coming soon还是.....,呵呵


    一是热情,二是执着!
    发表于2007/11/21, 15:02
           Top
      nc555 离线
    17. Re:第二篇:Linux Kernel (xxbin的Linux安装调试笔记)
    HP : 0 / 194
    MP : 32 / 2853
    EXP : 78%
    武林侠客


    成员等级: 8
    发表总数: 96
    金币总数: 43
    所属组别: 普通成员