1

我将嵌入式 Linux 用于 NIOS II 处理器和设备树。GPIO 功能提供了一次读取和或写入单个位的能力。我有一些固件和 PIOS,我想通过一次设置或读取所有 32 位来原子地读取或写入。似乎会有一个通用设备驱动程序,如果设备树被赋予适当的兼容性,那么将存在一个允许打开设备然后读取和写入设备的驱动程序。我已经搜索了此功能,但没有找到驱动程序。一个存在于分支中,但被 Linus 删除。

我的问题是什么是 Linux 设备树方式来读取和写入通用 32 位寄存器/pio 的设备?

4

1 回答 1

1

你的答案是 SCULL

字符设备驱动程序

您必须编写带有文件操作的字符设备驱动程序来打开和关闭设备。读取、写入、ioctl 和复制设备的内容。

static struct file_operations query_fops =
{
    .owner = THIS_MODULE,
    .open = my_open,
    .release = my_close,
    .ioctl = my_ioctl
};

使用 iomem 映射地址,并使用 rawread 和 rawwrite 直接读取和写入该地址。如下创建并注册一个设备,然后可以从用户空间访问它:

register_chrdev (0, DEVICE_NAME, & query_fops);

device_create (dev_class, NULL, MKDEV (dev_major, 0), NULL, DEVICE_NAME);

然后从用户空间访问它,如下所示:

 fd = open("/dev/mydevice", O_RDWR);

然后您可以使用 ioctl 从用户空间使用 GPIO:

ioctl(fd, SET_STATE);
于 2013-05-29T16:42:15.157 回答