淺談Linux內核移植

Linux內核簡介:

1.系統架構
(1)Linux是由用戶空間和內核空間構成的

(2)用戶空間主要是用戶應用程序以及一些C庫文件,配置文件。一般是看得見的。

(3)內核空間主要是系統調用接口,狹義上的內核,處理器架構相關的代碼。

(4)劃分兩個空間的理由:處理器有不同的工作模式,不同的模式權限不一樣,可以運行的指令不一樣。兩個空間對應不同的工作模式(操作級別),程序執行的兩種不同的狀態。可以起到系統保護作用。比如用戶空間級別較低,內核空間級別高。

(5)通過系統調用和硬件中斷可以在兩種空間相互切換。

2.內核架構(狹義上內核,純代碼)
(1)系統調用接口
(2)進程管理(創建進程—fork,exec,停止進程–kill,exit,控制通信—signal,POSIX機制,共享CPU–進程調度)
(3)存儲管理(內存分配,回收,控制多個進程安全的共享內存區域)
(4)CPU架構相關代碼(爲的是提高至移植性)
(5)設備驅動程序
(6)網絡協議棧(只是協議,與硬件無關)
(7)虛擬文件系統(隱藏各種文件系統的具體操作細節,提供統一的文件操作接口)

3.源代碼目錄簡介
(1)ARCH:存放體系結構相關的代碼。下設子目錄,分別對應具體的CPU,沒格子目錄還有boot,mm,以及kernel三個子目錄,分別對應系統引導以及存儲管理,和系統調用

(2)documentation:內核文檔,包含幫助信息,修改信息等

(3)drivers:設備驅動目錄

(4)include:內核所需要的頭文件目錄。與平臺無關的頭文件在/include/linux子目錄下。平臺相關的則放在include相應的子目錄中。

(5)fs:存放各種文件系統的實現代碼。每個子目錄對應一種文件系統。公用的源代碼則用於實現VFS。

(6)net:網絡協議的實現目錄。

(7)管理源代碼:SourceInsight軟件。

二.內核配置
1.配置原因:根據嵌入式系統軟硬件可裁剪的特性,即根據你項目軟硬件的實際需求,對內核的相關模塊進行裁剪。

2.配置命令:
(1)make config—–》交互式
(2)make menuconfig—-》菜單式
(3)運行配置和編譯命令都是在頂層目錄進行的。

3.一般要用到的大項
(1)處理器類型(Process type)
–process family
–具體CPU
(2)Networking Suport

(3)Devices Drivers

(4)File Systems

4.利用已存在的配置文件(一般在已存在的Linux系統的/boot目錄下),來提高配置效率,一般在arch/$cpu/configs子目錄(或者使用默認的配置文件)。

5.<>—對應三種取值方式
(1)*——-編譯進uImage(內核映像文件運行在內存裏面,一開機就調進內存)
(2)空格—-捨棄不用該功能
(3)M——-編譯成模塊(.ko)存放在硬盤,等到系統需要的時候再調用,節省內存。

6.[]—–只有兩個取值,*和空格。

7.配置結果保存在.config文件,默認情況是隱藏的。
(1)後面的Y對應選擇時候的*
(2)M對應選擇時候的M
(3)可在menuconfig中選中某一項然後通過help選項可以查看該項在.config文件中的對應項。且是雙向對應的,即可以修改.config文件來改變menuconfig的菜單界面的選擇。

8.解壓tar.xz文件
有兩種解壓方法:
1
2
3
4
xz -d **.tar.xz
tar -xv -f **.tar

#

tar -Jxv -f **.tar.xz(大寫的J)

9.配置當前系統準備升級的內核

(1)備份原來的.config文件
mv ./.config ./.config——bak

(2)複製當前系統配置文件
cp /boot/config-2.6.32-279.el6.i686 ./.config

三.內核編譯

1.編譯命令
(1)make zImage —–只能用於小於512K的內核
(2)make bzImage —通用性較強
(3)如果想要在編譯過程中顯示詳細信息,則需要在後面加上 V=1選項。
(4)編譯好的內核映像文件在/arch/$cpu/boot目錄下

四.模塊編譯
1.編譯模塊:make modules
2.將編譯好的內核模塊從內核源代碼目錄複製到當前系統的/lib/modules下的**,爲打包做準備。
make modules_install
之後便會自動新建一個目錄,就是我們要的$version以及**。

五.製作ramdisk
運行命令:#mkinitrd initrd-version version
而$version可以通過查看/lib/modules目錄下的文件得到。

六.安裝新內核:
1.複製編譯出來的內核映像到啓動目錄
cp arch/cpu/boot/bzImage/boot/vmlinuz version

2.複製內核模塊壓縮包到啓動目錄
cp initrd-version/boot/(initrd version前面加上路徑,系統會自動搜索,但是不要在內核源代碼目錄執行,最好在home執行,則會在當前路徑產生一個ramdisk文件。)

3.修改/etc/grub.conf文件,從titile一直複製到最後,然後修改版本相關信息以及內核模塊打包的文件名。爲的是在啓動的時候可以選擇用什麼版本的內核啓動。

4.下次啓動的時候要快速按下回車鍵,進入啓動選擇菜單,然後選擇新安裝的版本啓動。進入系統以後用#uname -r查看當前使用的內核版本。

七。清理內核
1.只清理中間的.o文件,用make clean即可

2.要把所有中間文件和配置文件都清除,就要用make distclean

3.建議在拿到一套新代碼的時候都做一下make distclean再進行配置和編譯。

八.嵌入式內核製作
1.清除原有配置和中間文件
make distclean

2.配置內核
make menuconfig(參考已有的配置文件)ARCH=arm(因爲默認是X86平臺)

3.編譯內核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-

4.如果提示說缺少工具,就把之前編譯uboot/tools的mkimage複製到當前操作系統的/bin目錄。用來加文件頭。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章