1. 程式人生 > >將Ubuntu 10.04自帶2.6.32核心升級成3.0核心圖文教程

將Ubuntu 10.04自帶2.6.32核心升級成3.0核心圖文教程

1、完成如下實踐工作,並截圖說明實踐步驟:1)下載安裝虛擬機器VMWare Workstation;2)在虛擬機器中安裝Linux2.x ;3)通過自行編譯,將Linux 2.x核心升級到Linux 3.x。

1)     安裝VMware Workstation 11.1.0。


2)     在虛擬機器中安裝Ubuntu 10.04 LTS (ubuntu-10.04-desktop-i386.iso),其Linux核心版本為2.6.32。


3)     從kernel.org下載新版3.0.0核心,在Ubuntu10.04上編譯後安裝,從而升級到3.0.0核心。


2、對1題的3)完成的同時,回答如下問題:

1)  核心主要原始碼目錄包括什麼,每個目錄下主要實現什麼管理?

/arch:目錄包括了所有和體系結構相關的核心程式碼。它下面的每一個子目錄都代表一種Linux支援的體系結構,例如i386就是Intel CPU及與之相相容體系結構的子目錄。PC機一般都基於此目錄。

/documentation:目錄下是一些文件,沒有核心程式碼,可惜都是English的,是對每個目錄作用的具體說明。

/drivers:目錄中是系統中所有的裝置驅動程式。它又進一步劃分成幾類裝置驅動,每一種有對應的子目錄,如音效卡的驅動對應於/drivers/sound;block 下為塊裝置驅動程式,比如ide(ide.c)。如果你希望檢視所有可能包含檔案系統的裝置是如何初始化的,你可以看/drivers/block/genhd.c中的device_setup()。它不僅初始化硬碟,也初始化,因為安裝nfs檔案系統的時候需要網路。其他:如, Lib放置核心的庫程式碼; Net,核心與網路相關的程式碼; Ipc,這個目錄包含核心的程序間通訊的程式碼; Fs,所有的檔案系統程式碼和各種型別的檔案操作程式碼,它的每一個子目錄支援一個檔案系統,例如fat和ext2。

/fs:目錄存放Linux支援的檔案系統程式碼和各種型別的檔案操作程式碼。每一個子目錄支援一個檔案系統,如ext3檔案系統對應的就是ext3子目錄

/include:目錄包括編譯核心所需要的大部分標頭檔案,例如與平臺相關的標頭檔案在/include/linux子目錄下,與 intel cpu相關的標頭檔案在/include/asm-i386子目錄下,而/include/scsi目錄則是有關scsi裝置的標頭檔案目錄。

/init:目錄包含核心的初始化程式碼(不是系統的引導程式碼),有main.c和Version.c兩個檔案。這是研究核心如何工作的好起點。

/ipc:目錄包含了核心程序間的通訊程式碼。

/Kernel:核心管理的核心程式碼,此目錄下的檔案實現了大多數linux系統的核心函式,其中最重要的檔案當屬sched.c;同時與處理器結構相關程式碼都放在/arch/*/kernel目錄下。

/lib:目錄包含了核心的庫程式碼,不過與處理器結構相關的庫程式碼被放在/arch/*/lib/目錄下。

/mm:目錄包含了所有獨立於 cpu 體系結構的記憶體管理程式碼,如頁式儲存管理記憶體的分配和釋放等。與具體硬體體系結構相關的記憶體管理程式碼位於/arch/*/mm目錄下,例如/arch/i386/mm/Fault.c 。

/net:目錄裡是核心的網路部分程式碼,實現了各種常見的網路協議,其每個子目錄對應於網路的一個方面。

/scripts:目錄包含用於配置核心的指令碼檔案等

/block:塊裝置驅動程式I/O排程。

/crypto:常用加密和雜湊演算法(如AES,SHA等),還有一些壓縮和CRC校驗演算法。

/security:主要包含SELinux模組。

/sound:ALSA,OSS音訊裝置的驅動核心程式碼和常用裝置驅動。

/usr:實現了用於打包和壓縮的cpio等。

2)  核心升級必要的軟體包需要那些?

編譯核心用到:gcc, libncurses5-dev

下載核心檔案用到:wget

解壓縮核心原始碼用到:tar

3)  編譯核心的步驟是什麼?

第一步:Configure

sudo make menuconfig

上面的命令用來配置Linux核心,一旦執行了該命令,螢幕將會彈出一個視窗,裡面都是選單列表,我們可以選擇新配置選項,如果不熟悉該配置的話,我們只需要進入File systems選單項,來確認ext4檔案系統被選中,如果沒有選中的話,選中它,並且儲存配置。


第二步:Compile

sudo make

上面的命令用來編譯Linux核心,這個步驟比較花時間,大概用了40-50分鐘。

第三步:Install

sudo make modules_install install

上面的命令用來將Linux3.0核心安裝到系統中,該命令將會在/boot/目錄下建立一些檔案,並且會在grub.cfg檔案中建立一個啟動項,我們可以檢查一下該啟動項是否被正確建立,/boot/目錄下的檔案如下:

System.map-3.0.0

vmlinuz-3.0.0

initrd.img-3.0.0

config-3.0.0

重啟系統,我們會進入新的Linux3.0核心的Ubuntu系統中。

4)  在編譯過程中通常會遇到的問題有哪些,解決的辦法是什麼?

問題1:沒有足夠的許可權,這是由於當前使用者許可權不夠引起的,在Ubuntu上可以通過在命令前面加入sudo來按照root許可權執行命令。

問題2:安裝軟體包失敗,這是由於ubuntu官方網站在國外,國內一般不容易連線成功,這時可以通過替換Ubuntu源來解決,源的配置檔案為/etc/apt/sources.list,將此檔案中的內容替換成國內的源地址即可。本文中替換的源為網易Ubuntu10.04源:

deb http://mirrors.163.com/ubuntu/ lucid main universe restricted multiverse

deb-src http://mirrors.163.com/ubuntu/ lucid main universe restricted multiverse

deb http://mirrors.163.com/ubuntu/ lucid-security universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/ lucid-security universe main multiverse restricted

deb http://mirrors.163.com/ubuntu/ lucid-updates universe main multiverse restricted

deb http://mirrors.163.com/ubuntu/ lucid-proposed universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/ lucid-proposed universe main multiverse restricted

deb http://mirrors.163.com/ubuntu/ lucid-backports universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/ lucid-backports universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/ lucid-updates universe main multiverse restricted

5)  你在編譯過程中實際遇到了什麼問題,最後的解決辦法是什麼?收穫是什麼?

我的解決辦法是在Windows下采用迅雷軟體進行核心下載,然後通過samba共享檔案機制把核心檔案共享到Ubuntu中。

問題2:核心編譯速度比較慢。

我的解決辦法是在VMware中為虛擬機器分配6個CPU核和3GB記憶體,這樣虛擬機器可以6個執行緒一起進行核心編譯,從而顯著加快速度。


收穫:

經過這次Linux核心升級實驗,我對Linux核心的編譯、工作機制有了更好的瞭解,對我們今後開展Android核心的安全加固專案提供了有效指導。