第九章-linux系統編譯內核

Linux 的簡短歷史

Linux 仍是 GNU/Linux?

您可能已經注意到 Linux 做爲一個操做系統來講,有時會稱爲 「Linux」,有時卻稱爲 「GNU/Linux」。這背後的緣由在於 Linux 其實是操做系統的 內核。使這個操做系統變得很是有用的大量應用程序是 GNU 軟件。例如,窗口系統、編譯器、各類 shell、開發工具、編輯器、實用工具以及內核以外的其餘應用程序,其中不少都是 GNU 軟件。因爲這個緣由,不少人都認爲 「GNU/Linux」 更適合做爲操做系統的名字,而 「Linux」 則適合做爲內核的名字。
儘管 Linux 絕對是最流行的開源操做系統,可是相對於其餘操做系統的漫長曆史來講,Linux 的歷史很是短暫。在計算機出現早期,程序員是使用硬件語言在裸硬件上進行開發的。缺乏操做系統就意味着在某個時間只有一個應用程序(和一個用戶)可使用這些龐大而又昂貴的設備。早期的操做系統是在 20 世紀 50 年×××發的,用來提供簡單的開發體驗。包括爲 IBM 701 開發的 General Motors Operating System(GMOS)和 North American Aviation 爲 IBM 709 開發的 FORTRAN Monitor System(FMS)。
在 20 世紀 60 年代,MIT(Massachusetts Institute of Technology)和一些公司爲 GE-645 開發了一個名爲 Multics(Multiplexed Information and Computing Service)的實驗性的操做系統。這個操做系統的開發者之一 AT&T 後來退出了 Multics,並在 1970 年開發了本身的名爲 Unics 的操做系統。與這個操做系統一同誕生的是 C 語言,C 語言就是爲此而開發的,而後它們使用 C 語言對操做系統進行了重寫,使操做系統開發具備可移植性。
二十年後,Andrew Tanenbaum 建立了一個微內核版本的 UNIX®,名爲 MINIX(表明 minimal UNIX),它能夠在小型的我的計算機上運行。這個開源操做系統在 20 世紀 90 年代激發了 Linus Torvalds 開發 Linux 的靈感(請參看圖 1 所示)。
圖 1. 主要 Linux 內核發行版簡史


Linux 快速從一個我的項目進化成爲一個全球數千人蔘與的開發項目。對於 Linux 來講,最爲重要的決策之一是採用 GPL(GNU General Public License)。在 GPL 保護之下,Linux 內核能夠防止商業使用,而且它還從 GNU 項目(Richard Stallman 開發,其源代碼要比 Linux 內核大得多)的用戶空間開發受益。這容許使用一些很是有用的應用程序,例如 GCC(GNU Compiler Collection)和各類 shell 支持。




Linux 內核簡介
如今讓咱們從一個比較高的高度來審視一下 GNU/Linux 操做系統的體系結構。您能夠從兩個層次上來考慮操做系統,如圖 2 所示。
圖 2. GNU/Linux 操做系統的基本體系結構



系統調用接口(SCI)的方法
實際上,體系結構可能並不像圖 2 所示的同樣清晰。例如,處理系統調用(從用戶空間切換到內核空間)的機制可能在各個體系結構上都不相同。提供了對虛擬化指令支持的新型 x86 中央處理單元(CPU)在這方面要比使用傳統 int 80h 方法的老式 x86 處理器更加高效。
最上面是用戶(或應用程序)空間。這是用戶應用程序執行的地方。用戶空間之下是內核空間,Linux 內核正是位於這裏。
GNU C Library (glibc)也在這裏。它提供了鏈接內核的系統調用接口,還提供了在用戶空間應用程序和內核之間進行轉換的機制。這點很是重要,由於內核和用戶空間的應用程序使用的是不一樣的保護地址空間。每一個用戶空間的進程都使用本身的虛擬地址空間,而內核則佔用單獨的地址空間。 更多信息,請參看
參考資料
一節中的連接。
Linux 內核能夠進一步劃分紅 3 層。最上面是系統調用接口,它實現了一些基本的功能,例如 read 和 write。系統調用接口之下是內核代碼,能夠更精確地定義爲獨立於體系結構的內核代碼。這些代碼是 Linux 所支持的全部處理器體系結構所通用的。在這些代碼之下是依賴於體系結構的代碼,構成了一般稱爲 BSP(Board Support Package)的部分。這些代碼用做給定體系結構的處理器和特定於平臺的代碼。




