о функции записи в драйвере устройства Linux - PullRequest
2 голосов
/ 07 декабря 2010

Я написал драйвер устройства Linux и реализовал функцию device_write следующим образом:

static int device_write(struct file* file,const char* buff,int count, loff * offp)
{
//some implementation
printk("write value %x to card\n",value);
//some implementation
}

Я также реализовал функцию device_read и у меня есть printk для печати некоторой информации в нем.Проблема в том, что когда я использую read (fd, buff, 1) в прикладной программе, отображается результат printk, но когда я использую write (fd, buff, 1), результат printk отсутствует. Функция device_write может не вызываться.Что может вызвать эту проблему?Кто-нибудь сталкивался с такой проблемой раньше?Кто-нибудь может мне помочь и подсказать?

1 Ответ

3 голосов
/ 07 декабря 2010

Это только половина ответа, но он слишком велик для комментария.

Есть ли другие действия в вашей device_write функции?

Сделайте очень простой printk в верхней части функции device_write и посмотрите, печатает ли она. Что-то вроде

static int device_write(struct file* file,const char* buff,int count, loff * offp)
{
    printk("%s: %s\n", __FILE__, __func__);

, который выполняется независимо от того, что еще происходит в функции. Если это напечатано, то вы можете сузить, куда идти оттуда.

Если это не сработает, убедитесь, что вы фактически устанавливаете указатель на функцию в структуре устройства. Или, возможно, ваша ошибка в тестовом приложении. Вы уверены, что открыли устройство с правами на запись? Это было бы простой ошибкой, если вы скопировали код из программы, изначально написанной просто для проверки функциональности чтения.

...