Обработка TTY устройствами proc и sysfs

Предыдущая  Содержание  Следующая V*D*V

Ядро 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. Это, возможно, измениться в будущих версиях ядра.

Предыдущая  Содержание  Следующая