搭建好的硬件系統,通過 Qsys generate 還有 Quartus II 編譯後,會產生三種文件提 供給 SoC 系統以進行後續軟件開發。如圖所示,這三種文件分別是: html
1. SOPC info file(.sopcinfo):文檔用於生成 Device Tree node
2. Handoff Folder:裏面有關於產生 preloader 相關配置文件 linux
3. System View Descr(.svd):用於 DS-5 debug 功能 shell
能夠看到Preloader image file以及Device Tree是軟件流運行所需文件,這裏就須要瞭解一下Altera SOC fapa的啓動步驟:緩存
第1步:起動固化在內部的廠家ROM程序,根據起動引腳的配置,選擇從哪裏起動(QSPI,SD,NAND);
第2步:加載Preloader程序到芯片內部的RAM緩存裏運行,這一步很重要,有些重要的參數在這一步設置,比方說,IO口複用,DDR3參數等。
第3步:由Preloader程序加載uboot到DDR3裏運行。假如在第2步中,DDR3參數設置不正確,就會報Bad image with mismatched CRC校驗錯誤,就沒反應了。
第4步:uboot讀取起動配置文件(uboot.scr),沒有的話,就直接加載zImage。
第5步:再加載設備樹。數據結構
具體能夠參照下圖:多線程
工程的文件結構以下:編輯器
能夠看出,preloader 是啓動中很重要的一步,他能夠保存在外部存儲中,也能夠保存在FPGA結構中。它主要完成如下幾個操做工具
由於咱們能夠經過Qsys刪減ARM端外設及添加與FPGA相連的組件。咱們自定義的設定在通過Qsys generate和Quartus II compile時會產生一些HPS和FPGA相關的配置文件。在進行軟件設計時,這些文件能夠經過BSP Editor抓換成Preloader須要的輸入檔案。以進一步生成Image文件。下圖是preloader image的製做流程。post
步驟以下(這裏以HPS基本概念及其設計裏的工程爲例):
1. 進入 SoC EDS 的安裝路徑並打開 Embedded Command Shell。打開<your path>\embedded\ 並執行 「Embedded_Command_Shell.bat」。Altera Embedded Command Shell 窗口將會出現。
2. 在Embedded_Command_Shell中啓動 BSP Editor:在窗口內輸入 bsp-editor 並按 enter 鍵
3. 產生新的 BSP:打開 bsp-editor 後選擇菜單 File --> New BSP 來建立新的 BSP
4. 在 New BSP 的窗口下選擇 Preloader Setting Directory 的路徑,把路徑指 向上節實驗工程 DE1_SoC_ghrd\hps_isw_handoff\soc_system_hps_0\(例如個人就是 C:\Users\li\Desktop\peixun\de1_soc_training\de1_soc_training\lab\HW\DE1_SoC_GHRD\hps_isw_handoff\soc_system_hps_0不管什麼時候使用Qsys生成SoC設計並在Quartus中編譯,都將生成「hps_isw_handoff」文件夾。此文件夾包含預加載器配置時鐘,IO和SDRAM控制器所需的配置信息。)。如圖所示:
選擇OK ,會BSP編輯器窗口中,咱們但願接受大多數默認設置。若是你的開發板支持ECC SDRAM存儲,則應選擇下面顯示的SDRAM擦除選項,不然請將其取消選中。(DE1-SOC不須要此操做及下面的操做,這裏直接採用默認的,而後generate就能夠了)
Preloader能夠從引導設備中的絕對原始地址或SDMMC設備中的FAT分區加載下一級引導映像。在本實驗中,您將配置Preloader以從FAT分區加載u-boot,該分區是SD卡上的分區1。在「設置」下,展開「公共」和「拆分」,而後選擇「啓動」。在「spl.boot」視圖中,選中標記爲「FAT_SUPPORT」的框。確保「FAT_BOOT_PARTITION」設置爲1,「FAT_LOAD_PAYLOAD_NAME」設置爲「u-boot.img」。這些應該是默認設置。
如今單擊Generate按鈕爲Preloader生成BSP。
5. 選擇 OK 來產生 BSP setting 文檔以及文件夾。系統將在工程內產生一個 software 的文件夾,並生成一個 settings.bsp 文 檔,如圖所示
文件 | 描述![]() |
---|---|
settings.bsp | 預加載器設置文件,包含預加載器生成器的設置 |
Makefilefile | Makefile用於構建Preloader |
generated | 包含基於切換文件夾中的信息生成的源代碼的文件夾 |
preloader.ds | ARM DS-5 AE,可用於加載Preloader |
6.當生成檔案完 成後,按下 exit 完成任務離開窗口, 接下來按下 Generate 生成 preloader 的原始檔以及 Makefile。進入 software\spl_bsp\generated 的子文件夾並查看產生的文檔。能夠看到 以前在 Qsys 中有關 HPS 的相關設定已經轉換成..h 頭文件以配置 preloader source code 對應設置。如圖所示:
七、以 pinmux_config.h 爲例,能夠看到 HPS 的外設的配置使用狀況,其中「(1)」 表明該外設被使用,如圖所示:
8.. 在 shell 窗口,進入項目位置裏的 softeare\spl_bsp 活頁夾,而後輸入 make 指令如圖所示(若 PC CPU 內核爲多核,如 4 核,可輸入 make -j8 進行多線程編譯以提升編譯效率)。
Makefile(也由Preloader Generator建立)執行如下步驟:
9.完成後如下文件內置於「software / spl_bsp /「文件夾:
文件 | 描述 |
---|---|
uboot-socfpga/spl/u-boot-spl | 預加載器ELF文件 |
uboot-socfpga/spl/u-boot-spl.bin | 預加載器二進制文件 |
preloader-mkpimage.bin | 具備引導ROM所需標頭的預加載器映像 |
10. 下一步是產生 preloader 的 image file。先將\sotware\spl_bsp\uboot-socfpga\spl下的u-boot-spl.bin複製到向上 兩層的\sotware\spl_bsp\文件夾下,如圖所示:
12.在 shell 窗口下,路徑也從新定位於此。 並輸入指令 mkpimage –hv 0 –o preloader_with_header.img u-boot-spl.bin 如圖所示:
如此即可以產生 preloader_with_header.img 文件,產生的新的 preloader image file 便可在 linux 環境下,經過輸入相應命令更新到 boot SD card。
linux 2.6及以前,大量板級信息被硬編碼到內核裏,十分龐大,大量冗餘代碼;
linux 2.6以後,引入了設備樹;
設備樹源於OpenFirmware,描述硬件的數據結構。由一些列節點node和屬性property組成,一般包括下列信息:
本質上是畫一棵CPU、總線、設備組成的樹,Linux內核會把設備樹展開成platform_device、i2c_client、spi_device等設備,而這些設備用到的內存、中斷等資源,也會傳遞個內核,內核會將這些資源綁定給展開的相應設備。
典型SOC的內容一般是很是靜態的。所以,描述SOC的設備樹源很是靜態,一般經過手動編輯文本文件來建立。可是,當電路板包含FPGA時,可能包含能夠頻繁更改的複雜設計,用於建立設備樹源的工具很是有用。
總的來講,Device Tree是一種有關硬件系統描述的數據結構,他能夠描述整個系統上掛載了多少種硬件。經過Device Tree,系統上的硬件信息均可以傳遞給OS(linux)。如此即可以不用在kernel內放置大量的代碼。這種特性對於硬件裏有FPGA狀況下提供了很大的靈活性。
下圖描繪了生成設備樹的整個流程。
當Qsys產生出 FPGA 的設計後(.sopcinfo),可使用Altera SoC EDS工具裏的Device Tree Generator 來產生 Device Tree 的源文檔(dts)。它描述了有關 HPS 的外設還有 選擇使用到的 FPGA Soft IP 以及用戶自定義的外設等信息。 .dtb文件是.dts文件被Device Tree Compiler編譯後生成的二進制格式的Device Tree 描述,可被 Linux 內核解析。一般在咱們爲開發板製做 NAND、Sdcard 啓動 image 時, 會爲.dtb 文件預留一個很小的存放區域(FAT 分區)。以後 bootloader 在引導 kernel 的過程當中,會先讀取該.dtb 到內存。更多關於 Device Tree 的介紹能夠參考的連接。
dts:文本
dtc:編譯dts的
dtb:編譯後的二進制文件
咱們也 可 以 同 時 更 新 u-boot.img 文件和 preloader.img 文 件 。 將software\spl_bsp\uboot-socfpga 目錄下 生 成 的 u-boot.img 文件也拷貝到software\preloader 中,
1.開啓前面的工程文件夾,檢視是否 Qsys 有生成 soc_system.sopcinfo 文件。同時確認是否有 hps_clock_info.xml 和 soc_system_board_info.xml. Device Tree Generate 將使用這兩個文件來產生 出.dts 文件。
二、在shell中進入工程目錄,輸入如下的命令以產生 .dts 文件,這裏直接使用這三個文件,用原來的Makefile文件來生成dts和dtb,dts可以生成,可是有錯誤,dtb直接沒法生成。緣由就在於,這是由於在新版本的Quartus II軟件中,第二個使用的再也不是hps_clock_info.xml文件,而是hps_common_board_info.xml。這個文件咱們能夠在SOCEDS軟件安裝目錄下的examples\hardware\cv_soc_devkit_ghrd 文件夾下找到
: 將其中的兩個xml文件hps_common_board_info.xml、soc_system_board_info.xml和一個Makefile複製出來,粘貼到咱們本身的工程目錄下,並將原來的三個文件刪除便可。而後make dts在文件夾下能夠看到.dts文件已經被生成
二、接着輸入make dtb來產生 .dtb 文件如圖所示: