18.5. TTY 設(shè)備的 proc 和 sysfs 處理

2018-02-24 15:50 更新

18.5.?TTY 設(shè)備的 proc 和 sysfs 處理

tty 核心提供一個非常容易的方式給任何 tty 驅(qū)動來維護一個文件在 /proc/tty/driver 目錄中. 如果驅(qū)動定義 read_proc 或者 write_proc 函數(shù), 這個文件被創(chuàng)建. 接著, 任何在這個文件上的讀或?qū)懻{(diào)用被發(fā)送給這個驅(qū)動. 這些函數(shù)的格式只象標準的 /proc 文件處理函數(shù).

作為一個例子, 由一個簡單的 read_proc tty 回調(diào)實現(xiàn), 只是打印出當前注冊的端口號:


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 目錄和設(shè)備創(chuàng)建, 當 tty 驅(qū)動被注冊時, 或者當單個 tty 設(shè)備被創(chuàng)建時, 依賴在 struct tty_driver 中的 TTY_DRIVER_NO_DEVFS 標志. 單個目錄一直包含 dev 文件, 它允許用戶空間工具來決定分配給設(shè)備的主次號. 它還包含一個 device 和 driver 符號連接, 如果一個指向有效的 struct device 的指針被傳遞給讀 tty_register_device 的調(diào)用. 除了這 3 個文件, 對單個 tty 驅(qū)動不可能在這個位置創(chuàng)建新的 sysfs 文件. 這個會可能在將來的內(nèi)核發(fā)行中改變.

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號