0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

tiny4412編譯與移植U-Boot

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-08-31 08:59 ? 次閱讀

tiny4412編譯與移植U-Boot

1.uboot簡介

U-Boot 是一個主要用于嵌入式系統(tǒng)的引導加載程序,可以支持多種不同的計算機系統(tǒng)結(jié)構(gòu),包括PPC、ARM、AVR32、MIPS、x86、68k、Nios與MicroBlaze。這也是一套在GNU通用公共許可證之下發(fā)布的自由軟件。

U-Boot本質(zhì)是一個裸機程序,是一種普遍用于嵌入式系統(tǒng)中的開源的Bootloader,作用是用來引導操作系統(tǒng),以及給開發(fā)人員提供測試調(diào)試工具。主要負責基本硬件初始化,導啟動內(nèi)核啟動。

2.選擇U-Boot理由

① 開放源碼;
② 支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android
③ 支持多個處理器系列,如PowerPC、ARM、x86、MIPS;
④ 較高的可靠性和穩(wěn)定性;
⑤ 高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不同引導要求、產(chǎn)品發(fā)布等;
⑥ 豐富的設(shè)備驅(qū)動源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
⑦ 較為豐富的開發(fā)調(diào)試文檔與強大的網(wǎng)絡技術(shù)支持;

3.U-Boot主要功能

系統(tǒng)引導支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統(tǒng);支持NFS掛載、從FLASH中引導壓縮或非壓縮系統(tǒng)內(nèi)核;

基本輔助功能強大的操作系統(tǒng)接口功能;可靈活設(shè)置、傳遞多個關(guān)鍵參數(shù)給操作系統(tǒng),適合系統(tǒng)在不同開發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布,尤以Linux支持最為強勁;支持目標板環(huán)境參數(shù)多種存儲方式,如FLASH、NVRAM、EEPROM;

CRC32校驗可校驗FLASH中內(nèi)核、RAMDISK鏡像文件是否完好;

設(shè)備驅(qū)動串口、SDRAM、FLASH、以太網(wǎng)、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅(qū)動支持;

上電自檢功能SDRAM、FLASH大小自動檢測;SDRAM故障檢測;CPU型號;

4.U-Boot工作模式

uboot分為啟動加載模式和下載模式。啟動模式即為正常工作模式,嵌入式產(chǎn)品發(fā)布時必須工作在啟動模式,此時uboot可以完成操作系統(tǒng)引導,可以將操作系統(tǒng)從flash中拷貝到sram中運行,整個過程自動完成;下載模式即可完成系統(tǒng)更新,可以通過各種通訊方式將PC端數(shù)據(jù)拷貝到嵌入式產(chǎn)品中。

5.U-Boot啟動流程

uboot多數(shù)BootLoader都分為stage1和stage2兩大部分,U-boot也不例外。stage1主要存放依賴于CPU架構(gòu)代碼,通常是匯編程序。stage2則通常用C語言來實現(xiàn),這樣可以實現(xiàn)復雜的功能,而且有更好的可讀性和移植性。

  • stage1作用

stage1代碼通過存放在start.S中,和CPU架構(gòu)相關(guān),例如tiny4412的.S文件存放路徑:uboot_tiny4412-sdk1506\arch\arm\cpu\armv7。

pYYBAGMOIoqAWweoAAFTzdNj8LY073.png#pic_center

stage1匯編代碼實現(xiàn)功能為:

1.定義程序入口,一般入口存放在rom的0x0位置。
2.設(shè)置異常向量,初始化內(nèi)存控制器。
3.拷貝rom中的程序到ram中,初始化堆棧。
4.將指針指向到ram中執(zhí)行。

stage2作用

stage2存放的為C語言代碼,這也是整個uboot的主程序。該代碼注意實現(xiàn)功能為:

1.完成基本硬件初始化,如初始化flash;
2.初始化系統(tǒng)內(nèi)存分配函數(shù)。
3.如果目標系統(tǒng)擁有 nand 設(shè)備,則初始化 nand 設(shè)備。
4.如果目標系統(tǒng)有顯示設(shè)備,則初始化該類設(shè)備。
5.初始化相關(guān)網(wǎng)絡設(shè)備,填寫 ip地址等。
6.進入命令循環(huán)(即整個 boot 的工作循環(huán)),接受用戶從串口輸入的命令,然后進行相應的工作。

poYBAGMOIouADhqSAAKDrRuD-iI902.png#pic_center

