2021-05-12 14:32:11
linux-2.6.22.6核心啟動分析之核心編譯體驗
1 解壓縮、打修補程式操作
1.1 開啟Ubuntu,通過FTP將Windows相應資料夾下的linux-2.6.22.6.tar.bz2和修補程式檔案linux-2.6.22.6-jz2440.patch上傳到伺服器/work/hardware目錄下
1.2 輸入cd /work/hardware 進入壓縮包所在目錄,再使用 tar xjf linux-2.6.22.6tar.bz2 命令對linux核心原始碼壓縮包進行解壓縮
1.3 輸入cd /linux-2.6.22.6 進入解壓縮後核心的原始碼目錄,執行 patch -p1 < ../linux-2.6.22.6-jz2440.patch 命令對核心進行打修補程式操作
2 核心的設定(3種方法)
在進行介紹三種核心設定方法之前先說明在我電腦編譯環境下,執行meke menuconfig命令遇到的問題。我使用的虛擬機器版本是Ubuntu-16.04.2,GNU Make的版本是4.1(在linux環境下輸入make -v可以檢視GNU Make版本資訊),遇到編譯問題如下圖:
網上搜尋找到了報錯原因,因為所編譯linux-2.6.22.6核心版本比較舊,而我使用的GNU Make版本較新,新版本可能對於make的規則可能做出了一些修改,所以出現了上面的錯誤提示,因此需要對核心頂層的Makefile檔案做出如下修改:
linux-2.6.22.6核心根目錄下,輸入 vi Makefile 命令,輸入 416gg 快速定位到416行,看到如下程式碼:
這裡需要修改為
然後是提示的1449行
這裡需要修改為
完成後繼續執行 make menuconfig 命令即可看到設定順利進行。
2.1 直接執行 make menuconfig 命令,從頭到尾每一項都自己去設定
執行make menuconfig命令後,裡面有成千上萬種設定選項,需要一個一個去設定,顯然操作十分複雜。
2.2 使用預設設定,在預設設定基礎上進行修改
先用cd命令切換到linux-2.3.22.6核心存放根目錄下,再進行預設組態檔的查詢。這裡我們可以通過 find -name "*defconfig*" 命令實現查詢操作,這條命令查詢所有帶"defconfig"字串的資料夾路徑。查詢結果如下,可以看到帶"def_config"字串的組態檔都在arch架構目錄下存放。
我們的開發板使用的晶片屬於arm架構,所以通過cd ./arch/arm/configs 進入configs目錄尋找和開發板使用晶片相似的組態檔。進入目標資料夾後使用 ls 命令來列出該文價夾下包含的組態檔,該目錄下包含的組態檔如下圖所示:
通過上面查詢結果可以看到,與2440相似的設定只有s3c2410_defconfig檔案了,這裡我們先返回存放linux-2.6.22.6核心的根目錄,然後執行 make s3c2410_defconfig 命令來進行設定,設定結果如下圖所示:
設定完後列印結果"configuration written to .config",表示所有的設定資訊都寫入到了.config檔案中,執行make menuconfig 命令就是回去讀取.config檔案內容。
2.3 使用廠家提供的組態檔
jz2440出廠時,廠家提供了相應的組態檔config_ok,在打修補程式時已經存放到核心的目錄下。由上面的介紹,我們知道執行make menuconfig 命令就是去讀取.config內容,若想使用廠家提供組態檔,只需要把廠家提供組態檔內容複製到.config檔案中。使用cd命令切換到linux-2.3.22.6核心存放目錄下,使用 cp config_ok .config 命令就能把實現前面所敘述操作。
2.4 執行make menuconfig 設定選單
選單操作命令如下表所述:
Arrow keys navigate the menu | 鍵盤上下鍵可以控制選單上下移動,左右鍵可以控制水平三個選單移動 |
<Enter> selects submenus ---> | 按下鍵盤Enter(確認鍵)可以進入該項選單子目錄 |
Highlighted letters are hotkeys | 開頭為粗體字母代表是該項選單熱鍵,在鍵盤上按下相應字母,游標定位到該處 |
Pressing <Y> includes | Y鍵,編譯到核心中 |
<N> excludes | N鍵,不編譯到核心中 |
<M> modularizes features | M鍵,進行模組化 |
Press <Esc><Esc> to exit | Esc鍵退出 |
<?> for Help | ?鍵幫助 |
</> for Search | /鍵收索 |
Legend: | 顯示 |
[*] built-in | 已經內建到核心中 |
[ ] excluded | 不編譯到核心中 |
<M> module | 已經模組化 |
< > module capable | 表示該選項可以模組化 |
3 編譯
3.1 輸入 make 命令直接進行編譯
3.2 輸入 make uImage命令生成uImage形式核心檔案,uImage檔案包含頭部和真正核心部分,可以燒寫進去讓uboot直接使用。編譯uImage檔案時必須把編譯uboot得到的mkimage工具複製到/user/bin目錄中。
3.3 執行uboot,按下命令鍵k可以通過dnw軟體把uImage檔案傳給uboot,uboot再清除flash,把uImage檔案寫入到flash中。
4 啟動核心
4.1 通過uboot燒寫uImage形式核心檔案完成後,可以通過選單鍵中b鍵重新啟動核心,注意flash中儲存有完整檔案系統時核心才能啟動成功,否則核心啟動會卡在某一位置。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-07/153064.htm
相關文章