【ZYNQ Linux移植】2-獲取設備樹

0 寫在前面

? ? ? ?這是一個系列博客,詳細介紹如何在 ZYNQ 與 ZYNQ MP 平臺上如何移植 Linux 系統。目前網絡上的大部分教程都是全程基于 Petalinux 的開發,雖然這樣簡化了開發流程,但對于初學者深入理解掌握 Linux 是不利的,所以,有了這個系列的博客,從幾乎為 0 開始教大家怎么移植 Linux 系統。

? ? ? ?本人的軟件與環境版本:

? ? ? ?Windows 的 Vivado 與 Vitis 版本:2020.2(前期學習 ZYNQ7020 跟隨正點原子安裝);

? ? ? ?Ubuntu版本:18.04.2

? ? ? ?虛擬機上的 Vivado、Vitis 與 Petalinux 版本:2020.1(前期學習 ZYNQ MP 跟隨 Alinx 安裝)。

1 ZYNQ 與設備樹

? ? ? ?ZYNQ 本身是 FPGA + ARM 的異構處理器,設備樹扮演著關鍵角色。它通過硬件描述與內核分離的機制,動態定義 CPU、內存、外設及 PL側中的 IP 核資源,使同一內核鏡像能夠適配不同硬件配置,大幅提升系統移植的靈活性。設備樹由 u-boot 傳遞給 Linux 內核,驅動據此自動匹配并初始化硬件,如 UART、GPIO 或自定義的 AXI IP 核,避免了傳統嵌入式開發中的硬編碼問題。此外,設備樹支持運行時疊加,適應 FPGA 動態重配置場景,是實現 ZYNQ 硬件可擴展性與 Linux 驅動高效管理的重要橋梁。

2 獲取設備樹

? ? ? ?從零編寫設備樹,是 Xilinx 等器件廠商該做的事情,那我們怎么獲取設備樹呢?簡單來說,就是使用 Xilinx 的模版。具體而言,有兩種獲取的方法,一是通過 Vitis 獲得,二是通過 Petalinux 獲得。但在此之前還是需要先從 Vivado 中導出硬件描述性文件(.xsa)。

2.1 Vivado導出 .xsa

? ? ? ?只要使用 ZYNQ 的 PS 側,就需要在 Block Design 中對 ZYNQ 核的相關功能進行配置:

? ? ? ?添加 ZYNQ 核:

這里需要注意的是 ZYNQ-7000 系列與 ZYNQ-MPSoC 系列的 IP 核是不一樣的,不過一般也不會選錯,因為在創建 Vivado 工程時需要選定器件型號,選好后,這里就只能搜索到對應的 IP 核了。

? ? ? ?而 ZYNQ核的配置部分根據自己的情況進行配置,自己設計的硬件需要參考硬件原理圖與手冊,如果是開發板可以參考對應的例程。

? ? ? ?之后就按照 FPGA 的開發流程,在 Block Design 中根據需要(是否有邏輯側)選擇添加其它 IP 或在外面直接加 verilog/VHDL 等代碼,生成輸出文件,然后經過綜合、實現、生成比特流


? ? ? ?而接下的步驟就比較關鍵了,我們需要從 Vivado 中輸出 .xsa(硬件描述性文件)。

? ? ? ?依次選擇 File --> Export --> Export Hardware…

?? ? ? ?點擊 Next 至以下界面,這里需要注意默認是 Pre-synthesis ,我們需要把它修改至 Include bitstream

?? ? ? ?后面可以一直選擇 Next ,默認輸出路徑不需要修改,如果曾經生成過,會提示是否要覆蓋,選擇是即可。默認是導出到 Vivado 工程目錄下

? ? ? ?這個 .xsa 文件,我們后續要用到,可以先備份到一個地方。

2.2 Vitis 獲取設備樹

? ? ? ?使用 Vitis 獲取設備樹,需要先獲取官方的設備樹模板,這部分在這個系列上一部分介紹過了,有需要的可以去看看。

? ? ? ?先正常加載一個 Vitis 工程工作空間,指定路徑(不著急創建工程!!!):

? ? ? ?先把我們前面下載的設備樹模板進行配置:

