本帖最后由 jenny 于 2019-8-10 17:37 编辑
fpga工程自定义了ip,有一个PL中断连接到PS。PL dts见下面:
/ {
amba_pl: amba_pl {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
ranges ;
reader_zhongrf_0: reader_zhongrf@43c00000 {
compatible = "xlnx,reader-zhongrf-1.0";
interrupt-names = "reader_int";
interrupt-parent = <&intc>;
interrupts = <0 29 4>;
reg = <0x43c00000 0x10000>;
xlnx,s00-axi-addr-width = <0x8>;
xlnx,s00-axi-data-width = <0x20>;
};
};
};
然后,我在linux驱动中申请中断资源,uart打印出来dev request irq failed!
我的驱动部分见下面:
// probe探测函数,在驱动和设备匹配后执行这个函数
static int reader_probe(struct platform_device *pdev)
{
int ret;
struct resource *res; printk("match ok!");
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);//获取到资源,资源的定义在reader_dev.c文件中
reader_base = ioremap(res->start, res->end - res->start + 1);//获取到AXI-GPIO的地址空间,实现内存映射
printk("reader_probe, found reader\n");
major = register_chrdev(0, "myreader", &reader_fops);//注册设备
cls = class_create(THIS_MODULE, "myreader");
gpio_device = device_create(cls,NULL,MKDEV(major, 0),NULL,"reader");//mknod /dev/hello
if(IS_ERR(gpio_device)){
class_destroy(cls);
unregister_chrdev(major,"myreader");
return -EBUSY;
}
ret = request_irq(61, reader_irq_handler, IRQF_TRIGGER_HIGH|IRQF_SHARED, "reader_int", gpio_device);//注册一个外部中断
if(ret)
{
printk("dev request irq failed!\n");
return -1;
}
else
{
printk("dev request irq success!\n");
}
return 0;
}
请大牛们帮忙看看是我哪里写得有问题了?
|