??tiny4412 從SD卡啟動,數(shù)據(jù)在SD卡中存儲格式:
??tiny4412從SD卡啟動系統(tǒng),數(shù)據(jù)存放是從第一個扇區(qū)開始。

pYYBAGMOIouAVB6FAACzR0PdcWM111.png#pic_centerpoYBAGMOIoyAXa7oAAGWhxo-BOU978.png#pic_center


1~16扇區(qū)存放bl1.bin文件,由三星提供。大小為固定8KB。
17~49扇區(qū)存放bl2.bin文件,該扇區(qū)用來存放uboot的前14KB代碼。
49~705扇區(qū)存放完整uboot文件。
705~1025扇區(qū)存放tzsw.bin簽名文件。
從1025扇區(qū)開始存放內(nèi)核鏡像文件,連續(xù)寫12288個扇區(qū)。
再往后則是根文件系統(tǒng)rootfs

  • 系統(tǒng)啟動流程

在開發(fā)板上電時,首先運行的是Exynos本身自帶的64KB的flash中的程序,讀取簽名文件,加載uboot前14kb代碼到Exynos本身的256KB的SRAM中運行,實現(xiàn)基本硬件初始化(如初始化外擴內(nèi)存),接著將完整Uboot拷貝到外擴內(nèi)存中,將PC指針指向外擴內(nèi)存。完成flash初始化、網(wǎng)卡初始化,讀取內(nèi)核、加載根文件系統(tǒng),引導操作系統(tǒng)啟動,最終uboot結(jié)束本次工作,將CPU使用權(quán)交接操作系統(tǒng),至此,系統(tǒng)啟動成功。

6.U-Boot移植與燒寫