? ? ? ?點擊右側的 New..

? ? ? ?定位到解壓出的模版文件所在位置:

? ? ? ?依次點擊下面的 ApplyApply and Close

在這里插入圖片描述

? ? ? ?接著創建一個平臺工程(Platform Project)

?? ? ? ?后續按 Vitis 正常創建工程的步驟進行,定一個工程名,我這里定為 linux_base,之后在選擇 .xsa 的時候選擇我們前面從 Vivado 中導出的 .xsa(我的習慣是會把這個xsa拷貝到Vitis的工程目錄下)。然后在操作系統部分改為設備樹,其它的默認即可,然后 Finish

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

? ? ? ?在生成的工程右鍵進行編譯(build)

?? ? ? ?Viits 編譯生成的設備樹所在位置如下:

vitis工程目錄/工程名/生成的處理器/device_tree_domain\bsp

?? ? ? ?其中 zynqmp.dts 和 zynqmp-clk-ccf.dtsi 是 ZYNQ 通用的設備樹文件,后續在 Linux 內核源碼等相關路徑也會出現,不需要進行替換,只需要單獨把其它4個設備樹文件先備份出來。

? ? ? ?如果后續的系統移植完全不使用 Petalinux,還需要備份一下以下的輸出文件:

?? ? ? ?它們所在位置如下:

fsbl.elf:  vitis工程目錄/工程名/export\工程名\sw\工程名\boot
pmufw.elf:  vitis工程目錄/工程名/export\工程名\sw\工程名\boot
xxx.bit:  vitis工程目錄/工程名/hw

2.3 Petalinux 獲取設備樹

? ? ? ?使用 Petalinux 的話,設備樹包含兩部分,一是從 .xsa 獲取的設備樹(其實就是和Vitis獲取的一樣),另一部分是用戶自定義的追加設備樹

2.3.1 從 .xsa 獲取的設備樹

? ? ? ?在創建好 Petalinu 工程后,需要先獲取設備描述文件(.xsa)

petalinux-config --get-hw-description xsa路徑

? ? ? ?執行完命名后,進入以下圖形化配置界面,此時需要先進行一些配置,與設備樹相關的就是指定官方的設備樹模板包路徑。

? ? ? ?按以下路徑進入:

-->Auto Config Settings --> Device tree autoconfig

? ? ? ?勾選上設備樹的自動配置

? ? ? ?在完成 Petalinux 的基本配置后(如包含離線編譯,鏡像,內核源碼與 u-boot 包的路徑指定等),編譯工程:

petalinux-build

? ? ? ?編譯完成后就能在以下路徑找到從 .xsa 獲取的設備樹:

petalinux工程目錄/components/plnx_workspace/device-tree/device-tree

在這里插入圖片描述

? ? ? ?感興趣的話可以進去查看以下,與 Vitis 生成的內容基本一致。

2.3.2 用戶自定義的追加設備樹

? ? ? ?如果是使用 Petalinux 進行 linux 開發,一般會對以下目錄的設備樹進行修改:

petalinux/project-spec/meta-user/recipes-bsp/device-tree/files

? ? ? ?如果是不使用 Petalinux 來移植 Linux 系統,同樣也需要把這個 system-user.dtsi 進行備份,放到內核對象位置。

3 獲取文件總結

? ? ? ?通過本篇內容,我們獲取了后續 u-boot、Linux內核源碼等需要使用的設備樹。它們一般包含以下 4 個文件(除去 ZYNQ 通用的 2 個設備樹 zynqmp.dts 和 zynqmp-clk-ccf.dtsi)

1,pcw.dtsi:PS 部分的配置,如 UART、I2C、SPI;

2,pl.dtsi:PL 部分的配置,如AXI GPIO、AXI DMA;

3,system.dts:完整設備樹主干文件;

4,system-top.dts:頂層設備樹文件

? ? ? ?其中關于 PL 和 PS 側配置的設備樹文件都不建議自行修改,需要修改也要謹慎起見

? ? ? ?如果是使用 Petalinux,還可能涉及到用戶設備樹:

5,system-user.dtsi

6,pl-custom.dtsi

