娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

Linux嵌入式 -- Bootloader , Uboo

發(fā)布者:SereneMeadow7最新更新時間:2024-10-14 來源: cnblogs關鍵字:Linux  Bootloader  Uboo 手機看文章 掃描二維碼
隨時隨地手機看文章

1. Bootloader作用

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

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

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




2. Bootloader 移植

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


3. 移植流程

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

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

Stage1:(匯編編寫)

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

Stage2:(C編寫)

    ·初始化本階段要使用到的硬件設備(主要是外設)
    ·將內(nèi)核映像和根文件系統(tǒng)映像從 flash 上讀到RAM 中
    ·調(diào)用內(nèi)核




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個參數(shù))

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


編譯注意兩步 :

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

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



命令實現(xiàn): ../common/main.c   目錄../common/ 有各種命令實現(xiàn)源碼。。。


u-boot終極目的就是啟動內(nèi)核 。。。。分兩步

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

b. 啟動內(nèi)核, do_bootm_linux

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


關鍵字:Linux  Bootloader  Uboo 引用地址:Linux嵌入式 -- Bootloader , Uboo

上一篇:wince bsp中的g_oalAddressTable表
下一篇:uboot啟動Linux內(nèi)核時undefined instruction錯誤

小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 梁平县| 淮阳县| 杭州市| 登封市| 阿克苏市| 合作市| 阿城市| 鹤庆县| 宁乡县| 习水县| 香格里拉县| 无棣县| 大方县| 玉树县| 武乡县| 鄂托克旗| 宝山区| 方正县| 嘉义市| 东乡| 玛多县| 崇左市| 鹤壁市| 新密市| 拜泉县| 读书| 石嘴山市| 九龙城区| 萨迦县| 安化县| 潜山县| 河东区| 扶风县| 徐闻县| 枞阳县| 安塞县| 漯河市| 肇州县| 千阳县| 广水市| 怀来县|