在linux中与设备交谈。 WRITE功能

时间:2012-02-17 12:19:59

标签: c linux linux-kernel device-driver

我正在尝试编写一个简单的设备驱动程序,并使用我已经定义的 Dev_Read() Dev_Write()函数。 我的驱动程序注册了一个绑定到的字符设备 以这种方式给出主要数字

# mknod /dev/mydev c 250 0

然后,从我的用户程序中我以这种方式打开设备

int fd;
if ((fd = open("/dev/mydev", O_RDWR)) < 0)
{
  perror("open /dev/mydev");
  exit(EXIT_FAILURE);
}

在我调用 Read()函数

之后
int read_bytes = read (fd, buffer, 1);

并成功获取内核空间信息,我的 Dev_Read 功能正常工作。 我的问题是我不明白如何实现我的 Dev_Write 功能。 如何在我的文件中编写一些内容,以查看 Dev_Write 功能是否有效? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

知道你尝试过哪些不起作用会有所帮助。

要注意并且不一定直观的一点是,驱动程序的写入函数必须将写缓冲区从调用者的空间复制到内核空间。这方面的一个例子可以在http://www.freesoftwaremagazine.com/articles/drivers_linux -

的教程中看到
ssize_t memory_write( struct file *filp, char *buf,
                      size_t count, loff_t *f_pos) {

  char *tmp;

  tmp=buf+count-1;
  copy_from_user(memory_buffer,tmp,1);
  return 1;
}

其中memory_buffer是您在驱动程序中分配的空间。