?? 7.htm
字號:
<!-- saved from url=(0065)http://qref.sourceforge.net/Debian/reference/ch-kernel.zh-cn.html -->
<HTML><HEAD><TITLE>Debian 參考手冊 - Debian下的Linux內核</TITLE>
<META http-equiv=content-type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.3790.118" name=GENERATOR></HEAD>
<BODY><A name=ch-kernel></A>
<HR>
[ <A
href="http://qref.sourceforge.net/Debian/reference/ch-package.zh-cn.html">上一頁</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/reference.zh-cn.html#contents">目錄</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-preface.zh-cn.html">1</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html">2</A> ]
[ <A
href="http://qref.sourceforge.net/Debian/reference/ch-install.zh-cn.html">3</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-tutorial.zh-cn.html">4</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-woody.zh-cn.html">5</A> ]
[ <A
href="http://qref.sourceforge.net/Debian/reference/ch-package.zh-cn.html">6</A>
] [ 7 ] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-tips.zh-cn.html">8</A> ] [
<A href="http://qref.sourceforge.net/Debian/reference/ch-tune.zh-cn.html">9</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-gateway.zh-cn.html">10</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-edit.zh-cn.html">11</A> ]
[ <A
href="http://qref.sourceforge.net/Debian/reference/ch-vcs.zh-cn.html">12</A> ] [
<A
href="http://qref.sourceforge.net/Debian/reference/ch-program.zh-cn.html">13</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-gnupg.zh-cn.html">14</A> ]
[ <A
href="http://qref.sourceforge.net/Debian/reference/ch-support.zh-cn.html">15</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ap-appendix.zh-cn.html">A</A>
] [ <A
href="http://qref.sourceforge.net/Debian/reference/ch-tips.zh-cn.html">下一頁</A> ]
<HR>
<H1>Debian 參考手冊 <BR>第 7 章 - Debian下的Linux內核 </H1>
<HR>
<P>Debian運用自己的方式來編譯內核及相關模塊。參閱<A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html#s-kernel-details">Debian和系統內核,
第 2.7 節</A>。
<HR>
<A name=s-kernel-compile></A>
<H2>7.1 內核編譯</H2>
<P>Debian
unstable發行版中的<CODE>gcc</CODE>、<CODE>binutils</CODE>和<CODE>modutils</CODE>可用來編譯最新的Linux內核。這方面的官方信息,參閱<CODE>/usr/share/doc/kernel-package/README.gz</CODE>文件的后半部分。
<P>內核編譯是個很困難的議題,由于目標在不斷的變化,即使是最受人尊敬的開發者也會有不同的見解:
<DL>
<DT>Manoj Srivastava寫到:
<DD><SAMP>--initrd</SAMP>需要Debian專用cramfs補丁。
<DT>Herbert Xu寫到:
<DD>不,它不需要,想使用除CRAMFS以外的文件系統只需在<CODE>/etc/mkinitrd/mkinitrd.conf</CODE>中設置MKIMAGE。
</DD></DL>
<P>按照Manoj和Kent撰寫的<CODE>/usr/share/doc/kernel-package/README.gz</CODE>的指導小心行事,如果要編譯最新版本的內核請確認安裝了最新unstable版<CODE>kernel-package</CODE>軟件包。
<P>對于單機內核編譯,<SAMP>initrd</SAMP>不是必須的。我用它是希望我新編譯的內核與相應的內核鏡像一模一樣。如果使用<SAMP>initrd</SAMP>,請先閱讀一下<CODE>mkinitrd(8)</CODE>和<CODE>mkinitrd.conf(5)</CODE>。亦可參閱<CODE><A
href="http://bugs.debian.org/149236">http://bugs.debian.org/149236</A></CODE>。
<HR>
<A name=s-kernel-debian></A>
<H3>7.1.1 Debian標準方式</H3>
<P>關心一下有關<CODE>kernel-package</CODE>、<CODE>gcc</CODE>、<CODE>binutils</CODE>和<CODE>modutils</CODE>的錯誤報告。請按有關要求使用較新的版本。
<P>在Debian系統中用源碼編譯自定義內核要特別小心。用<CODE>make-kpkg</CODE>的<SAMP>--append_to_version</SAMP>選項來創建多重內核鏡像比較安全。
<PRE> # apt-get install debhelper modutils kernel-package libncurses5-dev
# apt-get install kernel-source-<VAR>2.4.18</VAR> # 使用最新版本
# apt-get install fakeroot
# vi /etc/kernel-pkg.conf # 輸入我的名字和email
$ cd /usr/src # 創建目錄
$ tar --bzip2 -xvf kernel-source-<VAR>2.4.18</VAR>.tar.bz2
$ cd kernel-source-<VAR>2.4.18</VAR> # 如果這是你的內核源碼
$ cp /boot/config-<VAR>2.4.18-386</VAR> .config # 將當前配置設定為默認配置
$ make menuconfig # 按自己的喜好來定制
$ make-kpkg clean # 必須執行這步(per: man make-kpkg)
$ fakeroot make-kpkg --append_to_version -<VAR>486</VAR> --initrd \
--revision=<VAR>rev.01</VAR> kernel_image \
modules_image # modules_image可以是pcmcia-cs*等。
$ cd ..
# dpkg -i kernel-image*.deb pcmcia-cs*.deb # 安裝
</PRE>
<P><SAMP>make-kpkg kernel_image</SAMP>實際上執行了<SAMP>make
oldconfig</SAMP>和<SAMP>make dep</SAMP>。如果沒使用initrd就不要使用<SAMP>--initrd</SAMP>選項。
<P>如果想加載pcmcia-cs模塊或沒有pcmcia,應該在<SAMP>make menuconfig</SAMP>后選“General setup
—>”進入“PCMCIA/CardBus support —>”,配置“< > PCMCIA/CardBus
support”選項(例如,取消復選項)。
<P>對于SMP機器,參照<CODE>kernel-pkg.conf(5)</CODE>的說明設置CONCURRENCY_LEVEL。
<HR>
<A name=s-kernel-classic></A>
<H3>7.1.2 經典方式</H3>
<P>從下列地址獲得干凈的源代碼:
<UL>
<LI>Linux: <CODE><A
href="http://www.kernel.org/">http://www.kernel.org/</A></CODE>
<LI>pcmcia-cs: <CODE><A
href="http://pcmcia-cs.sourceforge.net/">http://pcmcia-cs.sourceforge.net/</A></CODE>
</LI></UL>
<P>或使用Debian所附的等價的源代碼: <PRE> # cd /usr/src
# tar xfvz linux-<VAR>whatever</VAR>.tar.gz
# rm -rf linux
# ln -s linux-<VAR>whatever</VAR> linux
# tar xfvz pcmcia-cs-<VAR>whatever</VAR>.tar.gz
# ln -s pcmcia-cs-<VAR>whatever</VAR> 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
... 啟動到新內核 ...
</PRE>
<HR>
<A name=s-kernel-headers></A>
<H3>7.1.3 內核頭文件</H3>
<P>絕大多數“普通”程序不需要內核頭文件,事實上如果直接引用它們會出錯。這些程序應該引用那些<STRONG>編譯<CODE>glibc</CODE></STRONG>所用的頭文件,它們位于Debian系統的<CODE>/usr/include/linux</CODE>和<CODE>/usr/include/asm</CODE>目錄下。
<P>故不要在<CODE>/usr/src/linux</CODE>目錄中創建指向<CODE>/usr/include/linux</CODE>和<CODE>/usr/include/asm</CODE>的鏈接,一些過時的文檔曾建議創建它們。
<P>如果某些內核類應用程序<STRONG>需要</STRONG>特定的內核頭文件,可修改<CODE>Makefile</CODE>(s),使其包含指向“<CODE><VAR>特定內核頭文件目錄</VAR>/include/linux</CODE>”和“<CODE><VAR>特定內核頭文件目錄</VAR>/include/asm</CODE>”的路徑。
<HR>
<A name=s-kernel-modules></A>
<H2>7.2 模塊化的2.4內核</H2>
<P>kerntl-mage-2.4.<VAR>NN</VAR>提供了新版的Debian
2.4內核,該版內核模塊化程度極高。你必須激活相關的模塊才能獲得想要的內核功能。
<P>盡管在接下來的部分中提供了許多通過配置<CODE>/etc/modules</CODE>來解決問題的樣例,但據說,在<CODE>/etc/modutils/</CODE>中用一個文件來提供所有的設備別名,就可解決這類有關模塊問題,當前的內核有足夠多的別名供你使用。
<P>參閱Linux內核源碼目錄中的<CODE>Documentation/*.txt</CODE>獲取詳細信息。
<HR>
<A name=s-kernel-pcmcia></A>
<H3>7.2.1 PCMCIA</H3>
<P>要使用PCMCIA,需在<CODE>/etc/modules</CODE>中包含下列內容: <PRE> # ISA PnP driver
isa-pnp
# Low level PCMCIA driver
# yenta_socket # 我的機器上似乎不需要
</PRE>
<P>剩下的工作就由PCMCIA腳本(來自<CODE>pcmcia-cs</CODE>軟件包)、<CODE>depmod</CODE>和<CODE>kmod</CODE>負責了。我需要<CODE>isa-pnp</CODE>因為我的筆記本電腦使用的是舊ISA-PCMCIA。較新的筆記本電腦使用CardBus/PCMCIA,不再需要它。
<P>慷慨的Miquel van Smoorenburg <CODE><A
href="mailto:miquels@cistron.nl">miquels@cistron.nl</A></CODE>說:
<P>“我將筆記中所有有關pcmcia的東西包括cardmgr等一鼓腦全刪了,只裝了支持cardbus的2.4版內核和woody中新的<CODE>hotplug</CODE>軟件包。
<P>只要你使用的是32-bit卡,你就不需要pcmcia軟件包;2.4內置了cardservices。標準的tulip驅動亦可在dlink卡上正常工作。
<P>—Mike。”
<HR>
<A name=s-kernel-scsi></A>
<H3>7.2.2 SCSI</H3>
<P>[沒有測試過] 想要SCSI工作,請在<CODE>/etc/modules</CODE>中包含如下內容: <PRE> # SCSI core
scsi_mod
# SCSI generic driver
sg
# SCSI disk
sd_mod
# All other needed HW modules
...
</PRE>
<P>可用<CODE>depmod</CODE>來操作上述某些模塊。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -