<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ZYNQ跑系統系列開發:AXI-DMA的linux驅動案例

電子設計 ? 來源:CSDN博主 ? 作者:long_fly ? 2021-01-02 09:11 ? 次閱讀

一、搭建硬件環境

vivado版本2017.4,芯片為7010,不過不管什么版本和芯片大致步驟是一樣的

本文工程文件:https://gitee.com/long_fly/AXIDMA_linux

硬件平臺PL的搭建同ZYNQ基礎系列(六) DMA基本用法,在這個工程的基礎上添加SD卡(根據自己的開發板硬件選擇相應的引腳)

o4YBAF9uJIOAE8PDAAB1-qbQiXc289.png

然后直接生成bit文件,然后記得要導出硬件(包含bit文件)進SDK

二、生成設備樹

1.解壓設備樹工具文件夾到一個地方
https://github.com/Xilinx/device-tree-xlnx下載

2.菜單欄 –> Xilinx –> Repositories
添加剛剛解壓的位置

pIYBAF9uJISALIXNAADC-32FTL0002.png

3.菜單欄 –> File –> New –> Board Support Package
創建BSP,可以發現多了一欄device_tree,直接點確定到下一步

pIYBAF9uJIaAGFnxAACepXuBb_Y518.png

4.設置環境變量

pIYBAF9uJIeAB4d2AACVvVQ4PwI263.png

內容為:console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootfstype=ext4 earlyprintk rootwait

5.最后可以在工程文件夾中找到生成的設備樹文件

o4YBAF9uJImAY1BMAADBqPjxGaA048.png

待用

三、生成FSBL引導文件
1.在SDK中新建一個APP,選擇FSBL模板工程,然后完成創建

pIYBAF9uJIqAPLSuAACHcwdr2xc592.png


pIYBAF9uJIyATDjWAAB0yQ8VkRU433.png

2.使能調試信息打印

o4YBAF9uJI2AUdlVAACCtvB3KyI720.png

添加#define FSBL_DEBUG_INFO后,保存文件,會生成FSBL.elf文件,文件待用

四、編譯u-boot
0.具體的相關環境(不裝會報錯)和SDK環境安裝(不裝沒法編譯,建議去官網下載)
參考ZYNQ跑系統 系列(一) 傳統方式移植linux,不再贅述;u-boot和kernel直接在https://github.com/Xilinx下載;還有注意以下路徑是我自己的,要根據實際修改相應路徑

1.linux超級用戶模式,定位settings64.sh文件(在SDK安裝文件夾里)
source /opt/Xilinx/SDK/2017.1/settings64.sh

2.進入u-boot目錄(自己解壓的路徑)
cd /home/hlf/mnt/u-boot-xlnx-master

3.打開GUI配置u-boot
make menuconfig,load預配置的文件,絕對路徑為/home/hlf/mnt/u-boot-xlnx-master/configs/zynq_ax7010_defconfig

pIYBAF9uJI-AV4E7AACJwy_ISGY398.png

,觀察了一下沒什么需要修改的,直接保存并退出
4.讀配置文件(zynq_ax7010_defconfig)
make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_ax7010_defconfig
5.編譯
make CROSS_COMPILE=arm-xilinx-linux-gnueabi-
6.查看 u-boot 文件的不同段的內存分配情況 (可以不看)
arm-xilinx-linux-gnueabi-objdump -h u-boot
7.修改后綴為u-boot.elf,待用

o4YBAF9uJJCAWA5vAACa9KV2dG8679.png

