tiny4412編譯與移植U-Boot
1.uboot簡介
U-Boot 是一個主要用于嵌入式系統(tǒng)的引導(dǎo)加載程序,可以支持多種不同的計算機系統(tǒng)結(jié)構(gòu),包括PPC、ARM、AVR32、MIPS、x86、68k、Nios與MicroBlaze。這也是一套在GNU通用公共許可證之下發(fā)布的自由軟件。
U-Boot本質(zhì)是一個裸機程序,是一種普遍用于嵌入式系統(tǒng)中的開源的Bootloader,作用是用來引導(dǎo)操作系統(tǒng),以及給開發(fā)人員提供測試調(diào)試工具。主要負責(zé)基本硬件初始化,導(dǎ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)不同引導(dǎo)要求、產(chǎn)品發(fā)布等;
⑥ 豐富的設(shè)備驅(qū)動源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
⑦ 較為豐富的開發(fā)調(diào)試文檔與強大的網(wǎng)絡(luò)技術(shù)支持;
3.U-Boot主要功能
系統(tǒng)引導(dǎo)支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統(tǒng);支持NFS掛載、從FLASH中引導(dǎo)壓縮或非壓縮系統(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)引導(dǎo),可以將操作系統(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)復(fù)雜的功能,而且有更好的可讀性和移植性。
- stage1作用
stage1代碼通過存放在start.S中,和CPU架構(gòu)相關(guān),例如tiny4412的.S文件存放路徑:uboot_tiny4412-sdk1506\arch\arm\cpu\armv7。
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)絡(luò)設(shè)備,填寫 ip地址等。
6.進入命令循環(huán)(即整個 boot 的工作循環(huán)),接受用戶從串口輸入的命令,然后進行相應(yīng)的工作。
??tiny4412 從SD卡啟動,數(shù)據(jù)在SD卡中存儲格式:
??tiny4412從SD卡啟動系統(tǒng),數(shù)據(jù)存放是從第一個扇區(qū)開始。
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),引導(dǎo)操作系統(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 #編譯源碼
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:
??將窗口放大即可。
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
6.4 開發(fā)板運行uboot
??將SD卡插到開發(fā)板上,選擇從SD卡啟動,插上串口線。
-
移植
+關(guān)注
關(guān)注
1文章
379瀏覽量
28124 -
u-boot
+關(guān)注
關(guān)注
0文章
121瀏覽量
38220 -
編譯
+關(guān)注
關(guān)注
0文章
657瀏覽量
32851
發(fā)布評論請先 登錄
相關(guān)推薦
評論