PC端系統(tǒng):ubuntu18.04
交叉編譯器:arm-linux-gcc
#解壓uboot源碼
[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/uboot_tiny4412-sdk1506.tar
[wbyq@wbyq uboot_tiny4412-sdk1506]$ make distclean
[wbyq@wbyq uboot_tiny4412-sdk1506]$ make clean #清空配置
[wbyq@wbyq uboot_tiny4412-sdk1506]$ make tiny4412_config #配置開發(fā)板
Configuring for tiny4412 board...
[wbyq@wbyq uboot_tiny4412-sdk1506]$ make -j8 #編譯源碼
pYYBAGMOIo2AXpppAAOORkA_tKQ451.png#pic_center

6.1 ubunut編譯uboot報錯

報錯:libz.so.1: cannot open shared object file: No such file or directory
解決辦法:sudo apt-get install lib32ncurses5 sudo apt-get install lib32z1

6.2 make menuconfig報錯

錯誤1:make menuconfig’ requires the ncurses libraries。缺少ncurses庫。
解決辦法:sudo apt-get install libncurses5-dev
錯誤2:

poYBAGMOIo2ABVfuAAE_hMncDjM489.png#pic_center

??將窗口放大即可。

6.3 燒寫uboot到SD卡

[wbyq@wbyq uboot_tiny4412-sdk1506]$ cd sd_fuse/ 
[wbyq@wbyq sd_fuse]$ make  //編譯生成mkbl2
[wbyq@wbyq sd_fuse]$ cd tiny4412/  
//插上SD卡,燒寫U-boot
[xsw@xsw tiny4412]$ sudo ./sd_fusing.sh /dev/sdb 
pYYBAGMOIo6ANymFAAFPGX-Rtj8511.png#pic_center

6.4 開發(fā)板運行uboot

??將SD卡插到開發(fā)板上,選擇從SD卡啟動,插上串口線。

poYBAGMOIo6ANjPzAAFcUOKYimk326.png#pic_center


審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    375

    瀏覽量

    28076
  • u-boot
    +關(guān)注

    關(guān)注

    0

    文章

    120

    瀏覽量

    38164
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    647

    瀏覽量

    32743
收藏 人收藏

    評論

    相關(guān)推薦

    U-Boot介紹

    移植 Linux之前我們需要先移植一個 bootloader 代碼,這個 bootloader 代碼用于啟動 Linux 內(nèi)核, bootloader有很多,常用的就是 U-Boot。
    的頭像 發(fā)表于 10-08 10:50 ?3813次閱讀

    U-boot的基本介紹

    從本文開始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U
    發(fā)表于 07-14 16:52 ?2663次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    u-boot的Makefile分析

    u-boot的Makefile分析 U-BOOT是一個LINUX下的工程,在編譯之前必須已經(jīng)安裝對應體系結(jié)構(gòu)的交叉編譯環(huán)境,這里只針對ARM,編譯
    發(fā)表于 05-17 09:16 ?2044次閱讀

    嵌入式U-BOOT的啟動流程及移植

    S3C44B0開發(fā)板上的移植方法和步驟。 u-boot是一個功能強大的bootloader開發(fā)軟件,適用的CPU平臺及
    發(fā)表于 02-25 16:00 ?59次下載

    exynos4412-uboot移植筆記

    針對迅為4412開發(fā)板進行u-boot移植全過程
    發(fā)表于 05-17 09:49 ?15次下載

    Mini2440之U-boot使用及移植詳細手冊

    Mini2440之U-boot使用及移植詳細手冊
    發(fā)表于 10-30 08:31 ?44次下載
    Mini2440之<b class='flag-5'>U-boot</b>使用及<b class='flag-5'>移植</b>詳細手冊

    S3C6410的u-boot分析與移植

    S3C6410的u-boot分析與移植
    發(fā)表于 10-31 14:44 ?28次下載
    S3C6410的<b class='flag-5'>u-boot</b>分析與<b class='flag-5'>移植</b>

    如何進行U-BOOT移植

    本文檔的主要內(nèi)容詳細介紹的是如何進行U-BOOT移植。說先在把U-BOOT- 1.1.6復制到SMB共享文件里面,然后到虛擬機里面解壓他,執(zhí)行命令:tar xjvf U-BOOT-1
    發(fā)表于 06-14 17:35 ?6次下載
    如何進行<b class='flag-5'>U-BOOT</b>的<b class='flag-5'>移植</b>

    友善之臂Tiny4412核心板介紹

    Tiny4412是一款高性能的四核Cortex-A9核心板,由廣州友善之臂設(shè)計、生產(chǎn)和發(fā)行銷售。
    的頭像 發(fā)表于 11-05 17:40 ?1.2w次閱讀
    友善之臂<b class='flag-5'>Tiny4412</b>核心板介紹

    基于nanoPC-T3的U-Boot移植過程梳理

    ? 導讀:前文對U-Boot架構(gòu)設(shè)計做了分析,本文來梳理一下U-Boot在具體板子上的移植工作,主要記錄整體思路、要點,以觸類旁通而記之。
    的頭像 發(fā)表于 12-14 23:14 ?798次閱讀

    剖析基于nanoPC-T3的U-Boot移植過程

    ? 導讀:前文對U-Boot架構(gòu)設(shè)計做了分析,本文來梳理一下U-Boot在具體板子上的移植工作,主要記錄整體思路、要點,以觸類旁通而記之。
    發(fā)表于 01-26 17:20 ?3次下載
    剖析基于nanoPC-T3的<b class='flag-5'>U-Boot</b><b class='flag-5'>移植</b>過程

    Linux U-Boot開發(fā)指南

    介紹 U-Boot編譯打包、基本配置、常用命令的使用、基本調(diào)試方法等, 為 U-BOOT移植及應用開發(fā)提供了基礎(chǔ)。
    的頭像 發(fā)表于 03-06 10:28 ?1224次閱讀
    Linux <b class='flag-5'>U-Boot</b>開發(fā)指南

    U-boot的QSPI驅(qū)動移植方法及驗證方法

    本文主要講述了U-boot的QSPI驅(qū)動移植方法及驗證方法。在產(chǎn)品調(diào)試階段,U-boot的driver子系統(tǒng)包含了豐富的外設(shè)驅(qū)動,方便外設(shè)功能驗證與調(diào)試。
    的頭像 發(fā)表于 04-14 10:21 ?2744次閱讀
    <b class='flag-5'>U-boot</b>的QSPI驅(qū)動<b class='flag-5'>移植</b>方法及驗證方法

    U-boot的DPU驅(qū)動移植方法

    本文以ARM Mali系列顯示處理器驅(qū)動為例,講述了U-boot的DPU驅(qū)動移植方法。
    的頭像 發(fā)表于 04-14 10:25 ?1258次閱讀
    <b class='flag-5'>U-boot</b>的DPU驅(qū)動<b class='flag-5'>移植</b>方法

    SS524V100 單板移植和燒寫U-boot(一)

    ?U-boot SS524V100?DMEB板上的外圍芯片包括DDR?SDRAM、eMMC、SPI?Nor?Flash和SPINAND?Flash。 1.編譯?U-boot 當所有移植
    的頭像 發(fā)表于 08-22 10:31 ?645次閱讀