使用设备树中的信息注册平台设备
Registering Platform Device with info from Device Tree
我正在将 Petalinux 用于 Xilinx Zynq 应用程序,我是内核驱动程序开发的新手。
我为 AXI FIFO 接口的平台驱动程序创建了一个内核模块。这些设备似乎可以使用 .of_match_table 从设备树中识别出来,因为我可以看到使用 cat /proc/iomem
保留的正确内存 space .
如果我搜索驱动程序名称 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/
下仍然无法访问或查看它。
如何注册设备以便我可以从我的用户 space 应用程序打开它?。
是否需要为其分配内存,然后使用platform_device_register(pdev)
注册新设备?
谢谢
您需要在框架中注册您的设备才能创建设备文件。
我建议在您的案例中注册一个 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 内核驱动程序开发和设备模型的更多信息
我正在将 Petalinux 用于 Xilinx Zynq 应用程序,我是内核驱动程序开发的新手。
我为 AXI FIFO 接口的平台驱动程序创建了一个内核模块。这些设备似乎可以使用 .of_match_table 从设备树中识别出来,因为我可以看到使用 cat /proc/iomem
保留的正确内存 space .
如果我搜索驱动程序名称 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/
下仍然无法访问或查看它。
如何注册设备以便我可以从我的用户 space 应用程序打开它?。
是否需要为其分配内存,然后使用
platform_device_register(pdev)
注册新设备?
谢谢
您需要在框架中注册您的设备才能创建设备文件。
我建议在您的案例中注册一个 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 内核驱动程序开发和设备模型的更多信息