日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux嵌入式 -- Bootloader , Uboot

發布時間:2024/4/18 linux 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux嵌入式 -- Bootloader , Uboot 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Bootloader作用

PC機中的引導加載程序由BIOS(其本質是一段固件程序)和GRUB或LILO一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤中的引導程序讀到系統內存中然后將控制權交給引導程序。引導程序的主要任務是將內核從硬盤上讀到內存中,然后跳轉到內核的入口點去運行,即啟動操作系統。

簡單地說,BootLoader就是在操作系統運行之前運行的一段小程序。通過這段小程序,可以初始化硬件設備,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統做好準備。

系統加電或復位后,所有的CPU通常都從CPU制造商預先安排地址開始執行。比如,S3C2410在復位后從地址0x00000000起開始執行。而嵌入式系統則將固態存儲設備(比如:FLASH)安排在這個地址上,而bootloader程序又安排在固態存儲器的最前端,這樣就能保證在系統加電后,CPU首先執行BootLoader程序。




2. Bootloader 移植

每種不同的CPU體系結構都有不同的BootLoader。除了依賴于CPU的體系結構外,BootLoader 還依賴于具體的嵌入式板級設備的配置,比如板卡的硬件地址分配,外設芯片的類型等。這也就是說,對于兩塊不同的開發板而言,即使它們是基于同一種CPU而構建的,但如果他們的硬件資源或配置不一致的話,要想在一塊開發板上運行的BootLoader程序也能在另一塊板子上運行,還是需要作修改。


3. 移植流程

BootLoader 的啟動過程可分為單階段(Single-Stage)和多階段(Multi-Stage)兩種。

BootLoader 大多采用兩階段,即啟動過程可以分為 stage1和 stage2:stage1完成初始化硬件,為stage2準備內存空間,并將stage2復制到內存中,設置堆棧,然后跳轉到stage2

Stage1:(匯編編寫)

? ? ?·硬件設備初始化(主要是CPU內部器件)
? ? ?·為加載 BootLoader 的 stage2 準備 RAM 空間
? ? ?·拷貝 BootLoader 的 stage2 到 RAM 空間中
? ? ?·設置好堆棧(why??) ?
? ? ?·跳轉到 stage2 的 C 入口

Stage2:(C編寫)

? ? ·初始化本階段要使用到的硬件設備(主要是外設)
? ? ·將內核映像和根文件系統映像從 flash 上讀到RAM 中
? ? ·調用內核




4. Uboot介紹

下載地址: ftp://ftp.denx.de/pub/u-boot/

文件目錄介紹



5. Uboot編譯

? ? 1. make mini6410_nand_config-ram256

? ? 2. make CROSS_COMPILE=arm-linux-

詳解:

mini6410_nand_config-ram256 : ?unconfig
@$(MKCONFIG) mini6410 arm s3c64xx mini6410 samsung s3c6410 NAND ram256

實際運行的是 ./mkconfig mini6410 arm s3c64xx mini6410 samsung s3c6410 NAND ram256 (8個參數)

查看mkconfig源碼(實際為shell腳本), 配置成功后 在 ../include/ ?下生成config.mk 和 config.h 為編譯時使用。


編譯注意兩步 :

a. 連接地址 ../board/samsung/mini6410/u-boot.lds(鏈接文件) ? + ? config.mk 里面的偏移地址(根據flash大小定地址)TEXT_BASE = 0xc7e00000

b. ../cpu/s3c64xx/start.S



命令實現: ../common/main.c ? 目錄../common/ 有各種命令實現源碼。。。


u-boot終極目的就是啟動內核 。。。。分兩步

a. 從flash讀出內核UImage, 分區名不重要, 關鍵是代碼中寫死的 分區起始地址。。。

b. 啟動內核, do_bootm_linux

do_bootm_linux又分兩步,設置啟動參數,告訴內核一些參數(有一個起始地址,按固定格式寫入),跳到內核入口地址再啟動內核,內核啟動后要讀取設置的參數可以從起始地址讀取。。。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Linux嵌入式 -- Bootloader , Uboot的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。