2010-12-07 3 views
1

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

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 отображается, но когда я использую запись (fd, buff, 1), результат printk отсутствует. Функция device_write не может быть вызвана . Что может вызвать эту проблему? Кто-нибудь сталкивался с такой проблемой раньше? Может ли кто-нибудь дать мне какую-то помощь и предложение?

+0

http://freshmeat.net/projects/dtrace-for-linux? – nmichaels 2010-12-07 17:40:43

+0

Нам нужно гораздо больше информации. Что такое «ценность»? Почему вы думаете, что пишите не называть? У вас в этом вопросе нет ничего подобного, этот код даже не компилируется. – Falmarri 2010-12-07 17:40:54

ответ

3

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

Другие действия в вашей функции 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__); 

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

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

Смежные вопросы