Download presentation
Presentation is loading. Please wait.
1
第16章 編譯與升級Kernel系統核心 課前指引
「Kernel核心」是作業系統最重要的基礎,任何的硬體及週邊設備要能夠被驅動,並且,讓軟體與硬體能夠相互溝通,核心扮演極重要的角色。對於初期學習Linux系統的使用者來說,此門課程內容稍為過於深入;但是,若以Linux系統管理與維護工作技能,則此門課程萬萬不可忽略。
2
章節大綱 16-1 透過輔助工具升級核心 16-5 調整開機選項設定 16-2 重新編譯核心前的準備工作 16-3 重新編譯核心Kernel
16-1 透過輔助工具升級核心 16-5 調整開機選項設定 16-2 重新編譯核心前的準備工作 16-3 重新編譯核心Kernel 16-4 測試新的核心Kernel 備註:可依進度點選小節
3
16-1 透過輔助工具升級核心 透過指令【uname -r】可以查詢當前使用的Linux Kernel版本為何,在初期安裝的9.10版之Ubuntu Linux預設的Kernel版本為「 」。 輸入指令【sudo aptitude full-upgrade linux-headers】以執行升級Linux核心的動作。提示是否繼續,請輸入【Y】。
4
16-1 透過輔助工具升級核心 更新程序完成之後,必須重新啟動當前的Linux作業系統,在終端機模式,可以透過指令【sudo shutdown -r now】在輸入使用者密碼後,即可重新啟動電腦。 當Linux Kernel升級程序無誤,則預設在重新啟動時,便會載入升級過程所安裝的Linux Kernel版本為當前的Linux Kernel版本,透過指令【uname -r】可以取得當前所使用的Linux Kernel版本。
5
16-2 重新編譯核心前的準備工作 某些特殊的情況,如特定的硬體或功能不支援,則通常會透過「重編核心Re-Build Kernel」的方式,根據需求客製化專屬版本的Linux Kernel,再透過套件安裝指令,將所編譯的客製化Linux Kernel安裝置作業系統裡。 然而,預設安裝的Ubuntu Linux並不支援「編譯核心」,若要使它支援「編譯核心」的動作,則必須安裝相關的套件。
6
16-2 重新編譯核心前的準備工作 輸入指令【sudo aptitude install gcc make build-essential】安裝必要元件。 依提示輸入使用者密碼。 進行安裝
7
16-2 重新編譯核心前的準備工作 在完成安裝之後,請輸入指令【gcc -v】以確定編譯指令已經安裝完成;輸入指令後,若成功顯示版本資訊(如下圖)則代表安裝無誤,若未正常出現,則請務必先行檢查安裝步驟是否有誤。
8
16-3 重新編譯核心Kernel 下載Linux Kernel網站所釋出之最新版本的Kernel Source為資料來源,編譯試用於當前平台及硬體環境的Linux Kernel為範例版本為【2.6.34】。
9
16-3 重新編譯核心Kernel 在Linux Kernel官方網站的右邊之「Latest Stable Kernel」區域,會提供最新釋出的Linux Kernel Source版本的下載連結,請將滑鼠游標停留於連結的上方,並單擊滑鼠右鍵,選擇「複製捷徑」以取得Linux Kernel Source的下載連結。
10
16-3 重新編譯核心Kernel 在完成連結的複製後,請返回Linux的終端機操作介面,並且,透過指令【cd/usr/src】以切換目錄至儲存Kernel Source的目錄。
11
16-3 重新編譯核心Kernel 進入Kernel Source的儲存目錄後,請透過指令wget及剛才所複製的下載連結進行Kernel Source的下載;以剛才所複製的2.6.34版本之Linux Kernel Source為例,請輸入【sudo wget Source檔案至指定的儲存路徑。
12
16-3 重新編譯核心Kernel 預設下載的Linux Kernel Source都是採用兩層的壓縮包裝,第一層必須透過系統指令bzip2解壓縮,第二層則是透過tar指令解壓縮。
13
16-3 重新編譯核心Kernel 在取得並解開Linux Kernel Source壓縮檔案後,便可以切換至Linux Kernel Source的目錄,並且透過指令【sudo make menuconfig】及Linux kernel configuration選單增減所需要的選項。
14
16-3 重新編譯核心Kernel 透過Linux Kernel Configuration選單,能夠根據需求調整Linux kernel支援的硬體裝置設定選項;舉個例子來說,希望Linux作業系統「不再支援」多媒體裝置及SD/MMC/Sony等記憶卡儲存媒體,則此時便可以透過Linux Kernel Configuration將相關的裝置支援取消選取
15
16-3 重新編譯核心Kernel 進入Device Drivers設定分頁,請取消核選不希望支援的裝置項目,以範例為參考,則請取消核選「Multimedia support」及「MMC/SD/SDIO card support」與「Sony Memory Stick card support」選項。
16
16-3 重新編譯核心Kernel 完成相關的選取之後,請記得在離開Linux Kernel Configuration選單前,務必於主選單選擇「Save am Alternate Configuration File」再選擇「Exit」退出Linux Kernel Configuration選單;如此步驟主要是產生編譯Linux Kernel所必須的「.config」環境組態檔案。
17
16-3 重新編譯核心Kernel 產生必要的組態檔案後,便可以開始透過make指令執行Linux Kernel編譯的動作,在開始之前,請先輸入指令【sudo make-kpkg clean】以清除不必要的檔案,包括過去操作所產生之不必要的檔案。
18
16-3 重新編譯核心Kernel 接著,直接輸入make指令可以開始編譯指定版本的Linux Kernel Source;不過,在這裡,希望經過編譯後產生的是Debian套件管理專用的dpkg檔案,以方便在完成編譯動作後,直接進行客製化版本Linux Kernel的安裝。 針對此需求,可以透過「make-kpkg」指令達成需求,完整的參考指令為【sudo fakeroot make-kpkg --initrd --append-to-version= frankkernel001 kernel-image kernel-header】 其中「frankkernel001」代表編譯後的kernel版本代碼,方便使用者識別,您可以根據需求進行變更。
19
16-4 測試新的核心Kernel 順利完成編譯後,會在儲存Linux Kernel Source的目錄產生所建立的Debian格式的Linux Kernel安裝套件,直接透過指令dpkg -i 進行安裝即可 輸入指令【sudo dpkg -i linux-*.deb】以安裝客製化版本的Linux Kernel套件。
20
16-4 測試新的核心Kernel 完成Kernel安裝後,必須透過指令將預設載入的相關硬體裝置驅動的檔案,包裝成initrd.img檔案,這樣在Linux系統開機時,才能夠順利載入所編譯的客製化版本Linux Kernel Source並且驅動必須的硬體及周邊裝置。 產生initrd.img檔案,必須指定特定的Linux Kernel版本,在透過套件完成客製化Linux Kernel的安裝後,會將必要的硬體及周邊驅動檔案都以Linux Kernel版本為目錄名稱,並且,預設儲存在「/lib/modules」目錄。
21
16-4 測試新的核心Kernel 輸入指令【sudo mkinitramfs -o /boot/initrd.img frankkernel frankkernel001】以產生開機時必要的initrd.img檔案。 最後,只要輸入指令update-grub以更新Ubuntu Linux預設建立的grub開機管理程式的設定值,使其加上客製化版本的Linux Kernel供系統啟動時使用。
22
16-4 測試新的核心Kernel 輸入指令【sudo shutdown -r now】以重新啟動電腦
23
16-5 調整開機選項設定 以16-1節的範例為例,在透過aptitude指令升級系統核心之後,預設在完成核心升級動作並重新啟動作業系統時,預設便會載入所安裝的新版核心;預設在開機選單沒有被啟用前,使用者並不能方便的進行核心版本的切換。 此時需要透過手動修改GRUB開機選單的設定值,並且重新載入GRUB的組態設定檔案,當再次重新啟動時,便可以透過開機選單輕鬆的進行核心版本的切換。
24
16-5 調整開機選項設定 輸入指令【sudo vi /etc/default/grub】以編輯預設的開機選單設定選項。
要啟用GRUB開機選單,則請將「/etc/default/grub」設定檔內容的設定選項之「GRUB_HIDDEN_TIMEOUT=0」選項關閉即可。
25
16-5 調整開機選項設定 將「GRUB_HIDDEN_TIMEOUT=0」,改成「#GRUB_HIDDEN_TIMEOUT=0」
修改完成後,請按【ESC】鍵返回命令模式,並且,輸入指令【:wq!】以儲存檔案並且退出vi編輯器。 完成設定檔案變更後,請再次輸入指令【sudo update-grub】以更新預設安裝的GRUB開機管理選單的設定值。
26
16-5 調整開機選項設定 GRUB開機管理選單(1) GRUB_DEFAULT GRUB_HIDDEN_TIMEOUT=0
設定預設選單選項。選項可以是數字或是「saved」。 GRUB_HIDDEN_TIMEOUT=0 此設定將影響選單顯示。若啟用開機影像,將會在任何逾時設定中顯示。 GRUB_HIDDEN_TIMEOUT_QUIET=true true 不顯示倒數。螢幕將會是空白的。 false 在 GRUB_HIDDEN_TIMEOUT 中設定的時間,空白螢幕上會有一個倒數計時器。 GRUB_TIMEOUT=10 此指令將推遲 GRUB_HIDDEN_TIMEOUT 設定。
27
16-5 調整開機選項設定 GRUB開機管理選單(2)
GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian 取得選單選項中的描述名稱。(Ubuntu, Xubuntu, Debian 等等。) GRUB_CMDLINE_LINUX 若存在,無論在一般或是救援模式,此行將匯入任何在 'linux' 註解行中的項目(傳統 GRUB 的「kernel」行)。類似於 menu.lst 中的「altoptions」行。 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 此行將匯入任何在 'linux' 行中的項目(傳統 GRUB 的「kernel」行)。
28
16-5 調整開機選項設定 GRUB開機管理選單(3) GRUB_TERMINAL=console
移除註解來停用圖形化終端機(只限 grub-pc) GRUB_DISABLE_LINUX_UUID=true 移除註解若您不想讓 GRUB 傳遞「root=UUID=xxx」參數給 Linux。 GRUB_GFXMODE=640x480 您可移除 # 符號來啟用此行。此選項會設定圖形化選單的解析度(選單文字大小)。
29
16-5 調整開機選項設定 GRUB開機管理選單(3) GRUB_DISABLE_LINUX_RECOVERY=true
加上或移除此行註解來防止「救援」模式核心選項顯示在選單中。 GRUB_DISABLE_OS_PROBER=true 啟用/停用 os-prober 對其他分割區作業系統的檢查,包括 Windows, Linux, OSX 和 Hurd。
30
本章結束 Q&A討論時間
Similar presentations