使用设备树中的信息注册平台设备

时间:2016-08-30 15:21:08

标签: linux-kernel linux-device-driver embedded-linux kernel-module xilinx

我使用Petalinux作为Xilinx Zynq应用程序,我是内核驱动程序开发的新手。

我为AXI FIFO接口的平台驱动程序创建了一个内核模块。似乎可以使用.of_match_table从设备树中识别设备,因为我可以看到cat /proc/iomem保留的正确内存空间。

如果我搜索驱动程序名称xxx,我会

./lib/modules/4.4.0-xilinx/extra/xxx.ko
./sys/bus/platform/drivers/xxx
./sys/module/xxx
./sys/module/xxx/drivers/platform:xxx

我在/sys/bus/platform/devices/43c00000.axi_xxxx下找到了该设备但仍无法访问该设备或在/dev/下查看该设备。

  • 如何注册设备以便我可以从用户空间应用程序打开它?

  • 我是否需要为其分配内存,然后使用platform_device_register(pdev)注册新设备?

由于

1 个答案:

答案 0 :(得分:0)

您需要在框架中注册您的设备才能创建设备文件。

我建议在你的案子中注册miscdevice。它只是注册一个字符设备。

static struct miscdevice miscdev;

static ssize_t myaxi_read(struct file *file, char __user *buf,
                 size_t sz, loff_t *ppos)
{
    // Do something

}

static ssize_t myaxi_write(struct file *file, const char __user *buf,
                  size_t sz, loff_t *ppos)
{
    // Do something
}

static const struct file_operations myaxi_fops = {
    .owner = THIS_MODULE,
    .write = myaxi_write,
    .read = myaxi_read,
};

在您的探测中:

miscdev.minor = MISC_DYNAMIC_MINOR;
miscdev.name = "myaxi";
miscdev.fops = &myaxi_fops;
misc_register(&miscdev);

您可以在http://free-electrons.com/doc/training/linux-kernel/linux-kernel-slides.pdf

上阅读有关Linux内核驱动程序开发和设备模型的更多信息