W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
tty 核心提供一個(gè)非常容易的方式給任何 tty 驅(qū)動(dòng)來維護(hù)一個(gè)文件在 /proc/tty/driver 目錄中. 如果驅(qū)動(dòng)定義 read_proc 或者 write_proc 函數(shù), 這個(gè)文件被創(chuàng)建. 接著, 任何在這個(gè)文件上的讀或?qū)懻{(diào)用被發(fā)送給這個(gè)驅(qū)動(dòng). 這些函數(shù)的格式只象標(biāo)準(zhǔn)的 /proc 文件處理函數(shù).
作為一個(gè)例子, 由一個(gè)簡單的 read_proc tty 回調(diào)實(shí)現(xiàn), 只是打印出當(dāng)前注冊的端口號(hào):
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)建, 當(dāng) tty 驅(qū)動(dòng)被注冊時(shí), 或者當(dāng)單個(gè) tty 設(shè)備被創(chuàng)建時(shí), 依賴在 struct tty_driver 中的 TTY_DRIVER_NO_DEVFS 標(biāo)志. 單個(gè)目錄一直包含 dev 文件, 它允許用戶空間工具來決定分配給設(shè)備的主次號(hào). 它還包含一個(gè) device 和 driver 符號(hào)連接, 如果一個(gè)指向有效的 struct device 的指針被傳遞給讀 tty_register_device 的調(diào)用. 除了這 3 個(gè)文件, 對單個(gè) tty 驅(qū)動(dòng)不可能在這個(gè)位置創(chuàng)建新的 sysfs 文件. 這個(gè)會(huì)可能在將來的內(nèi)核發(fā)行中改變.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: