говорить с устройством в Linux. Функция ЗАПИСЬ - PullRequest
1 голос
/ 17 февраля 2012

Я пытаюсь написать простой драйвер устройства и использовать функции 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 Ответ

2 голосов
/ 17 февраля 2012

Было бы полезно узнать, что вы пробовали, но это не сработало.

Одна вещь, о которой нужно знать, и не обязательно интуитивно понятная, это то, что функция записи вашего драйвера должна копировать буфер записи из пространства вызывающего в пространство ядра. Пример этого можно увидеть в учебнике на 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 - это пространство, выделенное в вашем драйвере.

...