Linux 內核的屬性
在討論大型而複雜的系統的體系結構時,能夠從不少角度來審視系統。體系結構分析的一個目標是提供一種方法更好地理解源代碼,這正是本文的目的。
Linux 內核實現了不少重要的體系結構屬性。在或高或低的層次上,內核被劃分爲多個子系統。Linux 也能夠看做是一個總體,由於它會將全部這些基本服務都集成到內核中。這與微內核的體系結構不一樣,後者會提供一些基本的服務,例如通訊、I/O、內存和進程管理,更具體的服務都是插入到微內核層中的。每種內核都有本身的優勢,不過這裏並不對此進行討論。
隨着時間的流逝,Linux 內核在內存和 CPU 使用方面具備較高的效率,而且很是穩定。可是對於 Linux 來講,最爲有趣的是在這種大小和複雜性的前提下,依然具備良好的可移植性。Linux 編譯後可在大量處理器和具備不一樣體系結構約束和需求的平臺上運行。一個例子是 Linux 能夠在一個具備內存管理單元(MMU)的處理器上運行,也能夠在那些不提供 MMU 的處理器上運行。Linux 內核的 uClinux 移植提供了對非 MMU 的支持。更詳細信息請參看
參考資料
一節的內容。




Linux 內核的主要子系統
如今使用圖 3 中的分類說明 Linux 內核的主要組件。
圖 3. Linux 內核的一個體繫結構透視圖


系統調用接口
SCI 層提供了某些機制執行從用戶空間到內核的函數調用。正如前面討論的同樣,這個接口依賴於體系結構,甚至在相同的處理器家族內也是如此。SCI 其實是一個很是有用的函數調用多路複用和多路分解服務。在 ./linux/kernel 中您能夠找到 SCI 的實現,並在 ./linux/arch 中找到依賴於體系結構的部分。有關這個組件的更詳細信息能夠在
參考資料
一節中找到。
進程管理



內核是什麼?

圖 3
所示,內核實際上僅僅是一個資源管理器。無論被管理的資源是進程、內存仍是硬件設備,內核負責管理並裁定多個競爭用戶對資源的訪問(既包括內核空間也包括用戶空間)。
進程管理的重點是進程的執行。在內核中,這些進程稱爲 線程,表明了單獨的處理器虛擬化(線程代碼、數據、堆棧和 CPU 寄存器)。在用戶空間,一般使用 進程 這個術語,不過 Linux 實現並無區分這兩個概念(進程和線程)。內核經過 SCI 提供了一個應用程序編程接口(API)來建立一個新進程(fork、exec 或 Portable Operating System Interface [POSIX] 函數),中止進程(kill、exit),並在它們之間進行通訊和同步(signal 或者 POSIX 機制)。
進程管理還包括處理活動進程之間共享 CPU 的需求。內核實現了一種新型的調度算法,無論有多少個線程在競爭 CPU,這種算法均可以在固定時間內進行操做。這種算法就稱爲 O(1) 調度程序,這個名字就表示它調度多個線程所使用的時間和調度一個線程所使用的時間是相同的。 O(1) 調度程序也能夠支持多處理器(稱爲對稱多處理器或 SMP)。您能夠在 ./linux/kernel 中找到進程管理的源代碼,在 ./linux/arch 中能夠找到依賴於體系結構的源代碼。在
參考資料
一節中能夠了解有關這個算法的更多內容。
內存管理
內核所管理的另一個重要資源是內存。爲了提升效率,若是由硬件管理虛擬內存,內存是按照所謂的 內存頁 方式進行管理的(對於大部分體系結構來講都是 4KB)。Linux 包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。
不過內存管理要管理的可不止 4KB 緩衝區。Linux 提供了對 4KB 緩衝區的抽象,例如 slab 分配器。這種內存管理模式使用 4KB 緩衝區爲基數,而後從中分配結構,並跟蹤內存頁使用狀況,好比哪些內存頁是滿的,哪些頁面沒有徹底使用,哪些頁面爲空。這樣就容許該模式根據系統須要來動態調整內存使用。
爲了支持多個用戶使用內存,有時會出現可用內存被消耗光的狀況。因爲這個緣由,頁面能夠移出內存並放入磁盤中。這個過程稱爲 交換,由於頁面會被從內存交換到硬盤上。內存管理的源代碼能夠在 ./linux/mm 中找到。
虛擬文件系統
虛擬文件系統(VFS)是 Linux 內核中很是有用的一個方面,由於它爲文件系統提供了一個通用的接口抽象。VFS 在 SCI 和內核所支持的文件系統之間提供了一個交換層(請參看圖 4)。
圖 4. VFS 在用戶和文件系統之間提供了一個交換層


