Uboot启动
(一)uboot 配置編譯分析
u-boot源碼是通過gcc和Makefile組織編譯的,頂層目錄下的Makefile可通過boards.cfg來設置開發板的定義
然后遞歸調用各級子目錄下的Makefile,把編譯過的程序連接成u-boot
boards.cfg文件:
開發板在Makefile下配置定義,例如:
| tiny4412 | arm | armv7 | tiny4412 | samsung | exynos |
make tiny4412_config 表示在當前目錄下的Makefile查找一個tiny4412的目標文件來執行,在Makefile中沒有tiny4412
但有%_config::unconfig %表示匹配模式,可以匹配任意字符
2. U-boot操作過程
(二) U-boot移植測試過程
在u-boot添加具體一個開發板,需要添加哪些文件?
boards.cfg里面添加自己開發板的信息
編譯
提示錯誤:
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啟動的流程,從上電執行了哪些文件的代碼,然后執行代碼,那些是和硬件參數有關,要求相應的修改。
總結
- 上一篇: 为什么说旅游城市的房子不能买?
- 下一篇: 饿了么发布2018消费升级报告 业务发展