五、編譯kernel
1.進入kernel目錄(自己解壓的路徑)并和之前一樣定位文件
cd /home/hlf/mnt/linux-xlnx-master
source /opt/Xilinx/SDK/2017.1/settings64.sh
2.打開GUI配置kernel
make ARCH=arm menuconfig,load預配置的文件,絕對路徑為/home/hlf/mnt/linux-xlnx-master/arch/arm/configs/xilinx_zynq_defconfig,這里不通過GUI方式更改配置,關閉
3.開啟DMA的相關功能
也可以不通過GUI的方式配置kernel,這里我們直接命令行(要在超級用戶模式下,不然沒有權限修改):
gedit /home/hlf/mnt/linux-xlnx-master/arch/arm/configs/xilinx_zynq_defconfig
打開文件,確保以下選項開啟(=y)

CONFIG_CMA=y
CONFIG_DMA_CMA=y
CONFIG_XILINX_DMA_ENGINES=y
CONFIG_PL330_DMA=y
CONFIG_XILINX_DMA=y
CONFIG_XILINX_AXIDMA=y
CONFIG_XILINX_AXIVDMA=y
CONFIG_DMA_SHARED_BUFFER=y

4.讀配置
make ARCH=arm xilinx_zynq_defconfig
5.編譯內核
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- uImage LOADADDR=0x00008000
6.編譯完成后,命令行會提示生成的uImage的位置
uImage拷貝出來待用
7.生成devicetree.dtb
將設備樹文件夾拷貝到虛擬機的相應路徑下

o4YBAF9uJJKADGNQAACrrB0rMKI819.png

在pl.dtsi中添加:
axidma_chrdev: axidma_chrdev@0 {
compatible = "xlnx,axidma-chrdev";
dmas = ;
dma-names = "tx_channel", "rx_channel";
};

o4YBAF9uJJSAcJpdAAEkCMbdlDk404.png

保存后,生成devicetree.dtb:
./scripts/dtc/dtc -I dts -O dtb -o /home/hlf/mnt/device_tree_bsp_0/devicetree.dtb /home/hlf/mnt/device_tree_bsp_0/system-top.dts

六、準備運行linux
1.生成BOOT.bin
之前產生了FSBL.elf、u-boot.elf和bit文件,直接通過SDK生成BOOT.bin
2.拷貝文件至SD卡
將之前產生的BOOT.bin、devicetree.dtb和uImage拷貝到SD卡
3.插上串口開機運行

o4YBAF9uJJaATzV2AACFlsHzJVM678.png

確??梢赃\行系統

七、編譯例程
0.下載例程
例程下載地址:https://github.com/bperez77/xilinx_axidma或者https://gitee.com/long_fly/AXIDMA_linux
1.拷貝例程文件夾到kernel文件夾里

pIYBAF9uJJeAKM4wAABjap-9Mu8872.png

我將文件夾命名為了extra,直接將例程文件夾的內容放到里面,如果沒有權限的話,直接命令行chmod 777 文件夾名獲取相應權限就可以了
2.cd到extra文件夾里
3.編譯
使用交叉編譯鏈,定位到kernel(已經編譯好的)的路徑,編譯driver:
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm KBUILD_DIR=/home/hlf/mnt/linux-xlnx-master/ driver
使用交叉編譯鏈,編譯examples:
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm examples
編譯完成后,生成文件將出現在outputs文件夾里

pIYBAF9uJJiAALJlAABCCSN5GY4347.png

4.將這些文件拷貝到SD卡中,開機
5.掛載SD卡
cd ..到達系統目錄
mount /dev/mmcblk0p1 /mnt掛載SD卡
cd /mnt進入SD目錄
insmod axidma.ko載入剛剛生成的模塊

o4YBAF9uJJqAAkI4AABLjWMxNxE427.png

打印信息提示通道的ID沖突
6.修改設備樹中通道的ID號

pIYBAF9uJJuAQHU4AAD8AjUdrH4385.png

然后按照之前的步驟重新生成devicetree.dtb,將新設備樹文件拷貝到SD卡中,然后開機,掛載SD卡,加載模塊
這次沒有打印信息提示ID沖突

7.查看是否成功
cd /dev到達dev目錄
ls查看內容

o4YBAF9uJJ2Ac92zAACVCVPnSKw610.png

會發現多了一個axidma,然后運行dmesg,可以看到如下信息:

pIYBAF9uJJ6ALFTHAAArEpSGWbM768.png

8.運行例程里的APP1

o4YBAF9uJJ-AW1FVAABQEwLKDJs247.png

發現CMA內存不夠,導致接收緩存空間申請不了這么大,在設備樹文件夾中修改.dts后綴的文件,添加cma空間的申請

o4YBAF9uJKGAeyyNAACkJ3heuTo366.png

然后重新生成devicetree.dtb文件,拷貝到SD卡中,開機,掛載SD卡,加載模塊,運行APP

o4YBAF9uJKOAPpoCAABmFUh0QTo817.png

可以測試收發通道的數據速率

9.運行例程里的APP2
在SD卡中新建兩個文本,在其中一個文本文件中寫入內容,另一個為空

pIYBAF9uJKSAfhdBAAAsgluNW3Q186.png

運行應用程序,將文件1的內容通過DMA環路寫入文件2,因為文件太小了,所以顯示的是0.00Mb

o4YBAF9uJKWAJ0PtAAAsSiw63Qc613.png

運行結束后打開文件2,會發現和文件1里的內容完全一致

編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11025

    瀏覽量

    207145
  • Zynq
    +關注

    關注

    9

    文章

    600

    瀏覽量

    46813
  • AXI
    AXI
    +關注

    關注

    1

    文章

    126

    瀏覽量

    16350