在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統抽象,它定義了上層函數的實現方式。它們是給定文件系統(超過 50 個)的插件。文件系統的源代碼能夠在 ./linux/fs 中找到。
文件系統層之下是緩衝區緩存,它爲文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層經過將數據保留一段時間(或者隨即預先讀取數據以便在須要是就可用)優化了對物理設備的訪問。緩衝區緩存之下是設備驅動程序,它實現了特定物理設備的接口。
網絡堆棧
網絡堆棧在設計上遵循模擬協議自己的分層體系結構。回想一下,Internet Protocol (IP) 是傳輸協議(一般稱爲傳輸控制協議或 TCP)下面的核心網絡層協議。TCP 上面是 socket 層,它是經過 SCI 進行調用的。
socket 層是網絡子系統的標準 API,它爲各類網絡協議提供了一個用戶接口。從原始幀訪問到 IP 協議數據單元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 層提供了一種標準化的方法來管理鏈接,並在各個終點之間移動數據。內核中網絡源代碼能夠在 ./linux/net 中找到。
設備驅動程序
Linux 內核中有大量代碼都在設備驅動程序中,它們可以運轉特定的硬件設備。Linux 源碼樹提供了一個驅動程序子目錄,這個目錄又進一步劃分爲各類支持設備,例如 Bluetooth、I2C、serial 等。設備驅動程序的代碼能夠在 ./linux/drivers 中找到。
依賴體系結構的代碼
儘管 Linux 很大程度上獨立於所運行的體系結構,可是有些元素則必須考慮體系結構才能正常操做並實現更高效率。./linux/arch 子目錄定義了內核源代碼中依賴於體系結構的部分,其中包含了各類特定於體系結構的子目錄(共同組成了 BSP)。對於一個典型的桌面系統來講,使用的是 i386 目錄。每一個體繫結構子目錄都包含了不少其餘子目錄,每一個子目錄都關注內核中的一個特定方面,例如引導、內核、內存管理等。這些依賴體系結構的代碼能夠在 ./linux/arch 中找到。




Linux 內核的一些有用特性
若是 Linux 內核的可移植性和效率還不夠好,Linux 還提供了其餘一些特性,它們沒法劃分到上面的分類中。
做爲一個生產操做系統和開源軟件,Linux 是測試新協議及其加強的良好平臺。Linux 支持大量網絡協議,包括典型的 TCP/IP,以及高速網絡的擴展(大於 1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也能夠支持諸如流控制傳輸協議(SCTP)之類的協議,它提供了不少比 TCP 更高級的特性(是傳輸層協議的接替者)。
Linux 仍是一個動態內核,支持動態添加或刪除軟件組件。被稱爲動態可加載內核模塊,它們能夠在引導時根據須要(當前特定設備須要這個模塊)或在任什麼時候候由用戶插入。
Linux 最新的一個加強是能夠用做其餘操做系統的操做系統(稱爲系統管理程序)。最近,對內核進行了修改,稱爲基於內核的虛擬機(KVM)。這個修改成用戶空間啓用了一個新的接口,它能夠容許其餘操做系統在啓用了 KVM 的內核之上運行。除了運行 Linux 的其餘實例以外, Microsoft® Windows® 也能夠進行虛擬化。唯一的限制是底層處理器必須支持新的虛擬化指令。更多信息請參看
~~~~~~~~~~~~~~~
1)安裝module-init-tools-3.0.tar.gz:
    # tar -zxvf module-init-tools-3.0.tar.gz
  # cd module-init-tools-3.0
  # ./configure --prefix=/sbin
  # make
  # make install
  # ./generate-modprobe.conf /etc/modprobe.conf
  不知道爲何,我用module-init-tools-3.1時make出錯。若是改用3.0的就沒事了。
  (2)安裝modutils-2.4.25-8.9.i386.rpm:
  # rpm -Uvih modutils-2.4.25-8.9.i386.rpm
  對modutils進行升級。
  (3)安裝新內核:
  將新內核copy到/usr/src下,
  #tar xzvf linux-2.6.11.tar.gz -----解壓縮.
  II. 將名爲linux的符號連接刪掉,這時舊版本內核的符號連接.
  #ln -s linux-2.6.11 linux ------創建linux-2.6.11的符號連接linux.
  設置內核.
  # cd /usr/src/linux
  # make mrproper -----刪除沒必要要的文件和目錄.
  #make config(基於文本的最爲傳統的配置界面,不推薦使用)
  #make menuconfig(基於文本選單的配置界面,字符終端下推薦使用)
  #make xconfig(基於圖形窗口模式的配置界面,Xwindow下推薦使用)
  #make oldconfig(若是隻想在原來內核配置的基礎上修改一些小地方,會省去很多麻煩)
  它們的目的是同樣的,那就是生成一個.config文件
  這三個命令中,make xconfig的界面最爲友好,若是你可使用Xwindow,你就用這個好了,這個比較方便,也好設置。若是你不能使用Xwindow,那麼就使用make menuconfig好了。界面雖然比上面一個差點,總比make config的要好多了。
