有时我们需要为官方 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 按钮可以看到中断服务程序的打印信息。


审核编辑 :李倩
-
IP
+关注
关注
5文章
1849浏览量
154898 -
函数
+关注
关注
3文章
4406浏览量
66819 -
代码
+关注
关注
30文章
4941浏览量
73127
原文标题:开发者分享 | 如何在 IP 的 kernel module 里设置并使用 IP interrupt
文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
网段隔离器解决IP冲突问题,实现跨网段通信
lwip如何实现运行中修改ip地址并使新的地址生效?
CNC的IP地址相同冲突如何解决?
Altera FPGA 的PIO IP当中bidir和inout选项的区别
开疆智能Ethernet/IP转Modbus网关连接变频器配置案例
开疆智能Ethernet/IP转Modbus网关连接西门子BW500积算仪配置案例
开疆智能Ethernet/IP转Modbus网关连接MAG8000电池流量计配置案例
树莓派“定居”完全指南:一键设置静态IP,稳定又高效!
sdwan组网需要固定ip吗?
新加坡共享主机怎么设置ip
如何在Linux系统上设置站群服务器IP地址
无需修改设备IP实现跨网段访问的解决方案

如何在IP的kernel module里设置并使用IP interrupt
评论