<< Back to man.lupaworld.com


[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一頁 ]

Debian 參考手冊
第 7 章 - Debian下的Linux核心


Debian運用自己的方式來編譯核心及相關模組。參閱Debian和系統核心, 第 2.7 節


7.1 核心編譯

Debian unstable發行版中的gccbinutilsmodutils可用來編譯最新的Linux核心。這方面的官方訊息,參閱/usr/share/doc/kernel-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-packagegccbinutilsmodutils的錯誤報告。請按有關要求使用較新的版本。 Watch out for bug reports on kernel-package, gcc, binutils, and modutils. Use new versions of them as needed.

在Debian系統中用源碼編譯自定義內核要特別小心。用make-kpkg--append_to_version選項來創建多重內核鏡像比較安全。 Compiling a custom kernel from source under a Debian system requires special care. Use the new --append_to_version with make-kpkg to build multiple kernel-images.

     # 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                # 輸入姓名和 E-mail
     $ cd /usr/src                            # 編譯目錄
     $ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2
     $ cd kernel-source-2.4.18                # 如果這是妳的 kernel 源碼
     $ cp /boot/config-2.4.18-386 .config     # 預設是取得現有的 config 檔案
     $ make menuconfig                        # 自訂我們需要的項目
     $ make-kpkg clean                        # 必須執行 (man make-kpkg)
     $ fakeroot make-kpkg --append_to_version -486 --initrd \
             --revision=rev.01 kernel_image \
             modules_image # modules_image is for pcmcia-cs* etc.
     $ cd ..
     # dpkg -i kernel-image*.deb pcmcia-cs*.deb # 安裝

make-kpkg kernel_image實際上執行了make oldconfigmake dep。如果沒使用initrd就不要使用--initrd選項。

如果想加入pcmcia-cs模組或沒有pcmcia,應該在make menuconfig後選 "Generalsetup —>" 進入 "PCMCIA/CardBus support —>",設定 "< > PCMCIA/CardBus support" 選項(例如,取消復選項)。

對於SMP機器,參照kernel-pkg.conf(5)的說明設置CONCURRENCY_LEVEL。


7.1.2 經典方式

從下列位置取得乾淨的原始碼:

或使用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
     ... add needed module names to /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/中用一個文件來提供所有的設備別名,就可解決這類有關模組問題,當前的核心有足夠多的別名供你使用。有些模組也可以被硬體偵測工具啟動,例如discover。參閱 X 的硬體偵測, 第 9.4.2 節

參閱 模組處理措施, 第 2.7.5 節 和 Linux核心源碼目錄中的Documentation/*.txt獲取詳細訊息。


7.2.1 PCMCIA

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

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

剩下的工作就由PCMCIA腳本(來自pcmcia-cs套件)、depmodkmod負責了。我需要isa-pnp因為我的筆記本電腦使用的是舊ISA-PCMCIA。較新的筆記本電腦使用CardBus/PCMCIA,不再需要它。

慷慨的Miquel van Smoorenburg miquels@cistron.nl說:

“我將筆記中所有有關pcmcia的東西包括cardmgr等一鼓腦全刪了,只裝了支持car dbus的2.4版核心和woody中新的hotplug套件。

只要你使用的是32-bit卡,你就不需要pcmcia套件;2.4內置了 card services。標準的tulip驅動亦可在dlink卡上正常工作。

—Mike。”

參閱Linux PCMCIA HOWTO網路設定和 PCMCIA, 第 10.10.5 節


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)

對預先編譯好的 Kernel-image(> 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 may take care of everything
     # insmod ext2
     # ^D
     ... 繼續開機

在系統啟動畫面(dmesg)中,會出現“cramfs: wrong magic”,別擔心這沒有什麼害處。在Sarge(2002/10)中已解決了這個問題。參閱http://bugs.debian.org/135537EXT3 File System mini-HOWTO,或者是/usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz獲得有關詳情。

啟動 EXT3 功能會造成某些系統發生嚴重的核心鎖死的情況,不過我沒遇到過這種問題(我的核心是2.4.17)。


7.2.5 2.4版核心對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.3 透過 proc 檔案系統調整核心

透過proc檔案系統,可在運行的狀態下進行調整Linux核心動作。

有關 /proc 檔案系統下修改核心參數的基礎知識,可參閱Linux源碼中的Documentation/sysctl/*文件。

調整核心參數的例子,可參考/etc/init.d/networking無法存取某此站台的怪問題, 第 3.7.5 節

參閱 sysctl.conf(5) 了解如何透過 /etc/init.d/procps.sh/proc檔案系統來設定核心啟動組態。/etc/rcS.d/S30procps.sh 在執行時會呼叫 /etc/init.d/procps.sh script。


7.3.1 開啟太多檔案

Linux核心有時會報告 “Too many open files”,原因是file-max預設值(8096)太小。要解決這個問題,請用 root 身份執行下列命令:

     # echo "65536"  > /proc/sys/fs/file-max  # for 2.2 and 2.4 kernel
     # echo "131072" > /proc/sys/fs/inode-max # for 2.2 kernel only

或者修改加入底下的敘述到 /etc/sysctl.conf

     file-max=65536   # for 2.2 and 2.4 kernel
     inode-max=131072 # for 2.2 kernel only

7.3.2 清除磁碟緩衝區時間

透過proc檔案系統來修改清除磁碟緩衝區時間。下面的操作將預設的5秒時間間隔縮短到1秒。

     # echo "40 0 0 0 100 30000 60 0 0"  > /proc/sys/vm/bdflush

這可能對文件I/O效能產生一些負面影響。但它能保證文件內容是最近1秒的,比預設的5秒更短。對日誌式檔案系統來說更是如此。


7.3.3 慢速且記憶體小的機器

對某些記憶體少的舊機器來說,在proc檔案系統中打開 over-commit 功能會很有效果:

     # echo 1 > /proc/sys/vm/overcommit_memory

7.4 核心 2.6 和 udev

udev 是取代 /dev/ 的動態配置的檔案系統。裝置名稱可以取較短的名稱。而 2.4 核心中的 devfs 已經淘汰了。

安裝 Debian 新版的 kernel-image-2.6.NNudev 就能啟動該功能了。


[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一頁 ]

Debian 參考手冊

CVS, 週一 四月 3 22:58:37 UTC 2005

青木 修 (Osamu Aoki) osamu@debian.org
翻譯者:葉信佑 (Shine-Yoh Yeh) asho@debian.org.tw
作者, 第 A.1 節