tty裝置驅動註冊簡述

2021-08-13 23:02:15 字數 2374 閱讀 7279

注意 :因為 tty_driver核心層 和 uart_driver 裝置層 的註冊是綁在一起的, 

所以把 核心層和裝置層一起分析

裝置驅動層的註冊其實一共只有三步驟:

1 構造 uart裝置相關驅動結構體

2 uart_register_driver//同時註冊了tty_driver

3 uart_add_one_port

/kenrel/drivers/tty/serial ***_uart.c

1

struct ***_port     

static struct uart_driver ***_uart_driver

static struct uart_ops wk2***_pops = ;

2//其實 tty_driver 就是 uart_driver 的另乙個封裝

int uart_register_driver(struct uart_driver *drv)

//tty層:註冊 driver->tty_driver */

retval = tty_register_driver(normal);

}

2.1

//為 tty_driver 建立字元裝置、掛載tty_driver到鍊錶、建立proc下的節點、

//此處註冊了tty_driver驅動(新增鍊錶)、但是還沒有對接任何物理埠(uart_port)、

//也沒有建立 /dev/ 下的任何裝置節點;

int tty_register_driver(struct tty_driver *driver)

} else

if (error < 0)

goto err;

//新增乙個自字元裝置,file_operations和裝置號關聯起來,

if (driver->flags & tty_driver_dynamic_alloc)

//將該driver->tty_drivers 新增到 全域性tty_drivers鍊錶

mutex_lock(&tty_mutex);

list_add(&driver->tty_drivers, &tty_drivers);

mutex_unlock(&tty_mutex);

if (!(driver->flags & tty_driver_dynamic_dev)) }}

/* proc 檔案系統註冊driver */

proc_tty_register_driver(driver);

driver->flags |= tty_driver_installed;

return 0;

.....

}

3

//為 uart_driver(tty_driver) 新增埠、

//最終上層可以通過 ->tty_driver->uart_driver->uart_port->uart_ops 操作底層

int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)

....

}

2.1 :

uart_register_driver

}

2.2:

uart_add_one_port

疑問:通過研究**發現 tty_driver 和 uart_driver 兩個結構體的成員很相似,並且在

註冊 uart_driver 的時候,會將 uart_driver 的很多引數傳遞賦值給 tty_driver

的同名引數,這兩個結構體至今有啥關係嗎?

答案:前面說到,tty作為終端裝置,按照ldd3的說法,tty型別的終端裝置分為三種型別

串列埠終端、虛擬終端、控制台終端;tty_driver->type 引數就是終端驅動型別的標誌

type 由 uart_driver->type 傳入。所以可以理解為 tty_driver代表的是 串列埠終端

uart_driver 、虛擬終端uart_driver 、 控制台終端uart_driver 三種型別終端驅動

的乙個抽象,這個抽象是給上層用的,用來區分出底層的裝置驅動是哪一種型別的驅動

小結:在註冊裝置驅動 uart_driver 的同時 向上註冊由 uart_driver 抽象出來的 tty_driver 驅動

向下 建立 uart_state 、 並且繫結 uart_port 到 uart_driver->uart_state;這樣就將底層裝置

驅動和核心層聯絡起來了;

tty系統框架簡述

1 tty概念 在linux系統中,終端是一種字元型裝置,它包括多種型別,通常使用tty來簡稱各種型別的終端裝置2 tty分類 在linux系統中,tty終端裝置分為以下三種 2.1 串列埠終端 dev ttys 2.2 虛擬終端 dev tty 2.3 控制台終端 dev console 3 tt...

linux匯流排,裝置,驅動註冊

遵守udev裝置模型,首先註冊匯流排,然後是匯流排裝置,之後是具體裝置註冊,註冊完之後就可以在sys bus相應的目錄下面找到掛載這個匯流排上的裝置,最後是註冊驅動,驅動會查詢匯流排上的裝置進行繫結。比如 自定義乙個裝置是my vir device,使用匯流排是vir bus。1.註冊匯流排型別 s...

Linux核心裝置驅動註冊

platform device與platform driver 引入devicetree後改變 platform device會由kernel自動展開,呼叫of platform bus probe null,of bus ids,null 即可自動展開所有的platform device 引入de...