? ? ? ?如果后續的系統移植完全不使用 Petalinux,還可以從 Vitis 獲取:

1,fsbl.elfZYNQ啟動(全稱叫First Stage Boot Loader)所需要的文件;

2,pmufw.elf :ZYNQ用來進行包括系統初始化電源管理和錯誤處理等功能的小型處理器執行代碼;

3,xxx.bit :就是 FPGA 開發中常用到的比特文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75742.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基礎算法篇(5)(藍橋杯常考點)—動態規劃(C/C++)

文章目錄 動態規劃前言線性dp路徑類dp經典線性dp背包問題分類01背包問題完全背包問題多重背包分組背包問題混合背包問題多維費用的背包問題區間dp 動態規劃 前言 在競賽中,如果遇到動態規劃的題目,只要不是經典題型,那么大概率就是以壓軸題的…

obsidian寫文章的圖床設置方法

目標 要達成的需求: 復制到obsidian的圖片,自動上傳到Picgo配置的圖床。可以自定義大小。可以一鍵下載當前文章的圖片到本地。 obsidian配置圖床 安裝并配置插件 image auto upload plugin,配置信息如下圖。 滾輪alt自定義大小 安裝并…

QPaintDevice繪圖設備

1.QPixmap 對不同平臺做了顯示的優化,可以將畫的圖保存到磁盤上 頭文件: #include"QPixmap" #include"QPainter" 1.1QPixmap畫圖 代碼: //Pixmap繪圖設備QPixmap pix(300,300);//聲明畫家QPainter painter(&pix…

數據結構有哪些類型(對于數據結構的簡述)

在學習計算機時,數據結構是不可忽視的一點,從考研時的408課程,再到工作中編寫軟件,網站,要想在計算機領域站住腳跟,數據結構是必備的 在這里,我對于數據結構進行了匯總,并簡要描述&…

L2TP實驗(無圖后補)

