LINUX.ORG.RU

помогите с СОМ из ядра


0

0

Помогите пожалуйста. Задача - данные получаемые модулем перепихивать в СОМ порт а получаемые из СОМ пропихивать в модуль. При открытии порта инициализирую структуру file, оттуда беру write. Если всё делать в пределах одной функции - работает. Вызываю из другой - получаю сообщение "unknown interface: No such device", хотя структура не пустая и write из неё вызывается. Куда всё девается не могу понять. Похоже что-то не так объявляю. Вот пример кода: #define MODULE #include <linux/module.h> #include <asm/uaccess.h> #include <linux/mm.h> #include <asm/segment.h> ...... struct file *f; static void ttys_write(const char *buf, size_t lenbuf) { struct file *fw; fw = f; if(fw != NULL) { fw->f_op->write(fw, buf, lenbuf, &fw->f_pos); print_string("^tstnd: ===ttys_write===\n"); } } .....ВСЁ РАБОТАЕТ: int init_module (void) { ....... set_fs(KERNEL_DS); f=filp_open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY, 0666); ttys_write("===OPEN_TTYS0===", 16); return 0; } ......НИЧЕГО НЕ РАБОТАЕТ: void cleanup_module (void) { /*mm_segment_t fs=get_fs(); struct file *fe; fe = f; if(fe != NULL) { */ ttys_write("===CLOSE_TTYS0===", 17); /* filp_close(fe,0); ..... } set_fs(fs);*/ ...... }

Ответ на: Re: помогите с СОМ из ядра от SatanClaus

Re: помогите с СОМ из ядра

Уже разобрался что не так: http://www.linux.it/~rubini/docs/ksys/ksys.html А вообще дело такое: .... #include <linux/mm.h> #include <asm/segment.h> .... struct file *f;

При инициализации модуля открываем файл и получаем его структуру: mm_segment_t fs=get_fs(); set_fs(KERNEL_DS); f=filp_open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY, 0666); set_fs(fs);

Затем в модулях через эту структуру пишем как обычно (читать пока не пробовал, но думаю тоже как обычно): mm_segment_t fs=get_fs(); set_fs(KERNEL_DS); if(f != NULL) { f->f_op->write(f, mydata->data, mydata->len, &f->f_pos); f->f_op->write(f, "===PACK_END===", 14, &f->f_pos); } set_fs(fs); При выгрузке - всё закрываем: mm_segment_t fs=get_fs(); set_fs(KERNEL_DS); filp_close(f,0); set_fs(fs); У меня всё это работает на ядре 2.6.8.1-mdk.

С рождеством.

timigor ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.