1. 程式人生 > >嵌入式Linux開發——(十四)移植Linux核心

嵌入式Linux開發——(十四)移植Linux核心

  • 基於Linux2.6.22.6

1、相關常識

    ①VERSION = 2   PATCHLEVEL=6

       主版本號,穩定版本用偶數來表示,每隔2~~3年出現一個穩定版

    ②SUBLEVEL=22

       次版本號,每隔1~~2個月一更新

    ③EXTRAVERSION = .6

      擴充套件版本號

   ④獲取核心網址:

http://www.kernel.org/

   ⑤打補丁:

    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程序