有時我們需要為官方 IP 或者自己創建的 IP 生成 kernel module,然后在 linux kernel space 里使用 kernel module 來控制這個 IP。如果要使用 IP 中斷,我們需要在 kernel module 代碼里獲取設備中斷并建立中斷服務程序。
在老版本 petalinux,我們可以在 kernelmodule 里直接指定 IP 中斷的實際物理中斷號,但是新版本內核里我們需要在 kernel module 里獲取 IP 的虛擬中斷號。可以在 kernelmodule 代碼里使用 request_irq 函數來獲取中斷并指定中斷服務程序。
附件是為 axigpio IP 寫的一個 kernel module,可以作為參考例子:
首先需要生成一個基于 MPSoC 芯片的 vivado 工程,
在 block design 里加入 MPSoC processing core 和 axi gpiocore,
連接 axi gpio 的中斷信號到 MPSoC processing core 的 PL-》PS 中斷端口
最后生成 bitstream 導出 hdf 或者 xsa,生成 petalinux 工程,
在 petalinux 工程里用下面命令生成并使能名字叫做 gpioirq 的 kernel module,
Petalinux-create-t modules --name gpioirq --enable
然后在petalinux工程目錄里會生成這樣一個路徑 project-spec/meta-user/recipes-modules/gpioirq/files,把里面的 gpioirq.c 用附件里的同名文件覆蓋掉。
用附件里的 system-user.dtsi 把 project-spec/meta-user/recipes-bsp/device-tree/files 里的同名文件覆蓋掉,這是因為默認生成的 device tree 里 axigpio core 的 driver 是 xilinx driver,我們需要把它替換為我們生成的 kernel module 的 drivername,需要注意 system-user.dtsi 里面的 axigpio core 的名字需要和 petalinux 工程生成的 devicetree 里的 axi gpio core 的名字一樣。
然后就可以運行 petalinux-build 和 petalinux-package 命令來生成 boot image,然后上板啟動。Linux boot 之后可以通過 cat/proc/interrupts 命令看到 qgioirq 中斷已經建立起來了,按一下對應 axigpio 的板上 IO 按鈕可以看到中斷服務程序的打印信息。
本文來自 XILINX 產品應用工程師 Davis Zhang
編輯:jq
-
IP
+關注
關注
5文章
1863瀏覽量
155837 -
函數
+關注
關注
3文章
4417瀏覽量
67504 -
代碼
+關注
關注
30文章
4968瀏覽量
73960
原文標題:開發者分享 | 如何在 IP 的 kernel module 里設置并使用 IP interrupt
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
網段隔離器解決IP沖突問題,實現跨網段通信
華為助力南非MTN在IP網絡領域實現突破
Vivado浮點數IP核的一些設置注意點
lwip如何實現運行中修改ip地址并使新的地址生效?
安防硬件設備中的防水防塵IP等級代表什么?IP66是什么水平
CNC的IP地址相同沖突如何解決?
【RK3568+PG2L50H開發板實驗例程】FPGA部分 | 紫光同創 IP core 的使用及添加
Altera FPGA 的PIO IP當中bidir和inout選項的區別
開疆智能Ethernet/IP轉Modbus網關連接變頻器配置案例
開疆智能Ethernet/IP轉Modbus網關連接西門子BW500積算儀配置案例
開疆智能Ethernet/IP轉Modbus網關連接MAG8000電池流量計配置案例
樹莓派“定居”完全指南:一鍵設置靜態IP,穩定又高效!
你咋知道怎么在IP的kernel module里設置并使用IP interrupt嗎
評論