拓撲圖 一、搭建拓撲并配置基礎 IP 地址 設備選型與拓撲搭建:在 eNSP 中,拖入所需設備,包括 LAC(L2TP Access Concentrator,L2TP 接入集中器 )、LNS(L2TP Network Server,L2TP 網絡服…

【C#】CAN通信的使用

在C#中實現CAN通信通常需要借助第三方庫或硬件設備的驅動程序,因為C#本身并沒有直接內置支持CAN通信的功能。以下是一個關于如何使用C#實現CAN通信的基本指南,包括所需的步驟和常用工具。 1. 硬件準備 要進行CAN通信,首先需要一個支持CAN協…

02_C++入門案例習題while循環練習案例:猜數字

案例描述&#xff1a;系統隨機生成一個1到100之間的數字&#xff0c;玩家進行猜測&#xff0c;如果猜錯&#xff0c;提示玩家數字過大或過小&#xff0c;如果猜對恭喜玩家勝利&#xff0c;并且退出游戲。 需要引入隨機數種子 #include <cstdlib> #include <ctime>…

深入理解哈希沖突:原理、解決方案及 Java 實踐

概述&#xff1a;在計算機科學領域&#xff0c;哈希表是一種非常重要的數據結構&#xff0c;它通過哈希函數將鍵映射到存儲桶中&#xff0c;從而實現快速的數據查找、插入和刪除操作。然而&#xff0c;哈希表在實際應用中會面臨 哈希沖突的問題。本文將深入探討哈希沖突的原理、…

opencv(C++)處理圖像顏色

文章目錄 介紹使用策略設計模式比較顏色實現方案計算兩個顏色向量之間的距離1. 簡單方法&#xff1a;曼哈頓距離計算&#xff08;Manhattan Distance&#xff09;2.使用 OpenCV 的 cv::norm 函數3.使用 OpenCV 的 cv::absdiff 函數錯誤示例 使用 OpenCV 函數實現顏色檢測實現方…

DOM解析XML:Java程序員的“樂高積木式“數據搭建

各位代碼建筑師們&#xff01;今天我們要玩一個把XML變成內存樂高城堡的游戲——DOM解析&#xff01;和SAX那種"邊看監控邊破案"的刺激不同&#xff0c;DOM就像把整個樂高說明書一次性倒進大腦&#xff0c;然后慢慢拼裝&#xff08;內存&#xff1a;你不要過來啊&…

Apache Nifi安裝與嘗試

Apache NIFI中文文檔 地址&#xff1a;https://nifichina.github.io/ 下載安裝配置 1、環境準備 Nifi的運行需要依賴于java環境&#xff0c;所以本機上需要安裝java環境&#xff0c;并配置環境變量。 1.1查看本機是否已經存在java環境 請先執行以下命令找出系統中真實可用…

我可能用到的網站和軟件

我可能用到的網站和軟件 程序員交流的網站代碼管理工具前端組件庫前端框架在線工具人工智能問答工具學習的網站Windows系統電腦的常用工具 程序員交流的網站 csdn博客博客園 - 開發者的網上家園InfoQ - 軟件開發及相關領域-極客邦掘金 (juejin.cn) 代碼管理工具 GitHub 有時…

使用SSH解決在IDEA中Push出現403的問題

錯誤截圖&#xff1a; 控制臺日志&#xff1a; 12:15:34.649: [xxx] git -c core.quotepathfalse -c log.showSignaturefalse push --progress --porcelain master refs/heads/master:master fatal: unable to access https://github.com/xxx.git/: The requested URL return…

JavaScript異常機制與嚴格模式

目錄 JavaScript 異常機制 1. 基本語法&#xff1a;try...catch...finally 2. 拋出異常&#xff1a;throw 3. 錯誤對象屬性 4. 同步代碼的異常處理 5. 異步代碼的異常處理 5.1 回調函數 5.2 Promise 5.3 全局未捕獲的 Promise 錯誤 6. 全局錯誤處理 7. 自定義錯誤與…

中廠算法崗面試總結

時間&#xff1a;2025.4.10 地點&#xff1a;上市的電子有限公司 面試流程&#xff1a; 1.由負責人講解公司文化 2&#xff0c;由技術人員講解公司的技術崗位&#xff0c;還有成果 3.帶領參觀各個工作位置&#xff0c;還有場所 4.中午吃飯 5.面試題&#xff0c;閉卷考試…

vue+flask圖書知識圖譜推薦系統

文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站&#xff0c;有好處&#xff01; 編號: F025 架構: vueflaskneo4jmysql 亮點&#xff1a;協同過濾推薦算法知識圖譜可視化 支持爬取圖書數據&#xff0c;數據超過萬條&am…

MySQL NDB Cluster詳解

MySQL NDB Cluster&#xff08;MNC&#xff09; 是MySQL提供的一種分布式數據庫解決方案&#xff0c;旨在提供高可用性、高性能的數據庫服務。它通過 NDB&#xff08;Network DataBase&#xff09; 存儲引擎實現了高可用性和分布式存儲&#xff0c;在NDB中&#xff0c;數據通過…

解決華碩主板Z890m下載ubuntu20.04后沒有以太網問題

問題描述&#xff1a; 華碩主板Z890m下載雙系統ubuntu20.04后&#xff0c;發現ubuntu不能打開以太網。 問題原因&#xff1a; 華碩主板的網卡驅動是r8125,而ubuntu20.04的驅動版本是r8169&#xff0c;所以是網卡驅動不匹配造成 解決方案 開機界面按下F2進入BOIS模式&#…

JS里對于集合的簡單介紹

JS的集合 前言一、集合二、基本使用1. 創建集合2. 添加元素3. 刪除元素4. 檢查元素5. 清空集合6. 集合的大小 三、擴展使用1. 遍歷集合2. 從數組創建集合3. 集合的應用場景 四、總結 前言 JS里對于集合的簡單介紹 同數學的集合&#xff0c;有無序性、唯一性 注意&#xff1a;…

pytorch 反向傳播

文章目錄 概念計算圖自動求導的兩種模式 自動求導-代碼標量的反向傳播非標量變量的反向傳播將某些計算移動到計算圖之外 概念 核心&#xff1a;鏈式法則 深度學習框架通過自動計算導數(自動微分)來加快求導。 實踐中&#xff0c;根據涉及號的模型&#xff0c;系統會構建一個計…