選擇相應的配置時,有三種選擇,它們分別表明的含義以下:
    Y--將該功能編譯進內核
    N--不將該功能編譯進內核
    M--將該功能編譯成能夠在須要時動態插入到內核中的模塊
face=Verdana>  若是使用的是make xconfig,使用鼠標就能夠選擇對應的選項。若是使用的是 make menuconfig,則須要使用空格鍵進行選取。你會發如今每個選項前都有個括號, 但有的是中括號有的是尖括號,還有一種圓括號。用空格鍵選擇時能夠發現,中括號裏要麼是空,要麼是"*",而尖括號裏能夠是空,"*"和"M"。這表示前者對應的項要麼不要,要麼編譯到內核裏;後者則多同樣選擇,能夠編譯成模塊。而圓括號的內容是要你在所提供的幾個選項中選擇一項。
 
 
make mrproper
make menuconfig
make dep
make bzImage
make modules
make modules_install
make install

 
 
 

附內核配置選項說明(這是我在網上找到的,還能夠,有些也是不同的,給你一個參考)
  代碼成熟度選項:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
[*] Select only drivers expected to compile cleanly
  打開使用開發中、不徹底的代碼/驅動會讓內核配置多出不少選項,因爲咱們須要使用一些正在開發中的功能,所以必需打開這一選項。