收藏 人收藏

    評論

    相關推薦

    Xilinx ZYNQ 動手實操演練

    ??删幊踢壿嬁捎捎脩襞渲?,并通過“互連”模塊連接在一起,這樣可以提供用戶自定義的任意邏輯功能,從而擴展處理系統的性能及功能。不過,與采用嵌入式處理器的FPGA不同,Zynq-7000產品系列
    發表于 05-03 19:28

    STM32H7使用DMA方式讀取SD卡,DMA緩沖是否只能處于AXI SRAM?

    除了512K的 AXI SRAM,還有沒有其他的SRAM 區域能訪問到? 因為我想這整個512K 的AXI SRAM 做其他用途,變量都定義到其它的SRAM 區域。但這樣SD卡 DMA 就不能用了。
    發表于 04-18 06:00

    Linux DMA系統驅動開發

    Streaming DMA在訪問內存地址時經過cache,是non-coherence設備,通常采用streaming mapping的API進行內存申請,在單次DMA傳輸時進行map,在傳輸完成后進行unmap;
    發表于 04-07 14:38 ?229次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>DMA</b>子<b class='flag-5'>系統</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>

    Xilinx高性能PCIe DMA控制器IP,8個DMA通道

    或Scather Gather DMA,提供FIFO/AXI4-Stream用戶接口。 基于PCI Express Integrated Block,Multi-Channel PCIe RDMA
    的頭像 發表于 02-22 11:11 ?505次閱讀
    Xilinx高性能PCIe <b class='flag-5'>DMA</b>控制器IP,8個<b class='flag-5'>DMA</b>通道

    使用 PCIE 更新 AMD ZYNQ? 的 QSPI Flash 參考設計

    。 教程中所有涉及的設計及代碼均在 Windows 和 Linux(Ubuntu20.04)平臺下作了驗證。 系統設計 系統設計框圖參考如下。在設計實例化了一個 XDMA IP,通過其 M_A
    發表于 11-30 18:49

    基于zynq7020器件來搭建Linux系統

    Zynq器件將arm和FPGA結合,利用了兩者各自的優勢,arm可以實現靈活的控制,而FPGA部分可以實現算法加速,這大大擴展了zynq的應用。比如深度學習加速,圖像處理等等。PL側表示FPGA的邏輯部分,PS側為arm端以及一些AXI
    發表于 11-09 11:28 ?2084次閱讀
    基于<b class='flag-5'>zynq</b>7020器件來搭建<b class='flag-5'>Linux</b><b class='flag-5'>系統</b>

    ZYNQ的ARM和FPGA數據交互——AXI交互最重要的細節

    大部分器件的接口要求,提供互聯架構的靈活性與獨立性。 (1)AXI總線 總線是一組傳輸通道,是各種邏輯器件構成的傳輸數據的通道,一般由數據線、地址線、控制線等構成。在ZYNQ中支持三種AXI總線
    發表于 11-03 10:51

    Zynq系列處理器中AXI接口的使用

    Zynq系列處理器包含了ARM和FPGA,與ARM處理器+FPGA這種兩個處理器相比最大的特點就是兩種結構的數據交互在芯片內部進行。既節約了接口,有提升了交互速度。
    的頭像 發表于 10-17 17:05 ?623次閱讀
    <b class='flag-5'>Zynq</b><b class='flag-5'>系列</b>處理器中<b class='flag-5'>AXI</b>接口的使用

    LogiCORE JTAG至AXI Master IP核簡介

    LogiCORE JTAG至AXI Master IP核是一個可定制的核,可生成AXIAXI總線可用于處理和驅動系統中FPGA內部的AXI信號。AX
    的頭像 發表于 10-16 10:12 ?590次閱讀
    LogiCORE JTAG至<b class='flag-5'>AXI</b> Master IP核簡介

    什么是AXI?AXI如何工作?

    Xilinx 從 Spartan-6 和 Virtex-6 器件開始采用高級可擴展接口 (AXI) 協議作為知識產權 (IP) 內核。Xilinx 繼續將 AXI 協議用于針對 7 系列Z
    的頭像 發表于 09-27 09:50 ?811次閱讀
    什么是<b class='flag-5'>AXI</b>?<b class='flag-5'>AXI</b>如何工作?

    AXI DMA詳解與應用篇

    DMA是一種內存訪問技術,允許某些計算機內部的硬件子系統可以獨立的直接讀寫內存,而不需要CPU介入處理,從而不需要CPU的大量中斷負載,否則,CPU需要從來源把每一片段的數據復制到寄存器,然后在把他們再次寫回到新的地方,在這個時間里,CPU就無法執行其他的任務。
    的頭像 發表于 08-10 12:50 ?5526次閱讀
    <b class='flag-5'>AXI</b> <b class='flag-5'>DMA</b>詳解與應用篇

    Linux系統驅動開發之字符設備虛擬設備實驗

    系列圖文教程均以全志H3開發板為實驗板設計,字符設備驅動開發是最基礎的驅動開發。其本質是按字節
    發表于 08-07 16:16 ?385次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>系統</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>之字符設備虛擬設備實驗

    嵌入式Linux系統開發介紹

    Linux 系統開發 基于 linux 操作系統開發我們的產品叫 linux
    的頭像 發表于 07-27 17:00 ?920次閱讀
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>系統開發</b>介紹

    Zynq UltraScale+RFSoC的AXI CDMA Linux用戶空間示例

    本文將為您演示如何創建?AXI CDMA Linux?用戶空間示例應用
    的頭像 發表于 07-07 14:15 ?616次閱讀
    <b class='flag-5'>Zynq</b> UltraScale+RFSoC的<b class='flag-5'>AXI</b> CDMA <b class='flag-5'>Linux</b>用戶空間示例

    《基于“礦板”低成本學習Zynq系列》之一-淘板記

    形式也是適合學習的不錯的平臺,可以同時學習ARM ,Linux和FPGA的開發。但是該芯片一直很貴,第三方開發板基本都是1000以上的價格了,哪怕是個最小系統板都是500以上的價格。這
    的頭像 發表于 06-26 08:40 ?2899次閱讀
    《基于“礦板”低成本學習<b class='flag-5'>Zynq</b><b class='flag-5'>系列</b>》之一-淘板記
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>