0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Linux UIO框架實現(xiàn)ARM和FPGA的高效通信

駿龍電子 ? 來源:駿龍電子 ? 2025-02-25 09:49 ? 次閱讀

應(yīng)用背景

ARMFPGA 之間通信的通信過程中,通信開始或者完成時,需要實時通知對方,如果 ARM 使用類似 while (1) 循環(huán)進行反復(fù)查看標(biāo)志位,會造成 CPU 空轉(zhuǎn),影響工作效率。如果使用中斷加內(nèi)核驅(qū)動的方式,雖然可以提高效率,但這對開發(fā)驅(qū)動的工程師有較高的技術(shù)要求,因為內(nèi)核驅(qū)動運行在內(nèi)核態(tài),一旦出現(xiàn)錯誤,可能會造成整個內(nèi)核的崩潰,因此需要一種既高效又不依賴復(fù)雜內(nèi)核驅(qū)動的解決方案。

UIO 簡介

UIO (Userspace I/O) 是運行在用戶空間的 I/O 技術(shù),Linux 系統(tǒng)中一般的驅(qū)動設(shè)備都是運行在內(nèi)核空間,應(yīng)用程序在用戶空間調(diào)用即可。UIO 則是將驅(qū)動的小部分運行在內(nèi)核空間,在用戶空間實現(xiàn)驅(qū)動的絕大多數(shù)功能,使用 UIO 可以避免設(shè)備的驅(qū)動程序需要隨著內(nèi)核的更新而更新的問題。

相比傳統(tǒng)內(nèi)核態(tài)驅(qū)動,UIO 的優(yōu)勢包括:

簡化了驅(qū)動開發(fā)流程,降低了內(nèi)核崩潰的風(fēng)險

避免了因內(nèi)核版本更新而需要同步更新驅(qū)動的問題

支持用戶空間直接訪問硬件,提高開發(fā)靈活性和效率

7447c72e-f274-11ef-9310-92fbcf53809c.jpg

圖1 UIO 驅(qū)動的內(nèi)核部分、用戶空間部分和 UIO 框架以及內(nèi)核的關(guān)系

實現(xiàn)方案及步驟

配置內(nèi)核設(shè)備樹

首先對設(shè)備樹節(jié)點進行修改,將設(shè)備的 compatible 屬性設(shè)置為 generic-uio,以加載通用 UIO 驅(qū)動,如下圖 (圖2) 所示:

746622fa-f274-11ef-9310-92fbcf53809c.jpg

圖2 將設(shè)備的 compatible 屬性設(shè)置為 generic-uio

配置內(nèi)核

Linux 內(nèi)核中已有 UIO 驅(qū)動,但是我們需要使能,才能在內(nèi)核啟動。根據(jù)內(nèi)核設(shè)備樹,加載相應(yīng)的驅(qū)動。具體的內(nèi)核增加的配置,參考下圖 (圖3):

747aa144-f274-11ef-9310-92fbcf53809c.jpg

圖3 增加的內(nèi)核驅(qū)動配置

應(yīng)用層使用

下圖 (圖4) 為大家提供一套相對完整的參考代碼:

7490fa70-f274-11ef-9310-92fbcf53809c.jpg

圖4 應(yīng)用層使用參考代碼

說明

在步驟 3 中,read 為阻塞讀。設(shè)備沒有讀到數(shù)值,該線程進入阻塞態(tài)。待時機合適,立馬進入運行態(tài)。在進入阻塞態(tài),釋放處理器的占用。待有數(shù)值以后,處理器立馬進入運行態(tài),如此即可高效完成工作任務(wù)。

UIO 框架說明

Linux UIO 框架的代碼位于內(nèi)核源碼 drivers/uio/uio.c。Linux UIO 框架也會調(diào)用內(nèi)核提供的其他 API 接口函數(shù)。通過一個設(shè)備文件和幾個 sysfs 屬性文件訪問 UIO 設(shè)備。第一個設(shè)備的設(shè)備文件被稱為 /dev/uio0,后續(xù)的設(shè)備被稱為 /dev/uio1、/dev/uio2 等。

