Linux和读写通用32位寄存器

时间:2013-05-29 16:09:39

标签: linux-device-driver

我使用嵌入式Linux作为NIOS II处理器和设备树。 GPIO功能提供一次读取或写入一个位的功能。我有一些固件和PIOS,我想通过一次设置或读取所有32位原子读取或写入。似乎会有一个通用设备驱动程序,如果设备树具有适当的兼容性,则会存在允许打开设备然后读取和写入设备的驱动程序。我搜索了这个功能,但没有找到驱动程序。一个存在于分支机构但被Linus删除。

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

1 个答案:

答案 0 :(得分:1)

你的回答是SCULL

Character Device Drivers

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

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);