u-boot,全稱為universal boot loader,即通用bootloader。通用有兩層含義:可以引導多種作業系統、支援多種架構的cpu。
根據u-boot原始碼資料夾頂層的readme檔案說明,針對使用的開發板 board/,執行:
1、make _config
2、make all
可以生成以下三個檔案:
1、u-boot.bin:二進位制可執行檔案,可以直接燒入rom、nor flash;
2、u-boot:elf格式的可執行檔案;
3、u-boot.srec:motoroal s-record格式的可執行檔案。
通過分析頂層makefile和mkconfig兩個檔案,配置簡述過程如下:
make _config 相當於執行 ./mkconfig $2 $3 $4 $5 $6
ln -s asm-$2 asm
ln -s arch-$6 asm-$2/arch
ln -s proc-armv asm-$2/proc//如果$2不是arm的話,此行沒有
2、建立頂層makefile包含的檔案include/config.mk:
arch =$2
cpu = $3
board = $4
vendor = $5
soc = $6
#include .h>
對於乙個拿到手的板子,檢視其各個器件型號後,要在board目錄下新建乙個開發板的目錄,同時要在include/configs下新建乙個標頭檔案.h,裡面存放的就是開發板的相關配置資訊。其中主要包括了一下兩類巨集:
1、選項(options),字首為"config_",用於選擇cpu、soc、開發板,設定系統時鐘,選擇裝置驅動等;
u-boot在編譯、連線過程中,幾乎每個檔案都被編譯和連線了,由巨集開關來決定哪些**是有效的。
總結u-boot的編譯流程如下:
1、首先,編譯cpu/$(cpu)/start.s,對於不同的cpu,還有可能編譯cpu/$(cpu)下的其他檔案;
2、然後,對於平台/開發板相關的每個目錄,每個通用目錄都使用各自的makefile生成相應的庫;
3、將1、2步驟生成的.o、.a檔案按照board/$(boarddir)/config.mk檔案中制定的**起始位址、board/$(boarddir)/u-boot.lds連線指令碼進行連線;
4、第3步得到的是elf格式的u-boot, 之後makefile還會將它轉換為二進位制格式、s-record格式。
本文出自 「stay hangry,stay foolish」 部落格,請務必保留此出處
對編譯連線過程的認識
一.為何要有編譯連線的過程 原因 程式檔案需要執行環境,機器不識別高階語言 linux下可執行檔案是elf windows下可執行檔案是pe 編譯連線過程 預編譯 生成.i檔案 1.刪除 idefine 文字替換 2.if endif elif 3.include 展開標頭檔案 4.新增行號和檔案標...
編譯鏈結過程
在談編譯鏈結過程之前我們需要了解一下虛擬位址空間以及程式在編譯鏈結過程時經過了什麼步驟。虛擬位址空間之前在程序空間的部落格中詳細介紹過了,詳見 上圖就是32位系統中4g虛擬位址空間的分布情況 text 段 指令段,存放的是指令 在程式中,我們把區域性變數定義 區域性變數的 定義是指令而不是資料 還有...
TCP連線過程
1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1.2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...