嵌入式Linux開發——(十四)移植Linux核心
- 基於Linux2.6.22.6
1、相關常識
①VERSION = 2 PATCHLEVEL=6
主版本號,穩定版本用偶數來表示,每隔2~~3年出現一個穩定版
②SUBLEVEL=22
次版本號,每隔1~~2個月一更新
③EXTRAVERSION = .6
擴充套件版本號
④獲取核心網址:
⑤打補丁:
tar xjf linux-2.6.22.6.tar.bz2
tar xjf patch-2.6.22.6.bz.2
cd linux-2.6.22
patch -p1 < ../patch-2.6.22.6
2、核心原始碼結構及Makefile分析
1)核心子目錄結構
2)Makefile分析
①Makefile決定了檔案檔案編譯的順序、連線規則
②Linux核心中Makefile檔案分類:
③核心文件Documenttation/kbuild/mahefiles.txt對Makefile用法進行講解
④obj-y、obj-m、lib-y分別用來定義哪些檔案被編譯進核心、編譯成載入模組(驅動)、編譯成庫檔案
⑤選項:
A、全域性選項(適用於整個核心程式碼樹)
CFLAGS:編譯C檔案的選項
AFLAGS:編譯成彙編檔案的選項
LDFLAGS:連線檔案選項
ARFLAGS:製作庫檔案選項
B、區域性選項(僅適用於某個Makefile中的所有檔案)
EXTRA_CFLAGS
EXTRA_AFLAGS
EXTRA_LDFLAGS
EXTRA_ARFLAGS
C、個體檔案選項(僅適用於某個檔案)
[email protected] EXTRA_AFLAGS
⑥ $(patsubst pattern, replacement, text)
patsubst為字串處理函式
用法:在text中尋找pattern,並用replacement替代patsubst
eg:
$(patsubst %/, %/build-in.o, init/)
-----> init/build-in.o
3)核心的Kconfig分析(用於配置核心)
①Kconfig檔案的基本要素:config條目
②menu條目
menu 在menu和endmenu之間有很多config條目
config x
config y
config z
enfmenu
③choice條目
④comment條目:用於定義一些幫助資訊
⑤source條目:用於讀入另一個Kconfig檔案
4)Linux核心配置選項
1、配置介面主選單類別
2、“System Type”選單:系統類別
3、“Device Drivers”選單:裝置驅動程式
3、Linux核心移植
1)Linux的啟動過程可以分為兩部分:架構/開發板相關的引導過程、後續的通用啟動過程
A、第一階段通常使用匯編編寫,首先檢查核心是否支援當前架構的處理器,然後檢查是否支援當前開發板
①連線核心時使用虛擬地址,使用要攝者頁表,使能MMU
②呼叫C函式start_kernel之前的常規工作,包括複製資料段、清除BSS段
B、第二階段的程式碼主要用C語言編寫,它進行核心初始化的全部工作,最後呼叫rest_init函式啟動init過程,建立系統第一個進 程:init程序