總結於朱有鵬老師的嵌入式課程,感謝朱老師
uboot要啟動核心,分為2個步驟:第一步是將核心映象從啟動介質中載入到ddr中,第二步是去ddr中啟動核心映象。
作業系統核心本身就是乙個裸機程式,只是作業系統執行起來後在軟體上分為核心層和應用層。核心可以隨便訪問各種硬體,而應用程式只能被限制的訪問硬體和記憶體位址。
乙個完整的軟體+硬體的嵌入式系統靜止時各種必須的軟體都以映象的形式儲存在啟動介質中。執行時都是在ddr記憶體中執行的,與儲存介質無關。從靜止態到執行態的過程,也就是啟動過程。
動態啟動過程就是乙個從sd卡逐步搬移到ddr記憶體,並且執行啟動**進行相關的硬體初始化和軟體架構的建立,最終達到執行時穩定狀態。靜止時u-boot.bin zimage rootfs都在sd卡中,他們不可能隨意存在sd卡的任意位置,因此需要對sd卡進行乙個分割槽,然後將各種映象各自存在各自的分割槽中,這樣在啟動過程中uboot、核心等就知道到**去找誰。
uboot啟動核心時將記憶體從sd卡讀取放到ddr核心的鏈結位址處,uboot還要給核心提供啟動引數。
uboot經過編譯直接生成的elf格式的可執行程式是u-boot。使用arm-linux-objcopy工具進行加工得到u-boot.bin用於燒錄。這個u-boot.bin就叫映象(image),映象就是用來燒錄到inand中執行的。
linux核心經過編譯後也會生成乙個elf格式的可執行程式叫vmlinux或vmlinuz,經過製作加工成燒錄映象的檔案就叫image製作這個燒錄映象主要目的就是縮減大小,節省磁碟。對image進行了壓縮,並且在image壓縮後的檔案的前端附加了一部分解壓縮**。構成了乙個壓縮格式的映象就叫zimage。
uboot為了啟動linux核心,還發明了一種核心格式叫uimage。uimage是由zimage加工得到的
一般執行乙個映象都是:第一步先讀取頭資訊,然後在頭資訊的特定位址找magic_num,由此來確定映象種類;第二步對映象進行校驗;第三步再次讀取頭資訊,由特定位址知道這個映象的各種資訊(映象長度、映象種類、入口位址);第四步就去entrypoint(程式入口)處開始執行映象。
uboot在啟動核心時,機器碼要傳給核心。第一順序備選是環境變數machid,第二順序備選是gd->bd->bi_arch_num。
tag方式傳參
(1)struct tag,tag是乙個資料結構,在uboot和linux kernel中都有定義tag資料機構,而且定義是一樣的。
(2)tag_header和tag_***。tag_header中有這個tag的size和型別編碼,kernel拿到乙個tag後先分析tag_header得到tag的型別和大小,然後將tag中剩餘部分當作乙個tag_***來處理。
(3)tag_start與tag_end。kernel接收到的傳參是若干個tag構成的,這些tag由tag_start起始,到tag_end結束。
(4)tag傳參的方式是由linux kernel發明的,kernel定義了這種向我傳參的方式,uboot只是實現了這種傳參方式從而可以支援給kernel傳參。
(5)起始tag是atag_core、結束tag是atag_none,其他的atag_***都是有效資訊tag。
uboot最終是呼叫thekernel函式來執行linux核心的,uboot呼叫這個函式時傳遞了3個引數。這3個引數就是uboot直接傳遞給linux核心的3個引數,通過暫存器來實現傳參的。(第1個引數就放在r0中,第二個引數放在r1中,第3個引數放在r2中)第1個引數固定為0,第2個引數是機器碼,第3個引數傳遞的就是大片傳參tag的首位址。
嵌入式學習筆記 uboot
1 linux啟動方式比較 一上電pc linux 嵌入式系統 bios硬碟讀入核心 boot loader 最終目的是啟動核心,有很多種,我用的是uboot 從flash讀出核心,放到sdram中 引導作業系統windows 引導核心 識別c,d盤 掛接根檔案系統 執行應用程式qq等 應用程式 2...
嵌入式UBOOT學習
之前還學習了在虛擬機上安裝ubuntu16.04系統,使用命令安裝一些必需的軟體包,以及常用的終端命令 以後再作補充。今天學習的內容總結如下,主要是對編譯uboot前的環境變數進行配置,以及elftosb轉換工具的安裝,使用該工具編譯出mx28 ivt uboot.sb檔案。uboot的概念 ubo...
嵌入式學習筆記
嵌入式系統定義 技術角度以應用為中心,以計算機技術為基礎,軟硬體可裁剪,應用系統對功能,可靠性,成本,體積,功耗,和應用環境有特殊要求的專用計算機系統系統角度 設計完成複雜功能的硬體和軟體並使其緊密契合在一起的計算機系統 實時在規定的時間內,完成規定的動作 紅帽linux 基本命令 ls 檢視當前目...