通用設置選項,
General setup --->
() Local version - append to kernel release
這裏填入的是64字符之內的字符串,你在這裏填上的字符口串能夠用uname -a命令看到。
[*] Support for paging of anonymous memory (swap)
這是使用交換分區或者交換文件來作爲虛擬內存的,固然要選上了。
[*] System V IPC
表示系統5的Inter Process Communication,它用於處理器在程序之間同步和交換信息,若是不選這項,不少程序運行不起來
[*] POSIX Message Queues
這是POSIX的消息隊列,它一樣是一種IPC。建議你最好將它選上
[*] BSD Process Accounting
這是充許用戶進程訪問內核將帳戶信息寫入文件中的。這一般被認爲是個好主意,建議你最好將它選上。
[*] BSD Process Accounting version 3 file format
[*] Sysctl support
這個選項能不從新編譯內核修改內核的某些參數和變量,若是你也選擇了支持/proc,將能從/proc/sys存取能夠影響內核的參數或變量。建議你最好將它選上
[ ] Auditing support
審記支持,用於和內核的某些子模塊同時工做,例如SELinux。只有選擇此項及它的子項,才能調用有關審記的系統調用
(15) Kernel log buffer size (16 => 64KB, 17 => 128KB)
內核日誌緩存的大小,12 => 4 KB,13 => 8 KB,14 => 16 KB單處理器,15 => 32 KB多處理器,16 => 64 KB for x86 NUMAQ or IA-64,17 => 128 KB for S/390
[*] Support for hot-pluggable devices
是否支持熱插拔的選項,確定要選上
[*] Kernel Userspace Events
內核中分爲系統區和用戶區,這裏系統區和用戶區進行通信的一種方式,選上。
[*] Kernel .config support
將.config配置信息保存在內核中,選上它及它的子項使得其它用戶能從/proc中獲得內核的配置
[*] Enable access to .config through /proc/config.gz
[ ] Configure standard kernel features (for small systems) --->
這是爲了編譯某些特殊的內核使用的,一般你能夠不選擇這一選項,你也不用對它下面的子項操心了。
--- Configure standard kernel features (for small systems)
[ ] Load all symbols for debugging/kksymoops
是否裝載全部的調試符號表信息,若是你不須要對內核調試,不須要選擇此項。
[*] Enable futex support
不選這個內核不必定能正確的運行使用glibc的程序,固然要選上
[*] Enable eventpoll support
不選這個內核將不支持事件輪循的系統調用,最好選上
[*] Optimize for size
這個選項使gcc使用-Os的參數而不是-O2的參數來優化編譯,以得到更小尺寸的內核,建議選上。
[*] Use full shmem filesystem
除非你在不多的內存且不使用交換內存時,纔不要選擇這項
(0) Function alignment
(0) Label alignment
(0) Loop alignment
(0) Jump alignment
可加載模塊:
Loadable module support --->
[*] Enable loadable module support
[*] Module unloading
不選這個功能,加載的模塊就不能卸載
[ ] Forced module unloading
[ ] Module versioning support (EXPERIMENTAL)
[ ] Source checksum for all modules
[*] Automatic kernel module loading
處理器類型及特性:
Processor type and features --->
Subarchitecture Type (PC-compatible) --->
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon) --->
[ ] Generic x86 support
這一選項針對x86系列的CPU使用更多的常規優化。若是你在上面一項選的是i38六、i586之類的才選這個
[*] HPET Timer Support
HPET是替代8254芯片的下一代時鐘處理器。這裏你能夠安全的選上這一選項。若是硬件不支持的話,將仍使用8254時鐘處理器
[*] Symmetric multi-processing support
對稱多處理器支持,在單CPU的機器上,不選這個選項會更快一些。因爲超線程技術,看起來是兩顆CPU,因些要選上這個選項
(1) Maximum number of CPUs (2-255) 支持的最大CPU數
[ ] SMT (Hyperthreading) scheduler support
[*] Preemptible Kernel
這個選項能使應用程序即便內核在高負載時也很可靠,建議最好選上
[*] Machine Check Exception
這個選項能讓CPU檢測到系統故障時通知內核,通常我用組裝的臺式機會選這項。
< > Toshiba Laptop support
< > Dell laptop support
< > /dev/cpu/microcode - Intel IA32 CPU microcode support
< > /dev/cpu/*/msr - Model-specific register support
< > /dev/cpu/*/cpuid - CPU information support
Firmware Drivers --->
< > BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)
High Memory Support (4GB) --->
[ ] Allocate 3rd-level pagetables from highmem
[ ] Math emulation
[*] MTRR (Memory Type Range Register) support
[ ] Boot from EFI support (EXPERIMENTAL)
[*] Enable kernel irq balancing
[ ] Use register arguments (EXPERIMENTAL)
電源管理:
Power management options (ACPI, APM) --->
[*] Power Management support
[ ] Power Management Debug Support
[ ] Software Suspend (EXPERIMENTAL)
ACPI (Advanced Configuration and Power Interface) Support --->
APM (Advanced Power Management) BIOS Support --->
CPU Frequency scaling --->
ACPI (Advanced Configuration and Power Interface) Support --->
[*] ACPI Support
這是一種電源管理方式,你能夠看看你的BIOS是否支持。若是支持的話建議你選上這項
[ ] Sleep States (EXPERIMENTAL)
< > AC Adapter
< > Battery
<*> Button 捕獲Power、Sleep、Lid(我也不知道這是什麼按鈕)等按鈕是否按下,並作相應的動做
<*> Video 集成在板上的顯卡的ACPI支持,對有些板卡可能不起做用
< > Fan
<*> Processor
<*> Thermal Zone
< > ASUS/Medion Laptop Extras
< > IBM ThinkPad Laptop Extras
< > Toshiba Laptop Extras
(0) Disable ACPI for systems before Jan 1st this year
[ ] Debug Statements
[*] Power Management Timer Support
APM (Advanced Power Management) BIOS Support --->
< > APM (Advanced Power Management) BIOS support
高級電源管理的支持,通常來講筆記本應該選上,臺式機能夠不選。
[ ] Ignore USER SUSPEND
[*] Enable PM at boot time
[ ] Make CPU Idle calls when idle
[ ] Enable console blanking using APM
[ ] RTC stores time in GMT 按Unix的標準,硬件的時鐘應該設爲格林威治時間
[ ] Allow interrupts during APM BIOS calls
[*] Use real mode APM BIOS call to power off
[*] CPU Frequency scaling
這一選項容許改變CPU的主頻,使CPU在低負荷或使用電池時下降主頻,達到省電的目的。
[ ] Enable CPUfreq debugging
< > /proc/cpufreq interface (deprecated)
Default CPUFreq governor (performance) --->
--- 'performance' governor
<*> 'powersave' governor
<*> 'userspace' governor for userspace frequency scaling
[ ] /proc/sys/cpu/ interface (2.4. / OLD)
<*> 'ondemand' cpufreq policy governor自動調節主頻
<*> CPU frequency table helpers 多數的CPU須要這一項來調節主頻
<*> ACPI Processor P-States driver 報告處理器的狀態
< > AMD Mobile K6-2/K6-3 PowerNow!
< > AMD Mobile Athlon/Duron PowerNow!
< > AMD Opteron/Athlon64 PowerNow!
< > Cyrix MediaGX/NatSemi Geode Suspend Modulation
<*> Intel Enhanced SpeedStep Intel的變頻技術支持
[ ] Use ACPI tables to decode valid frequency/voltage pairs
--- Built-in tables for Banias CPUs
< > Intel Speedstep on ICH-M chipsets (ioport interface)
< > Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
< > Intel Pentium 4 clock modulation
< > nVidia nForce2 FSB changing
< > Transmeta LongRun
< > VIA Cyrix III Longhaul
--- shared options
[ ] /proc/acpi/processor/../performance interface (deprecated)
[ ] Relaxed speedstep capability checks
總線類型:
[*] PCI support
PCI access mode (Any) --->強列建議選Any,系統將優先使用MMConfig,而後使用BIOS,最後使用Direct檢測PCI設備。
[ ] Message Signaled Interrupts (MSI and MSI-X)
[ ] Legacy /proc/pci interface
[ ] PCI device name database
[ ] ISA support
[*] EISA support
[*] Vesa Local Bus priming
[*] Generic PCI/EISA bridge
[*] EISA virtual root device
[ ] EISA device name database
[ ] MCA support
< > NatSemi SCx200 support
PCCARD (PCMCIA/CardBus) support --->
PCI Hotplug Support --->
PCCARD (PCMCIA/CardBus) support --->通常只有筆記本電腦上纔會有PCMCIA插槽,若是你是臺式機的話,能夠不選這一項,而後跳過這一部份。
PCI Hotplug Support --->
< > Support for PCI Hotplug (EXPERIMENTAL)
通常來說只有服務器上會有熱插拔的設備,若是你使用的是臺式機,你能夠不選擇此項並跳過這一部份。
可執行文件格式,
[*] Kernel support for ELF binaries
ELF是開放平臺下最經常使用的二進制文件,它支持不一樣的硬件平臺
< > Kernel support for a.out and ECOFF binaries
<*> Kernel support for MISC binaries
  此選項容許插入二進制的封裝層到內核中,當使用Java、.NET、Python、Lisp等語言編寫的程序時很是有用
  硬件設備至關複雜,看得偶頭暈,你們針對本身的設備慎重選擇(手邊最好準備一本漢英字典:)若是想使用adsl,記得網絡部分除了TCP/IP協議還得把ppp部分編譯進內核,想當初偶就是把這個給忘了,鬱悶了許久。
