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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Uboot启动

發布時間:2025/3/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Uboot启动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(一)uboot 配置編譯分析

u-boot源碼是通過gcc和Makefile組織編譯的,頂層目錄下的Makefile可通過boards.cfg來設置開發板的定義
然后遞歸調用各級子目錄下的Makefile,把編譯過的程序連接成u-boot

boards.cfg文件:
開發板在Makefile下配置定義,例如:

TargetARCHCPUBoard name(開發版名)Vendor(廠商)SoC(具體系列)Options
tiny4412armarmv7tiny4412samsungexynos

make tiny4412_config 表示在當前目錄下的Makefile查找一個tiny4412的目標文件來執行,在Makefile中沒有tiny4412
但有%_config::unconfig %表示匹配模式,可以匹配任意字符

2. U-boot操作過程
  • 將u-boot-1.3.4.tar.gz復制到Linux系統中,然后解壓縮該u-boot后,打開u-boot文件夾后,點右鍵從終端打開。
  • 在終端中 輸入:make clobber (清工程文件,范圍大一些,清除原來已經編譯的文件)
  • make clean(清除文件)make xyd2440_config(將xyd2440_config文件導入準備編譯)make all (編譯)
  • 然后可在文件夾中生成.bin的文件。
  • 然后通過j-link將生成的.bin文件燒入NORFLASH中。J-LINK的用法詳見附錄3。
  • 通過串口就可以看到u-boot運行的相關信息(在開始-附錄-通信-超級終端中查看)。
  • (二) U-boot移植測試過程

  • 在u-boot添加具體一個開發板,需要添加哪些文件?
    boards.cfg里面添加自己開發板的信息

    myboard4412 arm armv7 myboard4412 samsung exynos編譯: make myboard4412復制board/samsung/tiny4412/ 一份代碼,修改名字為myboard4412cp board/samsung/tiny4412/ -r board/samsung/myboard4412 -rf復制include/configs/tiny4412.h 一份代碼,修改名字為myboard4412.hcp include/configs/tiny4412.h include/configs/myboard4412.h
  • 編譯

  • [root@localhost uboot_tiny4412]# make myboard4412_config Configuring for myboard4412board... [root@localhost uboot_tiny4412]# make -j8

    提示錯誤:
    arm-linux-ld: cannot find board/samsung/tiny4412/libtiny4412.o
    make: *** [u-boot] 錯誤 1

    錯誤說明:arm-linux-ld是編譯器的鏈接工具,也是就是鏈接時候出錯了,根據出錯信息,是在尋找board/samsung/tiny4412/libtiny4412.o 文件時候出錯了,仔細看一下發現,現在我們的板級文件是xyd4412 ,而不是tiny4412,但是,卻去找這個文件,很明顯,應答是在鏈接文件中指定需要這個文件。所以打開board/samsung/myboard4412/u-boot.lds文件,文件中有這樣的條語句:

    board/samsung/tiny4412/libtiny4412.o (.text)

    這個語句正是出錯提示的信息,很明顯這個位置要做相應修改,修改如下:

    board/samsung/xyd4412/libxyd4412.o (.text)

    修改后保存,重新編譯。
    [root@localhost uboot_tiny4412]#make -j8

    ers/watchdog/libwatchdog.o fs/cramfs/libcramfs.o fs/ext2/libext2fs.o fs/fat/libfat.o fs/fdos/libfdos.o fs/jffs2/libjffs2.o fs/reiserfs/libreiserfs.o fs/ubifs/libubifs.o fs/yaffs2/libyaffs2.o lib/libfdt/libfdt.o lib/libgeneric.o lib/lzma/liblzma.o lib/lzo/liblzo.o net/libnet.o post/libpost.o board/samsung/xyd4412/libxyd4412.o --end-group /media/sdb1/4412/u-boot/uboot_tiny4412/arch/arm/lib/eabi_compat.o -L /usr/local/arm/4.3.2/bin/…/lib/gcc/arm-none-linux-gnueabi/4.3.2 -lgcc -Map u-boot.map -o u-boot
    arm-linux-objcopy -O srec u-boot u-boot.srec
    arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
    [root@localhost uboot_tiny4412]#
    編譯正確,會得到 u-boot.bin文件。

    (三)U-boot啟動:

    程序入口是:arch/arm/cpu/armv7/start.S
    由上面的代碼跳轉到C語言代碼,C的入口:arch/arm/lib/board.c

    1)從uboot源碼頂層目錄boards.cfg文件中找到tinny4412配置信息,利用這些信息生成文件
    2)根據配置信息在include下創建指向具體架構arm的軟件鏈接,arm芯片是指向arch/arm/include/asm/,
    因為后面有文件包含#include<asm/config.h>,編譯時找到對應架構
    3、根據配置信息創建include/config.mk,這個文件被頂層Makefie包含,內容
    ARCH=arm
    CPU=armv7

    4、在include創建config.h文件 查看內容
    增添了一塊開發板支持需要添加的文件(當前u-boot已經支持CPU)
    boards 廠家名 開發板名
    include/config 開發板名.h
    以上步驟時候以一個最接近的板子為起點,移植到自己的開發板,開發平臺對應的u-boot的第一步,如果自己板子和參考版的最小系統(DDR EMMC CPU )不一樣,那就需要修改兩個開發平臺的硬件參數上的差異,具體的要求知道u-boot啟動的流程,從上電執行了哪些文件的代碼,然后執行代碼,那些是和硬件參數有關,要求相應的修改。

    總結

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

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