Обработка TTY устройствами proc и sysfs |
Предыдущая Содержание Следующая |
Ядро tty предоставляет очень простой способ для любого tty драйвера обслуживать файл в каталоге /proc/tty/driver. Этот файл создаётся, если драйвер определяет функции read_proc или write_proc. Затем любой вызов чтения или записи этого файла отправляется в драйвер. Форматы эти функции точно такие же, у как стандартных функций обработки файлов в /proc.
В качестве примера, простая реализация обратного вызова tty read_proc, который просто выводит число портов, зарегистрированных в настоящее время:
static int tiny_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) { struct tiny_serial *tiny; off_t begin = 0; int length = 0; int i;
length += sprintf(page, "tinyserinfo:1.0 driver:%s\n", DRIVER_VERSION); for (i = 0; i < TINY_TTY_MINORS && length < PAGE_SIZE; ++i) { tiny = tiny_table[i]; if (tiny == NULL) continue;
length += sprintf(page+length, "%d\n", i); if ((length + begin) > (off + count)) goto done; if ((length + begin) < off) { begin += length; length = 0; } } *eof = 1; done: if (off >= (length + begin)) return 0; *start = page + (off-begin); return (count < begin+length-off) ? count : begin + length-off; }
Ядро tty обрабатывает каталог sysfs и создание устройства, когда регистрируется tty драйвер, или когда созданы отдельные tty устройства, в зависимости от флага TTY_DRIVER_NO_DEVFS в struct tty_driver. Отдельный каталог всегда содержит файл dev, который позволяет инструментам пользовательского пространства определять старший и младший номер, присвоенный устройству. Он также содержит символическую ссылку устройства и драйвера, если в вызове ty_register_device передан указатель на действительную struct device. Помимо этих трёх файлов, отдельные tty драйверы не могут создать в этом месте новые файлы в sysfs. Это, возможно, измениться в будущих версиях ядра. |
Предыдущая Содержание Следующая |