串列埠驅動流程分析

2021-07-23 08:24:52 字數 1403 閱讀 7713

tty驅動程式架構

tty概念解析

tty架構分析

##1.tty概念解析

在linux系統中,終端是一類字元型裝置,它包括多種型別,通常使用tty來簡稱各種型別的終端裝置。

1.1串列埠終端(/dev/ttys*)

串列埠終端是使用計算機串列埠連線的終端裝置。linux把每個串列埠都看作是乙個字元裝置。這些序列

埠所對應的裝置名稱是/dev/ttysac0;/dev/ttysac1……

1.2控制台終端(/dev/console)

在linux系統中,計算機的輸出裝置通常被稱為控制台終端(console),這裡特指printk資訊輸出到的裝置。

/dev/console是乙個虛擬的裝置,它需要對映到真正的tty上,比如通過核心啟動引數」console=ttysac0」就把console對映到了串列埠0

1.3虛擬終端(/dev/tty*)

當使用者登入時,使用的是虛擬終端。使用ctcl+alt+[f1—f6]組合鍵時,我們就可以切換到tty1、tty2、tty3等上面去。tty1–tty6等稱為虛擬終端,而tty0則是當前所使用虛擬終端的乙個別名

linux tty子系統包含:tty核心,tty線路規程和tty驅動。tty核心是對整個tty裝置的抽象,對使用者提供統一的介面,tty線路規程是對傳輸資料的格式化,tty驅動則是面向tty裝置的硬體驅動。

硬體流程分為非自動和自動的,linux系統中支援自動流控。

static irqreturn_t

s3c24xx_serial_rx_chars(int irq, void *dev_id)

tty_flip_buffer_push(tty);//把臨時緩衝的資料送入tty線路規程

return irq_handled;

out:

return irq_handled;

}static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)

//判斷傳送緩衝或者驅動設定為停止傳送的狀態,則取消傳送

if(uart_circ_empty(xmit)||uart_tx_stopped(port))//判斷迴圈緩衝是否為空

while(!uart_circ_empty(xmit)&&((count--)>0))

if(uart_circ_chars_pending(xmit)<256)//如果傳送緩衝的剩餘量小於256,則關閉之前阻塞的傳送程序

if(uart_circ_empty(xmit)//如果傳送緩衝為空,則關閉串列埠使能

s3c24xx_serial_stop_tx(port);

out:

return irq_handled;

}

Linux串列埠驅動分析read

串列埠read函式分析 當應用程式呼叫read系統呼叫時,會呼叫tty fops中的tty read 接下來分析tty read函式 其中最重要的就是ld ops read tty,file,buf,count 也就是呼叫線路規程中read函式 static ssize t tty read str...

RT Thread串列埠驅動分析 一

筆記 2016年12月9日10 19 00 串列埠配置在drivers rt hw uart.c rt hw uart init rt hw serial register 這裡可以設定串列埠的工作模式,中斷接收還有dma傳送.具體設定在rt serial init 函式裡 分析下串列埠初始化 是怎...

串列埠驅動分析 初始化

串列埠驅動分析 初始化 1.串列埠驅動程式結構 linux tq2440 drivers serial samsung.c 2.串口驅動中的重要資料結構 在之前一篇中的tty write,位於 static const struct file operations tty fops tty ldis...