tiny4412編譯與移植U-Boot
1.uboot簡介
U-Boot 是一個主要用于嵌入式系統的引導加載程序,可以支持多種不同的計算機系統結構,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios與MicroBlaze。這也是一套在GNU通用公共許可證之下發布的自由軟件。
U-Boot本質是一個裸機程序,是一種普遍用于嵌入式系統中的開源的Bootloader,作用是用來引導操作系統,以及給開發人員提供測試調試工具。主要負責基本硬件初始化,導啟動內核啟動。
2.選擇U-Boot理由
① 開放源碼;
② 支持多種嵌入式操作系統內核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多個處理器系列,如PowerPC、ARM、x86、MIPS;
④ 較高的可靠性和穩定性;
⑤ 高度靈活的功能設置,適合U-Boot調試、操作系統不同引導要求、產品發布等;
⑥ 豐富的設備驅動源碼,如串口、以太網、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
⑦ 較為豐富的開發調試文檔與強大的網絡技術支持;
3.U-Boot主要功能
系統引導支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統;支持NFS掛載、從FLASH中引導壓縮或非壓縮系統內核;
基本輔助功能強大的操作系統接口功能;可靈活設置、傳遞多個關鍵參數給操作系統,適合系統在不同開發階段的調試要求與產品發布,尤以Linux支持最為強勁;支持目標板環境參數多種存儲方式,如FLASH、NVRAM、EEPROM;
CRC32校驗可校驗FLASH中內核、RAMDISK鏡像文件是否完好;
設備驅動串口、SDRAM、FLASH、以太網、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅動支持;
上電自檢功能SDRAM、FLASH大小自動檢測;SDRAM故障檢測;CPU型號;
4.U-Boot工作模式
uboot分為啟動加載模式和下載模式。啟動模式即為正常工作模式,嵌入式產品發布時必須工作在啟動模式,此時uboot可以完成操作系統引導,可以將操作系統從flash中拷貝到sram中運行,整個過程自動完成;下載模式即可完成系統更新,可以通過各種通訊方式將PC端數據拷貝到嵌入式產品中。
5.U-Boot啟動流程
uboot多數BootLoader都分為stage1和stage2兩大部分,U-boot也不例外。stage1主要存放依賴于CPU架構代碼,通常是匯編程序。stage2則通常用C語言來實現,這樣可以實現復雜的功能,而且有更好的可讀性和移植性。
- stage1作用
stage1代碼通過存放在start.S中,和CPU架構相關,例如tiny4412的.S文件存放路徑:uboot_tiny4412-sdk1506\arch\arm\cpu\armv7。
stage1匯編代碼實現功能為:
1.定義程序入口,一般入口存放在rom的0x0位置。
2.設置異常向量,初始化內存控制器。
3.拷貝rom中的程序到ram中,初始化堆棧。
4.將指針指向到ram中執行。
stage2作用
stage2存放的為C語言代碼,這也是整個uboot的主程序。該代碼注意實現功能為:
1.完成基本硬件初始化,如初始化flash;
2.初始化系統內存分配函數。
3.如果目標系統擁有 nand 設備,則初始化 nand 設備。
4.如果目標系統有顯示設備,則初始化該類設備。
5.初始化相關網絡設備,填寫 ip地址等。
6.進入命令循環(即整個 boot 的工作循環),接受用戶從串口輸入的命令,然后進行相應的工作。
??tiny4412 從SD卡啟動,數據在SD卡中存儲格式:
??tiny4412從SD卡啟動系統,數據存放是從第一個扇區開始。
1~16扇區存放bl1.bin文件,由三星提供。大小為固定8KB。
17~49扇區存放bl2.bin文件,該扇區用來存放uboot的前14KB代碼。
49~705扇區存放完整uboot文件。
705~1025扇區存放tzsw.bin簽名文件。
從1025扇區開始存放內核鏡像文件,連續寫12288個扇區。
再往后則是根文件系統rootfs
- 系統啟動流程
在開發板上電時,首先運行的是Exynos本身自帶的64KB的flash中的程序,讀取簽名文件,加載uboot前14kb代碼到Exynos本身的256KB的SRAM中運行,實現基本硬件初始化(如初始化外擴內存),接著將完整Uboot拷貝到外擴內存中,將PC指針指向外擴內存。完成flash初始化、網卡初始化,讀取內核、加載根文件系統,引導操作系統啟動,最終uboot結束本次工作,將CPU使用權交接操作系統,至此,系統啟動成功。
6.U-Boot移植與燒寫
PC端系統: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 #配置開發板
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 開發板運行uboot
??將SD卡插到開發板上,選擇從SD卡啟動,插上串口線。
-
移植
+關注
關注
1文章
375瀏覽量
28008 -
u-boot
+關注
關注
0文章
119瀏覽量
38136 -
編譯
+關注
關注
0文章
646瀏覽量
32664
發布評論請先 登錄
相關推薦
評論