1. 程式人生 > >淺談Linux核心移植

淺談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-versionversion
而$version可以通過檢視/lib/modules目錄下的檔案得到。

六.安裝新核心:
1.複製編譯出來的核心映像到啟動目錄
cp arch/cpu/boot/bzImage/boot/vmlinuzversion

2.複製核心模組壓縮包到啟動目錄
cp initrd-version/boot/(initrdversion前面加上路徑,系統會自動搜尋,但是不要在核心原始碼目錄執行,最好在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目錄。用來加檔案頭。