文件系統,
<*> Second extended fs support
[*] Ext2 extended attributes
[*] Ext2 POSIX Access Control Lists
[*] Ext2 Security Labels
<*> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels
[ ] JBD (ext3) debugging support
<*> Reiserfs support
[ ] Enable reiserfs debug mode
[ ] Stats in /proc/fs/reiserfs
[*] ReiserFS extended attributes
[*] ReiserFS POSIX Access Control Lists
[*] ReiserFS Security Labels
JFS filesystem support
[*] JFS POSIX Access Control Lists
[ ] JFS debugging
[ ] JFS statistics
XFS filesystem support
[*] Realtime support (EXPERIMENTAL)
[*] Quota support
[*] Security Label support
[*] POSIX ACL support
< > Minix fs support
< > ROM file system support
[*] Quota support
< > Old quota format support
Quota format v2 support
[*] Dnotify support
< > Kernel automounter support
< > Kernel automounter version 4 support (also supports v3)
CD-ROM/DVD Filesystems --->
DOS/FAT/NT Filesystems --->
Pseudo filesystems --->
Miscellaneous filesystems --->
Network File Systems --->
Partition Types --->
Native Language Support --->
Profiling support --->
Kernel hacking --->
Security options --->
Cryptographic options --->
Library routines --->
  這個東東你要是搞不來就不要搞,默認的也能夠的。先學習一下怎麼樣編譯內核,等成功了,有了經驗了在改也沒有事的!