中斷是通過讀取 /dev/uioX 來處理的。一旦中斷發(fā)生,來自 /dev/uioX 的 blocking read () 將立即返回。除此以外,也可以在 /dev/uioX 上使用 select() 來等待中斷。從 /dev/uioX 讀取的整數(shù)值表示總的中斷數(shù),可以使用這個數(shù)來計算是否錯過了一些中斷。

優(yōu)勢與總結(jié)

使用 UIO 框架實現(xiàn) ARM 和 FPGA 的高效通信,不僅減少了 CPU 的資源占用,還降低了開發(fā)門檻,提升了系統(tǒng)穩(wěn)定性。通過用戶空間完成大部分驅(qū)動邏輯,既實現(xiàn)了高效中斷處理,又簡化了驅(qū)動維護,是一種高效可靠的通信方案。

本文主要介紹如何通過 UIO 技術(shù),在 ARM 與 FPGA 通信中利用用戶態(tài)實現(xiàn)高效中斷處理,避免內(nèi)核驅(qū)動的復(fù)雜性和風(fēng)險。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1639

    文章

    21885

    瀏覽量

    610835
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9254

    瀏覽量

    372761
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6136

    瀏覽量

    137081
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11402

    瀏覽量

    212066

原文標(biāo)題:基于 Linux UIO 的高效 ARM-FPGA 通信中斷處理方案

