Linux的TTY驅動分析

2021-07-09 19:07:21 字數 1646 閱讀 2410

本文針對的核心為友善提供的linux-3.0.31版本,從linux驅動模型的角度分析了uart驅動。

一、首先分析linux核心怎麼啟動並使用uart驅動的。

tiny4412首先為uart註冊了乙個platform驅動,通過註冊相應的platform裝置來觸發polatform匯流排的probe函式,在probe函式裡根據相關配置資訊註冊

tty裝置,

uart

的tty

驅動完成後就可以使用

uart

了。

二、接下來我們首先分析uart的tty驅動部分

其原始碼路徑為:

「linux-3.0.31\drivers\tty\serial\samsung.c」

沒錯這就是三星提供的通用串列埠tty驅動核心模組。該模組的入口函式為「s3c24xx_serial_modinit」,該入口函式只做了一件事,那就是呼叫「uart_register_driver」函式來註冊串列埠tty驅動。

然後我們再看「s3c24xx_serial_probe」這個函式,該函式為platform匯流排探測函式,當platform匯流排上掛載了uart的platform裝置和驅動時就會呼叫,該函式做的主要工作是根據「platform_device」的配置及資源資訊註冊tty裝置。

到了這裡uart有了「s3c24xx_serial_modinit」中註冊的「tty驅動」,有了「s3c24xx_serial_probe」中註冊的「tty裝置」,這樣乙個完整的tty裝置驅動就完成了。其操作函式呼叫關係如下圖所示:

三、然後我們再看uart的platform匯流排驅動

其原始碼路徑比較分散:

「linux-3.0.31\drivers\tty\serial\s3c2410.c」(註冊串列埠的platform驅動)

「linux-3.0.31\arch\arm\plat-s3c24xx\devs.c」(串列埠platform裝置資源)

「linux-3.0.31\arch\arm\plat-samsung\dev-uarts.c」(串列埠platform裝置)

「linux-3.0.31\arch\arm\mach-exynos\mach-tiny4412.c」(註冊串列埠platform裝置)

其在「s3c2410.c」中註冊串列埠platform驅動,在「mach-tiny4412.c」中註冊串列埠platform裝置,接下來我們主要看串列埠platform裝置是怎麼註冊的。

在「mach-tiny4412.c」原始碼中,有乙個「smdk4x12_map_io」這個函式,串列埠platform裝置就是通過這個函式進去註冊的。

所以針對不同的cpu做串列埠驅動移植,還需要修改mach-tiny4412.c中的「smdk4x12_uartcfgs」及devs.c中的「s3c2410_uart_resources」。

tty串列埠驅動程式設計

在linux系統中,終端是一類字元型裝置,它包括多種型別,通常使用tty來簡稱各種型別的終端裝置。1 串列埠中斷 dev ttys 2 控制台終端 dev console 3 虛擬終端 dev tty 控制台 供核心使用的終端為控制台。控制台在linux啟動時,通過命令console 指定,如果沒有...

tty裝置驅動註冊簡述

注意 因為 tty driver核心層 和 uart driver 裝置層 的註冊是綁在一起的,所以把 核心層和裝置層一起分析 裝置驅動層的註冊其實一共只有三步驟 1 構造 uart裝置相關驅動結構體 2 uart register driver 同時註冊了tty driver 3 uart add...

Linux串列埠驅動程式 1 tty驅動程式架構

1.tty概念分析 控制台終端 dev console 虛擬終端 dev tty 在linux核心中printk函式處理是交給控制台終端的,控制台終端又把它對映到串列埠終端或者螢幕終端上。而虛擬終端更多是在應用程式中使用。2.tty架構解析 3.回溯串列埠資料傳送 static void s3c24...