180 likes | 297 Views
Linux 基礎學習. Chapter 26 Linux 核心編譯與管理. 內容. 編譯前的任務:認識核心與取得核心原始碼 核心編譯的前處理與核心功能選擇 核心的編譯與安裝 額外 ( 單一 ) 核心模組編譯. 26.1 編譯前的任務:認識核心與取得核心原始碼. 26.1.1 什麼是核心 (Kernel). Kernel 核心模組 (kernel module) 的用途 自製核心 - 核心編譯 關於驅動程式 - 是廠商的責任還是核心的責任?. 26.1 編譯前的任務:認識核心與取得核心原始碼. 26.1.2 更新核心的目的.
E N D
Linux 基礎學習 Chapter 26 Linux 核心編譯與管理 Linux基礎 -- Linux 核心編譯與管理
內容 • 編譯前的任務:認識核心與取得核心原始碼 • 核心編譯的前處理與核心功能選擇 • 核心的編譯與安裝 • 額外(單一)核心模組編譯 Linux基礎 -- Linux 核心編譯與管理
26.1 編譯前的任務:認識核心與取得核心原始碼26.1 編譯前的任務:認識核心與取得核心原始碼 • 26.1.1 什麼是核心 (Kernel) • Kernel • 核心模組 (kernel module) 的用途 • 自製核心 - 核心編譯 • 關於驅動程式 - 是廠商的責任還是核心的責任?
26.1 編譯前的任務:認識核心與取得核心原始碼26.1 編譯前的任務:認識核心與取得核心原始碼 • 26.1.2 更新核心的目的 • Linux 核心特色,與預設核心對終端用戶的角色 • 核心編譯的可能目的 • 新功能的需求 • 原本核心太過臃腫 • 與硬體搭配的穩定性 • 其他需求 (如嵌入式系統)
26.1 編譯前的任務:認識核心與取得核心原始碼26.1 編譯前的任務:認識核心與取得核心原始碼 • 26.1.3 核心的版本 為什麼不能從 2.4 升級到 2.6 呢?其實還是可以啦!只是過程很複雜! 我們知道軟體 (packages) 是架構在系統核心上面來進行編譯、安裝與執行的,也就是說,這些 packages 與核心之間,是有相關性的!這些 packages 會用到很多核心提供的功能。但是不同的[主][次]版本之間,它們提供的功能架構差異太大,因此,若你由 2.4 升級到 2.6 的話,那麼絕大部分的軟體『都需要重新再編譯!』這樣瞭解為何不要在不同的版本間升級了吧?
26.1 編譯前的任務:認識核心與取得核心原始碼26.1 編譯前的任務:認識核心與取得核心原始碼 • 26.1.4 核心原始碼的取得方式 • 原本 distribution 提供的核心原始碼檔案 • 取得最新的穩定版核心原始碼 • 保留原本設定:利用 patch 升級核心原始碼
26.1 編譯前的任務:認識核心與取得核心原始碼26.1 編譯前的任務:認識核心與取得核心原始碼 • 26.1.5 核心原始碼的解壓縮/安裝/觀察 • 核心原始碼的解壓縮與放置目錄 • 核心原始碼下的次目錄 • arch :與硬體平台有關的項目,大部分指的是 CPU 的類別,例如 x86, x86_64, Xen 虛擬支援等; • block :與區塊裝置較相關的設定資料,區塊資料通常指的是大量儲存媒體!還包括類似 ext3 等檔案系統的支援是否允許等。 • crypto :核心所支援的加密的技術,例如 md5 或者是 des 等等; • Documentation :與核心有關的一堆說明文件,若對核心有極大的興趣,要瞧瞧這裡!
26.1 編譯前的任務:認識核心與取得核心原始碼26.1 編譯前的任務:認識核心與取得核心原始碼 • drivers :一些硬體的驅動程式,例如顯示卡、網路卡、PCI 相關硬體等等; • firmware :一些舊式硬體的微指令碼 (韌體) 資料; • fs :核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等; • include :一些可讓其他程序呼叫的標頭 (header) 定義資料; • init :一些核心初始化的定義功能,包括掛載與 init 程式的呼叫等; • ipc :定義 Linux 作業系統內各程序的溝通; • kernel :定義核心的程序、核心狀態、執行緒、程序的排程 (schedule)、程序的訊號 (signle) 等 • lib :一些函式庫; • mm :與記憶體單元有關的各項資料,包括 swap 與虛擬記憶體等; • net :與網路有關的各項協定資料,還有防火牆模組 (net/ipv4/netfilter/*) 等等; • security :包括 selinux 等在內的安全性設定; • sound :與音效有關的各項模組; • virt :與虛擬化機器有關的資訊,目前核心支援的是 KVM (Kernel base Virtual Machine)
26.2 核心編譯的前處理與核心功能選擇 • 26.2.1 硬體環境檢視與核心功能要求 • CPU:AMD 的 Athlon64 3000+ (舊式,不含虛擬化功能) • 主機板晶片組:ALi M1689 K8 北橋 及 M5249, M1563 南橋晶片 (較冷門的硬體) • 顯示卡:AGP 8X 的 NVidia GeForce 6600LE • 記憶體:2.0GB 記憶體 • 硬碟:WD 2.5GB 硬碟,使用 ALi, ULi 5289 SATA 介面 • 電源控制器:ALi M7101 Power Management Controller (PMU) • 網路卡:3Com 3c905C-TX/TX-M (對外) • 網路卡:Realtek Semiconductor RTL-8139/8139C/8139C+
26.2 核心編譯的前處理與核心功能選擇 • 26.2.2 保持乾淨原始碼:make mrproper
26.2 核心編譯的前處理與核心功能選擇 • 26.2.3 開始挑選核心功能:make XXconfig • make menuconfig • make menuconfig • make xconfig • make gconfig • make config make menuconfig 核心功能挑選選單示意圖
26.2 核心編譯的前處理與核心功能選擇 • 26.2.4 核心功能細項選擇 • General setup • loadable module + block layer • CPU 的類型與功能選擇 • 電源管理功能 • 一些匯流排 (bus) 的選項 • 編譯後執行檔的格式 • 核心的網路功能 • 各項裝置的驅動程式 • 檔案系統的支援 • 核心駭客、資訊安全、密碼應用 • 虛擬化與函式庫
26.3 核心的編譯與安裝 • 26.3.1 編譯核心與核心模組
26.3 核心的編譯與安裝 • 26.3.2 實際安裝模組 • 先將舊的模組目錄更名,然後才安裝核心模組到目標目錄去; • 在 make menuconfig 時,那個 General setup 內的 Local version 修改成新的名稱。
26.3 核心的編譯與安裝 • 26.3.3 開始安裝新核心與多重核心選單 (grub) • 移動核心到 /boot 且保留舊核心檔案 • 建立相對應的 Initial Ram Disk (initrd) • 編輯開機選單 (grub) • 重新以新核心開機、測試、修改
26.4 額外(單一)核心模組編譯 • 26.4.1 編譯前注意事項
26.4 額外(單一)核心模組編譯 • 26.4.2 單一模組編譯 • 想像兩個情況: • 如果我的預設核心忘記加入某個功能,而且該功能可以編譯成為模組,不過,預設核心卻也沒有將該項功能編譯成為模組,害我不能使用時,該如何是好? • 如果 Linux 核心原始碼並沒有某個硬體的驅動程式 (module) ,但是開發該硬體的廠商有提供給 Linux 使用的驅動程式原始碼,那麼我又該如何將該項功能編進核心模組呢? • 硬體開發商提供的額外模組 • 利用舊有的核心原始碼進行編譯
26.4 額外(單一)核心模組編譯 • 6.4.3 核心模組管理 核心與核心模組是分不開的,至於驅動程式模組在編譯的時候,更與核心的原始碼功能分不開~ 因此,你必須要先瞭解到:核心、核心模組、驅動程式模組、核心原始碼與標頭檔案的相關性,然後才有辦法瞭解到為何編譯驅動程式的時候老是需要找到核心的原始碼才能夠順利編譯!然後也才會知道,為何當核心更新之後,自己之前所編譯的核心模組會失效~ 此外,與核心模組有相關的,還有那個很常被使用的 modprobe 指令,以及開機的時候會讀取到的模組定義資料檔案 /etc/modprobe.conf ,這些資料你也必須要瞭解才行~相關的指令說明我們已經在第二十章內談過了,你應該要自行前往瞭解喔!^_^