文章出處:【微信號:駿龍電子,微信公眾號:駿龍電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 1人收藏

    評論

    相關(guān)推薦

    TLT507-ARM + FPGA通信案例

    TLT507-ARM + FPGA通信案例
    的頭像 發(fā)表于 01-26 11:05 ?1214次閱讀
    TLT507-<b class='flag-5'>ARM</b> + <b class='flag-5'>FPGA</b><b class='flag-5'>通信</b>案例

    FPGA linux 以太網(wǎng) ARM

    各位大神問個問題我使用FPGA板卡發(fā)UDP包,FPGA只有MAC層,沒有協(xié)議棧;在裝有WINDOWS和linux的PC上都能收到!但是ARM上(li
    發(fā)表于 10-26 20:20

    ARM-Linux平臺實現(xiàn)多種FPGA芯片的程序加載

    ;}void cleanup_(void){printk(“Goodbye cruel world ”);}5、結(jié)束語本文的創(chuàng)新點:基于ARM-Linux平臺,實現(xiàn)了一種FPGA的程序加載模式,加載速度快,靈活
    發(fā)表于 12-10 17:42

    一種基于ARM-LinuxFPGA程序加載方法

    本文實現(xiàn)了一種基于ARM-LinuxFPGA 程序加載方法,詳細(xì)討論了加載過程中各個階段程序?qū)ε渲霉苣_的操作,給出了硬件實現(xiàn),編寫了運行于ARM
    發(fā)表于 12-19 16:26 ?31次下載

    Linux環(huán)境下實現(xiàn)ARM9的CAN總線通信

    Linux環(huán)境下實現(xiàn)ARM9的CAN總線通信 1.  引言CAN(Controller Area Network)總線最早是由德國BOSCH公司提出,
    發(fā)表于 11-02 15:06 ?1025次閱讀
    <b class='flag-5'>Linux</b>環(huán)境下<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>ARM</b>9的CAN總線<b class='flag-5'>通信</b>

    Linux環(huán)境下實現(xiàn)基于ARM9的CAN總線通信

    Linux環(huán)境下實現(xiàn)基于ARM9的CAN總線通信 1.  引言CAN(Controller Area Network)總線最早是由德國BOSCH公司提出,
    發(fā)表于 11-03 09:56 ?679次閱讀
    <b class='flag-5'>Linux</b>環(huán)境下<b class='flag-5'>實現(xiàn)</b>基于<b class='flag-5'>ARM</b>9的CAN總線<b class='flag-5'>通信</b>

    Zynq UltraScale+ MPSoC 上的多個Linux UIO設(shè)計

    本實驗工程將介紹如何利在賽靈思異構(gòu)多處理器產(chǎn)品系列 Zynq UtralScale+ MPSoC ZCU102 嵌入式評估板上實現(xiàn)多個 UIO,同時借助賽靈思的工具完成硬件工程和 linux BSP 的開發(fā),最后通過測試應(yīng)用程
    發(fā)表于 03-21 14:55 ?3424次閱讀
    Zynq UltraScale+ MPSoC 上的多個<b class='flag-5'>Linux</b> <b class='flag-5'>UIO</b>設(shè)計

    基于FPGAARM并行總線和端口設(shè)計

    在數(shù)字系統(tǒng)的設(shè)計中,FPGA+ARM 的系統(tǒng)架構(gòu)得到了越來越廣泛的應(yīng)用,FPGA主要實現(xiàn)高速數(shù)據(jù)的處理;ARM 主要實現(xiàn)系統(tǒng)的流程控制.人機
    發(fā)表于 08-08 15:37 ?6707次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>ARM</b>并行總線和端口設(shè)計

    浪潮發(fā)布全球首個FPGA高效計算框架

    浪潮宣布開源發(fā)布基于FPGA高效AI計算框架TF2,這一框架的推理引擎采用全球首創(chuàng)的DNN移位計算技術(shù),結(jié)合多項最新優(yōu)化技術(shù),可實現(xiàn)通用深
    發(fā)表于 09-09 14:17 ?1135次閱讀

    浪潮全球首發(fā)完整方案的FPGA高效計算框架

    浪潮宣布開源發(fā)布基于FPGA高效AI計算框架TF2,這一框架的推理引擎采用全球首創(chuàng)的DNN移位計算技術(shù),結(jié)合多項最新優(yōu)化技術(shù),可實現(xiàn)通用深
    發(fā)表于 09-23 15:04 ?1981次閱讀

    如何在 Vitis 中使用 UIO 驅(qū)動框架創(chuàng)建簡單的 Linux 用戶應(yīng)用

    Linux嵌入式設(shè)計中最基本的任務(wù)之一是創(chuàng)建用戶應(yīng)用程序。 在本篇博文中,我們將探討如何在 Vitis 中使用 UIO 驅(qū)動框架創(chuàng)建簡單的 Linux 用戶應(yīng)用。 1 硬件設(shè)計 本次
    的頭像 發(fā)表于 11-20 14:05 ?4565次閱讀

    基于OpenAMP框架的雙核ARM通信案例

    本文主要介紹基于OpenAMP框架的雙核ARM通信案例的使用說明,CPU0(Master)運行Linux系統(tǒng),CPU1(Remote)運行裸機或FreeRTOS程序。CPU0使用rem
    發(fā)表于 11-30 12:44 ?5499次閱讀

    一文詳解Linux UIO技術(shù)

    UIO(Userspace I/O)是運行在用戶空間的I/O技術(shù),Linux 系統(tǒng)中一般的驅(qū)動設(shè)備都是運行在內(nèi)核空間,應(yīng)用程序在用戶空間調(diào)用即可。UIO 則是將驅(qū)動的小部分運行在內(nèi)核空間,在用戶空間
    的頭像 發(fā)表于 01-19 16:35 ?1.1w次閱讀
    一文詳解<b class='flag-5'>Linux</b> <b class='flag-5'>UIO</b>技術(shù)

    Linux的PWM驅(qū)動框架實現(xiàn)方法

    本文主要講述了Linux的PWM驅(qū)動框架、實現(xiàn)方法、驅(qū)動添加方法和調(diào)試方法。
    的頭像 發(fā)表于 05-14 15:24 ?1660次閱讀
    <b class='flag-5'>Linux</b>的PWM驅(qū)動<b class='flag-5'>框架</b>及<b class='flag-5'>實現(xiàn)</b>方法

    基于LinuxARM和單片機的串口通信設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于LinuxARM和單片機的串口通信設(shè)計.pdf》資料免費下載
    發(fā)表于 10-11 10:35 ?0次下載
    基于<b class='flag-5'>Linux</b>的<b class='flag-5'>ARM</b>和單片機的串口<b class='flag-5'>通信</b>設(shè)計

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品