Zynq UltraScale+ MPSoC 上的多個Linux UIO設計_第1頁
Zynq UltraScale+ MPSoC 上的多個Linux UIO設計_第2頁
Zynq UltraScale+ MPSoC 上的多個Linux UIO設計_第3頁
Zynq UltraScale+ MPSoC 上的多個Linux UIO設計_第4頁
Zynq UltraScale+ MPSoC 上的多個Linux UIO設計_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

ZynqUltraScale+MPSoC上的多個LinuxUIO設計這里的UIO即UserspaceI/O,本文中UIO泛指UIO設備和UIO驅動。它在Linuxkernel的世界里比較小眾,主要是一些定制設備和相應的驅動。UIO內核驅動指負責將中斷和設備內存暴露給用戶空間,再由UIO用戶態驅動(Application)來實現具體的業務,隨心所欲的玩。學術點叫做高度定制化,柔性設計。

那怎么和FPGA扯上了關系呢?是的,FPGA在硬件世界里也是隨心所欲的玩,這一硬一軟還真是登對,在一起啊在一起。

本實驗工程將介紹如何利在賽靈思異構多處理器產品系列ZynqUtralScale+MPSoC

ZCU102嵌入式評估板上實現多個UIO,同時借助賽靈思的工具完成硬件工程和linuxBSP的開發,最后通過測試應用程序完成測試。

ZCU102上的MPSoC集成固化了四核ARMCortex-A53,雙核Cortex-R5以及Mali-400MP2GPU,這部分官方稱為PS(ProcessingSystem)。另外一部分就是FPGA,即PL(ProgrammableLogic)。PS端實現控制,PL用來實現應用加速,兩者通過AXI連接。跑這個小實驗,呵呵,大材小用。只是本人手頭正好有這個板子不得不裝。筒子們可以去買了個Zybo或者ZedBoard開發板,在板子試試身手。

實驗報告

實驗材料:

硬件設計

建立Vivado工程,適配ZCU102EVB。通過IPIntegrator加入PS,在PL側加入5個UIO輸入,其中1個是GPIO模塊(包含中斷輸出和設備內存),另外4個是PIN連接到ZCU102EVB上的DIP開關,作為中斷輸入通過一個concatIP連接到PS的ps_pl_irq管腳。板級細節請參考[1]UG1182,芯片資料參考[2]UG1085

添加PIN約束文件,

set_propertyPACKAGE_PINAN13[get_portspl_irq_ll]

set_propertyIOSTANDARDLVCMOS33[get_portspl_irq_ll]

set_propertyPACKAGE_PINAM14[get_portspl_irq_lh]

set_propertyIOSTANDARDLVCMOS33[get_portspl_irq_lh]

set_propertyPACKAGE_PINAP14[get_portspl_irq_ef]

set_propertyIOSTANDARDLVCMOS33[get_portspl_irq_ef]

set_propertyPACKAGE_PINAN14[get_portspl_irq_er]

set_propertyIOSTANDARDLVCMOS33[get_portspl_irq_er]

Vivado的圖形化的模塊設計,豐富的IP庫,加上可以上天的智能連接。有點數字電路設計的基礎,很快就能完成這個小設計。整個設計如下圖。

軟件設計

這里用到Xilinx針對LinuxBSP開發的Petalinux。它基于Yocto,加入Xilinx的Layers實現硬件工程的導入,將復雜的Yocto的設計流程打包簡化,支持一定的用戶自定義功能,如QEMU仿真運行,增加out-of-tree的驅動,Devicetree修改,應用程序編譯打包,等等。具體信息請移步/products/design-tools/embedded-software/petalinux-sdk.html

這里簡單展示一下具體的命令過程。

$petalinux-create-tproject--templatezynqMP-nzcu102-pl2ps_irq

$cd./zcu102-pl2ps_irq

$petalinux-config--get-hw-description

$petalinux-config-ckernel

EnableUIO_PDRV_GENIRQdriver

CONFIG_UIO=y

#CONFIG_UIO_CIFisnotset

CONFIG_UIO_PDRV_GENIRQ=y

$petalinux-build-cdevice-tree

PL側的dtsi文件生成與./components/plnx_workspace/device-tree-generation/pl.dtsi

這里只有GPIOUIO。PINUIO因為不是IP,所以相關信息無法由工具自動生成。所以要做如下修改:

1.修改GPIOUIO設備端點

1)將中斷號改為93

2)將compatible改成“generic-uio”//我們后面要用Linux自帶的UIO_PDRV_GENIRQ驅動

2.增加DIPUIO端點

1)將compatible改成“generic-uio”

2)依次設置中斷值89到93

3)按照每個DIPPIN的interrupttriggertype設置屬性值

*DTS里的中斷號與硬件中斷號有32的offset。

Petalinux提供了自定義DTS文件./project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi,將以上修改定義到system-user.dtsi.

有兩個方法來適配UIO端點和UIO_PDRV_GENIRQ驅動

1.bootargsuse“uio_pdrv_genirq.of_id=generic-uio”,可以通過DTS定義。

2.insmoduio_pdrv_genirq.koof_id=generic-uiowheninstallthedriver

修改完后,編譯出Image.

$petalinu-build

$cd./images/linux

$petalinux-package--boot--fsblzynqmp_fsbl.elf--fpga--atf--pmufw--u-boot--force

將生成的BOOT.bin(bootloader)和image.ub(FITuImage)拷貝到SD卡用于啟動。\

測試

這里引用下關于uio_pdrv_genirq驅動的介紹

https://01.org/linuxgraphics/gfx-docs/drm/driver-api/uio-howto.html結合驅動代碼./drviver/uio/uio_pdrv_genirq.c)可知,每個UIO設備會有對應的/dev/uioX的設備節點。用戶態驅動程序的讀操作會阻塞直到UIO硬件中斷發生。UIO的中斷處理程序uio_pdrv_denirq_handler()會關閉該硬件中斷。用戶態驅動程序需要通過write函數來觸發uio_pdrv_genirq_irqcontrol()以完成中斷的使能和關閉。代碼如下,

啟動內核及加載uio_pdrv_genirq驅動

檢查/proc/interrupts

細心的你一定發現了一個坑,少了2個UIO中斷(IRQ122和IRQ124),原來是硬件不支持Edgefalling和LevelLow的觸發模式。kernellog如下。

測試DIPUIO方法一

通過撥動2個DIP,觀察到

2個DIP中斷發生了,可是不論怎么再撥動DIP開關,始終是1。前文鋪墊過,這個中斷在驅動的中斷處理程序里會被關掉,需要通過應用程序調用write()來打開。這里有個easyway,使用萬能的echo命令“echo0x1>/dev/uioX”,再配合DIP可以觸發多次中斷。

測試DIPUIO方法二

前面的方法比較low,這里有稍微高級的享受。寫個簡單的用戶態驅動程序,上代碼。

借助petalinux提供的交叉編譯工具編譯出bin文件,拷貝到啟動SD卡。

運行測試程序并配合DIP開關測試。(為了更好的體現測試運行情況,在UIO內核驅動里增加了irqcontrol的調用打印)

測試GPIOUIO

UIO驅動會將設備內存(寄存器)空間枚舉出來,由用戶態驅動程序通過mmap導出進行讀寫控制。參見AXI_GPIOIP的文檔pg144-axi-gpio.pdf,其寄存器如下。

測試應用程序會通過設置GIER和IP_IER來使能中斷。上代碼。

測試過程或許你覺得這么貼圖代碼不厚道而不能施展復制黏貼大法,可不知我拙與WORD,沒try出好排版。莫急莫急,這里有GIT,/AlexHe/U

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論