LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2678|回复: 0

Debian参考手册 第七章 Debian下的Linux内核

[复制链接]
发表于 2003-2-19 14:52:12 | 显示全部楼层 |阅读模式
Debian参考手册

~~~~~~~~~~~~~
第七章 Debian下的Linux内核
~~~~~~~~~~~~~

Debian运用自己的方式来编译内核及相关模块。参阅〖2.7 Debian和系统内核〗。



7.1 内核编译
============
Debian unstable发行版中的gcc、binutils和modutils可用来编译最新的Linux内核。这方面的官方信息,参阅/usr/share/doc/kerenl-package/README.gz文件的后半部分。

内核编译是个很困难的议题,由于目标在不断的变化,即使是最受人尊敬的开发者也会有不同的见解:

Manoj Srivastava写到:
    --initrd需要Debian专用cramfs补丁。
Herbert Xu写到:
    不,它不需要,想使用除CRAMFS以外的文件系统只需在/etc/mkinitrd/mkinitrd.conf中设置MKIMAGE。

按照Manoj和Kent撰写的/usr/share/doc/kernel-package/README.gz的指导小心行事,如果要编译最新版本的内核请确认安装了最新unstable版kernel-package软件包。

对于单机内核编译,initrd不是必须的。我用它是希望我新编译的内核与相应的内核镜像一模一样。如果使用initrd,请先阅读一下mkinitrd(8)和mkinitrd.conf(5)。亦可参阅http://bugs.debian.org/149236。

7.1.1 Debian标准方式
--------------------
关心一下有关kernel-package、gcc、binutils和modutils的错误报告。如果有必要应使用最的版本。

在Debian系统中用源码编译自定义内核要特别小心。用make-kpkg的--append_to_version选项来创建多重内核镜像比较安全。

    # apt-get install debhelper modutils kernel-package libncurses5-dev
    # apt-get install kernel-source-2.4.18   # 使用最新版本
    # apt-get install fakeroot
    # vi /etc/kernel-pkg.conf                # 输入我的名字和email
    $ cd /usr/src                            # 创建目录
    $ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2
    $ cd kernel-source-2.4.18                # 如果这是你的内核源码
    $ cp /boot/config-2.4.18-386 .config     # 将当前配置设定为默认配置
    $ make menuconfig                        # 按自己的喜好来定制
    $ make-kpkg clean                        # 必须执行这步(per: man make-kpkg)
    $ fakeroot make-kpkg --append_to_version -486 --initrd \
            --revision=rev.01 kernel_image \
            modules_image # modules_image可以是pcmcia-cs*等。
    $ cd ..
    # dpkg -i kernel-image*.deb pcmcia-cs*.deb # 安装

make-kpkg kernel_image实际上执行了make oldconfig和make dep。如果没使用initrd就不要使用--initrd选项。

如果想加载pcmcia-cs模块或没有pcmcia,应该在make menuconfig后选“General setup -->”进入“PCMCIA/CardBus support -->”,配置“<>CMCIA/CardBus support”选项(例如,取消复选项)。

对于SMP机器,参照kernel-pkg.conf(5)的说明设置CONCURRENCY_LEVEL。

7.1.2 经典方式
--------------
从下列地址获得干净的源代码:

    ·Linux: http://www.kernel.org/
    ·pcmcia-cs: http://pcmcia-cs.sourceforge.net/

或使用Debian所附的等价的源代码:

    # cd /usr/src
    # tar xfvz linux-whatever.tar.gz
    # rm -rf linux
    # ln -s linux-whatever linux
    # tar xfvz pcmcia-cs-whatever.tar.gz
    # ln -s pcmcia-cs-whatever pcmcia
    # cd linux
    # make menuconfig
    ... 配置内核选项 ...
    # make dep
    # make bzImage
    ... 编辑lilo/grub ...
    ... 移动/usr/src/linux/arch/i386/boot/bzImage到boot ...
    ... /sbin/lilo or whatever you do for grub
    # make modules; make modules_install
    # cd ../pcmcia
    # make config
    # make all
    # make install
    ... 添加需要的模块名称到/etc/modules
    # shutdown -r now
    ... 启动到新内核 ...

7.1.3 内核头文件
----------------
绝大多数“普通”程序不需要内核头文件,事实上如果直接引用它们会出错。这些程序应该引用那些编译glibc所用的头文件,它们位于Debian系统的/usr/include/linux和/usr/include/asm目录下。

故不要在/usr/src/linux目录中创建指向/usr/include/linux和/usr/include/asm的链接,一些过时的文档曾建议创建它们。

如果某些内核类应用程序需要特定的内核头文件,可修改Makefile(s),使其包含指向“特定内核头文件目录/include/linux”和“特定内核头文件目录/include/asm”的路径。



7.2 模块化的2.4内核
===================
kerntl-mage-2.4.NN提供了新版的Debian 2.4内核,该版内核模块化程度极高。你必须激活相关的模块才能获得想要的内核功能。

尽管在接下来的部分中提供了许多通过配置/etc/modules来解决问题的样例,但据说,在/etc/modutils/中用一个文件来提供所有的设备别名,就可解决这类有关模块问题,当前的内核有足够多的别名供你使用。

参阅Linux内核源码目录中的Documentation/*.txt获取详细信息。

7.2.1 PCMCIA
------------
要使用PCMCIA,需在/etc/modules中包含下列内容:

    # ISA PnP driver
    isa-pnp
    # Low level PCMCIA driver
    # yenta_socket # 我的机器上似乎不需要

剩下的工作就由PCMCIA脚本(来自pcmcia-cs软件包)、depmod和kmod负责了。我需要isa-pnp因为我的笔记本电脑使用的是旧ISA-PCMCIA。较新的笔记本电脑使用CardBus/PCMCIA,不再需要它。

慷慨的Miquel van Smoorenburg(miquels@cistron.nl)说:

“我将笔记中所有有关pcmcia的东西包括cardmgr等一鼓脑全删了,只装了支持cardbus的2.4版内核和woody中新的hotplug软件包。

只要你使用的是32-bit卡,你就不需要pcmcia软件包;2.4内置了cardservices。标准的tulip驱动亦可在dlink卡上正常工作。

——Mike。”

7.2.2 SCSI
----------
[没有测试过]想要SCSI工作,请在/etc/modules中包含如下内容:

    # SCSI core
    scsi_mod
    # SCSI generic driver
    sg
    # SCSI disk
    sd_mod
    # All other needed HW modules
    ...

可用depmod来操作上述某些模块。

7.2.3 网络功能
--------------
/etc/modules中需要包含如下内容以扩充网络功能:

    # net/ipv-4
    ip_gre
    ipip
   
    # net/ipv-4/netfilter
    # iptable (in order)
    ip_tables
    ip_conntrack
    ip_conntrack_ftp
    iptable_nat
    iptable_filter
    iptable_mangle
    #
    ip_nat_ftp
    ip_queue
    #
    ipt_LOG
    ipt_MARK
    ipt_MASQUERADE
    ipt_MIRROR
    ipt_REDIRECT
    ipt_REJECT
    ipt_TCPMSS
    ipt_TOS
    ipt_limit
    ipt_mac
    ipt_mark
    ipt_multiport
    ipt_owner
    ipt_state
    ipt_tcpmss
    ipt_tos
    ipt_unclean
    #
    #ipchains
    #ipfwadm

上述内容并没有进行优化。可用depmod来操作上述某些模块。

7.2.4 EXT3文件系统(>2.4.17)
----------------------------
对预编译内核镜像包(> 2.4.17)执行下述操作可激活EXT3日志文件系统。

    # cd /etc; mv fstab fstab.old
    # sed 's/ext2/ext3,ext2/g' <fstab.old >fstab
    # vi /etc/fstab
    ... 将root文件系统类型设置成“auto”而非“ext3,ext2”
    # cd /etc/mkinitrd
    # echo jbd >>modules
    # echo ext3 >>modules
    # echo ext2 >>modules
    # cd /
    # apt-get update; apt-get install kernel-image-2.4.17-686-smp
    ... 安装最新内核并配置boot(lilo从这儿运行)
    # tune2fs -j -i 0 /dev/hda1
    # tune2fs -j -i 0 /dev/hda2
    ... 将所有EXT2 FS转化成EXT3
    # shutdown -r now

现在就可使用EXT3日志文件系统了。在fstab的“type”中使用ex3、ext2的是为了保险起见,如果内核不支持非root分区采用EXT3还可退回到EXT2。

如果你已安装了2.4版内核并且不想再次重装,执行上述步骤中apt-get命令之前的步骤就行了。接着:

    # mkinitrd -o /boot/initrd.img-2.4.17-686-smp /lib/modules/2.4.17-686-smp
    # lilo
    # tune2fs -j -i 0 /dev/hda1
    # tune2fs -j -i 0 /dev/hda2
    ... 将所有EXT2 FS转化成EXT3
    # shutdown -r now

现在EXT3日志文件系统已生效。

如果没有设置/etc/mkinitrd/modules就mkinitrd运行,最好在系统启动时加载一些模块:

    ... 当initrd提示获取shell时(5秒钟),输入RETURN
    # insmod jbd
    # insmod ext3 # modprobe ext3会负责一切
    # insmod ext2
    # ^D
    ... 继续启动

在系统启动屏幕(dmesg)中,会出现“cramfs: wrong magic”,别担心这没有什么害处。在Sarge(2002/10)中已解决了这个问题。参阅http://bugs.debian.org/135537和http://www.symonds.net/~rajesh/howto/ext3/index.html,或者是/usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz获得有关详情。

激活EXT3功能会造成某些系统发生严重内核死锁的情况,不过我没遇到过这种问题(我的内核是2.4.17)。

7.2.5 对Realtek RTL-8139的支持
------------------------------
不知何故,RTL-8139支持模块已不再叫rtl8139,现在它叫8139too。从2.2版内核升级到2.4版时,请记得在/etc/modules中做相应修改。

7.2.6 并行端口支持
------------------
对于kernel-image-2.4.*,并行端口支持已被模块化,要激活可执行:

    # modprobe lp
    # echo lp >> /etc/modules

参阅Linux内核源码目录中的Documentation/parport.txt。

7.2.7 打开了太多文件
--------------------
Linux内核有时会报告“Too many open files”,起因是file-max默认值太小。要解决这个问题,可以root身份执行下列命令(或将它们加入/etc/rcS.d/*下的init脚本。)

    # echo "65536"  >/proc/sys/fs/file-max  # 适用于2.2和2.4版内核
    # echo "131072" >/proc/sys/fs/inode-max # 仅适用于2.2版内核

其它内核参数操作实例参阅/etc/init.d/networking和〖3.7.5 无法访问某此站点的怪问题〗。



=========================================
Debian Reference

CVS, 2003-01-31-07:53:52
Osamu Aoki osamu@debian.org
Editor: David Sewell dsewell@virginia.edu
中文翻译:LYOO iamlyoo@163.com
          2003/02/19
=========================================
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表