編譯內核:
# cd /usr/src/linux
# make dep -----連接程序代碼與函數庫.
# make clean -----刪除沒必要要的模塊和文件.
# make bzImage -----開始編譯系統內核.
# make modules -----開始編譯外掛模塊.
# make modules_install -----安裝編譯完成的模塊.
25. Kernel hacking
配置了這個,即便在系統崩潰時,你也能夠進行必定的工做了。普通用戶是用不着這個功能的。
總算配置完了,如今存盤退出,固然你也能夠把如今的配置文件保存起來,這樣下次再配置的時候就省力氣了。編譯 在繁雜的配置工做完成之後,下面你就能夠本身到杯茶耐心等候了。與編譯有關的命令有以下幾個:
#make dep 
#make clean 
#make zImage 
#make bzImage 
#make modules 
#make modules_install 
#depmod -a
第一個命令make dep實際上讀取配置過程生成的配置文件,來建立對應於配置的依賴關係樹,從而決定哪些須要編譯而那些不須要;第二命令make clean完成刪除前面步驟留下的文件,以免出現一些錯誤;第三個命令make zImage和第四個命令make bzImage實現徹底編譯內核,兩者生成的內核都是使用gzip壓縮的,只要使用一個就夠了,它們的區別在於使用make bzImage能夠生成大一點的內核,好比在編譯2.4.0版本的內核時若是使用make zImage命令,那麼就會出現system too big的錯誤提示。建議你們使用make bzImage命令。 後面三個命令只有在你進行配置的過程當中,在回答Enable loadable module support (CONFIG_MODULES)時選了"Yes"纔是必要的,make modules和make modules_install分別生成相應的模塊和把模塊拷貝到須要的目錄中。 嚴格說來,第七個命令和編譯過程並無關係,它是生成模塊間的依賴關係,這樣你啓動新內核以後,使用modprobe命令加載模塊時就能正確地定位模塊。
更新
通過以上的步驟,咱們終於獲得了新版本的內核。爲了可以使用新版本的內核,咱們還須要作一些改動:
#cp /usr/src/linux/System.map /boot/System.map-2.4.0test8 
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.0test8
~~~~~~~~~~~~~~~~~~
http://www.51cto.com/art/200511/10515.htm
~~~~~~~~~~~~~~~~~~

要好常時間的,我洗了一件衣服,抽了N根白沙以後,總算完成了,好激動呀!
# su -
# /sbin/depmod -a -----建立模塊的連接.
更換內核:
# cd /boot -----切換到引導分區/boot.
# rm System.map vmlinuz -----刪除舊的符號連接.
# mv /usr/src/linux/System.map System.map
# mv /usr/src/linux/arch/i386/boot/bzImage vmlinuz
若是你用GRUB來管理開機,簡單點就是你裝了win還裝了linux就要修改/boot/grub下的menu.1st文件:
# vi /boot/grub/menu.1st
鍵入i進入編輯模式:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,1)
# kernel /boot/vmlinuz-version ro root=/dev/hda2
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=1
timeout=10
splashp_w_picpath=(hd0,1)/boot/grub/splash.xpm.gz
title Fedora Core(2.6.11)
root (hd0,1)
kernel /boot/vmlinuz ro root=/dev/hda2 ---你的linux所在的分區
title DOS
rootnoverify (hd0,0)
chainloader +1

title Fedora Core(2.4.22)
root (hd0,1)
kernel /boot/vmlinuz-2.4.22-1.2115.nptl ro root=LABEL=/ hdd=ide-scsi rhgb
initrd /boot/initrd-2.4.22-1.2115.nptl.img
這樣還能夠保留舊版本的內核以防編譯新內核失敗進不了系統
  重啓電腦,好了,進去了。
rpm無法用了,怎麼辦?
在/usr/lib/rpm/macros裏面尋找代碼:
%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb
修改爲代碼:
%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private

本文來自CSDN博客,轉載請標明出處: http://blog.csdn.net/freedom1013/archive/2006/11/16/1389044.aspx
相關文章
相關標籤/搜索