- 前言
- Chapter 3: Development Tools開發工具
- 3.1 Vivado Design Suite
- 3.2 Vitis Unified Software Platform
- 3.3 Arm GNU tools
- 3.4 Device Tree Generator設備樹生成器
- 3.5 PetaLinux Tools
- 3.6 Linux Software Development using Yocto
- 本章小結
- Chapter 4: Software Stack軟件棧
- 4.1 Bare Metal Software Stack裸機軟件棧
- 4.2 Linux Software Stack Linux軟件棧
- 4.2.1 Multimedia Stack Overview 多媒體軟件棧
- 4.2.2 FreeRTOS Software Stack FreeRTOS軟件棧
- 小結
前言
上一章我們講了ug1137的第一章和第二章,也算是給整個讀書筆記開了個頭,這兩個章節的內容其實並不太多,主要還是對整個文檔的概括性描述,下面我們就開始挨個章節進行閲讀和筆記了。
Chapter 3: Development Tools開發工具
這一章整體在講MPSOC開發過程中使用到的各種開發工具,主要有下面幾種。
-
Hardware IDE
-
Software IDEs
-
Compiler toolchain 編譯工具鏈
-
Debug and trace tools 跟蹤和調試工具
-
Embedded OS and software libraries 嵌入式系統軟件
-
Simulators (for example: QEMU)
-
Models and virtual prototyping tools (for example: emulation board platforms)
下面挨個工具的説一下。
3.1 Vivado Design Suite
這節介紹了以下Vivado工具,這個工具大家應該都不陌生,在編寫XILINX的FPGA的硬件代碼時應該都用過,這裏稍微説一點:
Vivado Design Suite中的所有工具和工具選項均以原生工具命令語言(Tcl)格式編寫,該格式允許在Vivado IDE或Vivado Design Suite Tcl shell中使用。分析和約束分配貫穿整個設計過程。例如,您可以在合成、放置或佈線後運行計時或功率估計。由於數據庫可以通過Tcl訪問,因此對約束、設計配置或工具設置的更改會實時發生,通常不會強制重新實現。
也就是説vivado的所有操作都是基於tcl命令的,有時候我們在某個平台上上編寫的工程可能無法跨平台或者跨版本運行,但是TCL命令差不多是共通的,也就是可以使用TCL命令來完整的復現一個工程。
3.2 Vitis Unified Software Platform
這一節介紹了VITIS工具的各種特性和功能,vitis在MPSOC進行裸機開發時會用到,這個工具的特性和功能都比較多,這裏幾乎都是列表性質的介紹,也只是讓你看看名字而已,這裏就不多介紹了,有想要更多瞭解該工具的可以參看ug1400 Vitis Unified Software Platform Documentation: Embedded Software Development。
3.3 Arm GNU tools
GNU工具鏈是一套為ARM架構芯片提供的開發工具,主要作用是代碼的編譯,調試,鏈接等等,下面的表格就是AMD使用的Arm GNU tools:
3.4 Device Tree Generator設備樹生成器
設備樹應該是Linux嵌入式開發的概念,我也不太熟,這裏截取了一部分網絡上的描述:
Linux 設備樹是一種用於描述硬件平台的硬件資源信息的數據結構和語言。它從 Linux 內核版本 2.6 開始引入,起源於 OpenFirmware。設備樹的主要特點是實現驅動代碼與設備硬件信息的分離,通過 bootloader(如 U-Boot)和 Linux 傳遞到內核,使內核能夠從設備樹中獲取對應的硬件信息。這樣,對於同一 SOC 的不同主板,只需更換設備樹文件即可實現不同主板的無差異支持,而無需更換內核文件,從而實現了內核和不同板級硬件數據的拆分。
3.5 PetaLinux Tools
這一節沒有什麼內容,主要講了什麼是PetaLinux以及其支持的工具,這裏引用官方的描述:
PetaLinux 工具提供在 Xilinx 處理系統上定製、構建和調配嵌入式 Linux 解決方案所需的所有組件。該解決方案旨在提升設計生產力,可與 Xilinx 硬件設計工具配合使用,以簡化針對 Versal、 Zynq UltraScale MPSoC、 Zynq 7000 SoC 和 MicroBlaze 的 Linux 系統開發
3.6 Linux Software Development using Yocto
這一節講的似乎是使用Yocto進行Linux軟件開發,我完全沒聽説過Yocto,所以還去搜索了一下是什麼,大致是説Yocto是一類用於嵌入式產品開發定製化Linux系統的工具,由於我暫時想不到這個東西的用途,所以不多介紹了,感興趣的可以到Yocto Project官網查看或者查看ug1144 PetaLinux Tools Documentation: Reference Guide.
本章小結
能發現這一章節基本沒有什麼內容,主要就是在講MPSOC開發中可能會用到的各種工具,沒有什麼實質內容,我們直接開始講下一章。
Chapter 4: Software Stack軟件棧
這章主要介紹了兩種用於MPSOC系統的軟件棧,裸機軟件棧和Linux軟件棧,所謂軟件棧我引用一段話來解釋:
一個軟件棧就是共同工作來保證軟件的正常運行的獨立組件的集合。這些相關組件,可能包含操作系統、架構層、協議、運行時環境、數據庫系統、功能調用,以一個在另一個上面的架構組織在一起,像棧一樣。一般來説,在該結構的底層組件是直接與硬件進行交換的,高層結構是為終端用户執行任務或者提供服務的。
4.1 Bare Metal Software Stack裸機軟件棧
AMD為裸機系統提供的軟件棧實際上就是我們在VITIS中使用的板級支持包(BSP),實際上也就是一堆編寫好的C代碼,其中有着大量能夠直接調用的API,這一軟件棧是像這樣組織的:
![]()
並同時提到裸機軟件棧的關鍵部件如下:
- 外圍設備的軟件驅動程序,包括使用PS中的Arm® Cortex®A53、Arm® Cortex®-R5 F處理器以及PL中的AMD MicroBlazeTM處理器所需的核心例程。
- 用於PS外圍設備和可選PL外圍設備的裸金屬驅動器。
- 標準C庫:liBC和libm基於開源Newlib庫,移植到Arm Cortex-A53、Arm Cortex-R5 F和MicroBlaze處理器。
- 提供網絡、文件系統和加密支持的其他中間件庫。
- 應用程序示例,包括第一階段引導加載程序(FSBL)和測試應用程序。
這裏還額外提到了C標準庫(libc)和C標準數學庫(libm)以及庫所對應的各種頭文件及其作用,篇幅有限就不貼表格了,感興趣可以查看第34和35頁
4.2 Linux Software Stack Linux軟件棧
Linux軟件棧內容非常的多且複雜,由於我不是很懂,這一塊我會大量使用原始翻譯。這部分首先介紹了Linux軟件棧的架構及組成:
Linux操作系統支持Zynq UltraScale+ MPSoC。除了Arm GPU之外,AMD為PS中的所有外圍設備以及PL中的關鍵外圍設備提供開源驅動程序。下圖説明了APU中的完整軟件堆棧,包括Linux和可選的虛擬機管理程序。
![]()
Armv8異常模型定義了異常級別EL0-EL3,其中:
- EL0具有最低的軟件執行特權。EL0處的執行稱為無特權執行。
- 異常級別從1增加到3,表明軟件執行特權增加。
- EL1在使用TEE架構時在非安全世界中運行非安全操作系統或在安全世界中運行安全操作系統。
- EL2提供對處理器虛擬化的支持。您可以選擇在軟件堆棧中包括開源或商業虛擬機管理程序。
- EL3提供對安全監控軟件的支持。Cortex-A53 MPCore處理器實現所有異常級別(EL0-EL3),並支持每個異常級別的兩種執行狀態(AArchh64和AArchh32)。
4.2.1 Multimedia Stack Overview 多媒體軟件棧
這一小節描述了多媒體軟件棧,我覺得大致是描述多媒體軟件棧所依賴的圖像加速處理需要在硬件底層進行實現,實現的方式就是使用GPU加速器並使用ACE總線互聯APU以實現緩存一致性並提供加速服務,具體翻譯如下:
GPU和高性能顯示端口能夠加速圖形應用程序。該圖形處理器包括一個幾何處理器(GP)和兩個像素處理器(PP0和PP1),每個處理器都有一個專用的內存管理單元(MMU),為2D和3D圖形提供硬件加速。APU和GPU之間的緩存一致性是通過緩存一致性互連(CCI)實現的,該互連僅支持AXI一致性擴展(ACE)。
CCI反過來將APU和GPU連接到DDR控制器,DDR控制器仲裁DDR訪問。
下圖顯示了多媒體。
![]()
用於多媒體的Linux內核驅動程序使處理器上運行的應用程序能夠訪問硬件。
這裏有一張表顯示了通過中間棧的多媒體驅動程序以及中間棧使用的庫和驅動,但是我不知道具體意思就不貼出來了。
4.2.2 FreeRTOS Software Stack FreeRTOS軟件棧
這部分描述了FreeRTOS軟件棧,如果不知道什麼是FreeRTOS,那我引用一下正點原子教程中的描述:
Free即免費的, RTOS全稱是Real Time Operating System, 中文就是實時操作系統。注意, RTOS不是指某一個確定的系統,而是指一類系統, 比如uC/OS, FreeRTOS, RTX, RT-Thread等這些都是RTOS類操作系統。
操作系統允許多個任務同時運行,這個叫做多任務。實際上,一個處理器核心在某一時刻只能運行一個任務。操作系統中任務調度器的責任就是決定在某一時刻究竟運行哪個任務。任務調度在各個任務之間的切換非常快,就給人們造成了同一時刻有多個任務同時運行的錯覺。
某些操作系統給每個任務分配同樣的運行時間,時間到了就輪到下一個任務,比如Unix操作系統。FreeRTOS操作系統則是由用户給每個任務分配一個任務優先級,任務調度器就可以根據此優先級來決定下一刻應該運行哪個任務。
FreeRTOS是RTOS系統的一種, FreeRTOS十分的小巧,可以在資源有限的微控制器中運行,當然,FreeRTOS不僅侷限於在微控制器中使用。但從文件數量上來看FreeRTOS要uC/OSIIu和C/OSIII小的多。
在嵌入式領域中, 嵌入式實時操作系統正得到越來越廣泛的應用。採用嵌入式實時操作系統(RTOS)可以更合理、更有效地利用CPU的資源,簡化應用軟件的設計,縮短系統開發時間,更好地保證系統的實時性和可靠性。
FreeRTOS是一個迷你的實時操作系統內核。作為一個輕量級的操作系統,功能包括:任務管理、時間管理、信號量、消息隊列、內存管理、記錄功能、軟件定時器、協程等,可基本滿足較小系統的需要。
由於RTOS需佔用一定的系統資源(尤其是RAM資源),只有μC/OS-II、 embOS、 salvo、FreeRTOS等少數實時操作系統能在小RAM單片機上運行。相對μC/OS-II、 embOS等商業操作系統, FreeRTOS操作系統是完全免費的操作系統,具有源碼公開、可移植、可裁減、調度策略靈活的特點,可以方便地移植到各種單片機上運行
XILINX在VITIS組件中內置了FreeRTOS作為BSP的一部分,並且中圖表展示了軟件棧,圖表如下,這個圖表不全不是我的問題,是文檔PDF顯示就不全:
小結
這兩章其實內容也不多,大部分都是些介紹類的,但是我之前沒有接觸過操作系統,基本都是在用裸機,所以很多概念都不太熟,感覺還得再學習學習。

