串列埠驅動程式設計

2021-08-04 09:16:49 字數 2491 閱讀 9340

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

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

串列埠終端是使用計算機串列埠連線的終端裝置。linux把每個串列埠都看作是乙個字元裝置。這些串列埠所對應的裝置名稱是 /dev/ttysac0; /dev/ttysac1……

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

在linux系統中,計算機的輸出裝置通常被稱為控制台終端(console),這裡特指printk資訊輸出到的裝置。/dev/console 是乙個虛擬的裝置,它需要對映到真正的tty上,比如通過核心啟動引數 」 console=ttysac0 」就把console對映到了串列埠0。

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

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

tty架構分析:

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

初始化:

uart驅動程式結構:struct uart_driver

uart埠結構: struct uart_port

uart相關操作函式結構: struct uart_ops

uart狀態結構: struct uart_state

uart資訊結構: struct uart_info

開啟裝置:

傳送資料:

接收資料:

下面的兩個例子都是在ok6410開發板的串列埠驅動程式,詳細**在核心**linux-ok6410\drivers\tty\serial\samsung.c檔案中。

傳送資料中斷處理函式:

//串列埠傳送函式

static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)

//2、判斷迴圈緩衝是否為空或者串列埠驅動是否關閉,若是則取消傳送

if (uart_circ_empty(xmit) || uart_tx_stopped(port))

//3、若傳送緩衝不為空,且傳送數量小於256個,則迴圈傳送

while (!uart_circ_empty(xmit) && count-- > 0)//大於0

//4、如果傳送緩衝中的剩餘資料量小於256,則喚醒之前阻塞的傳送程序

if (uart_circ_chars_pending(xmit) < wakeup_chars)

uart_write_wakeup(port);

//5、如果傳送緩衝為空,關閉傳送使能

if (uart_circ_empty(xmit))

s3c24xx_serial_stop_tx(port);

out:

return irq_handled;

}

接收資料中斷處理函式:

//串列埠接收資料函式

static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id)

//10、將串列埠驅動接受到的資料送進線路規程中,匯入到 read-buf 中

tty_flip_buffer_push(tty);

out:

return irq_handled;

}

tty串列埠驅動程式設計

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

HAL驅動的串列埠程式設計陷阱

手上有塊nucleo stm32l053x板子,用來做串列埠實驗,看了下st的最新庫hal驅動,於是想用hal驅動來做串列埠。使用過程中發現只能傳送資料不能接收資料,用邏輯分析儀檢視rx,tx引角,都有資料,但就是收不到資料。使用stm32f103傳統驅動,一點問題沒有,改到hal怎麼就不行了呢?經...

串列埠驅動新增

檢視原理圖可知,當前開發板的串列埠鏈結在dio2 和dio3 引腳定義在cc2640r2 launchxl.h中,此處無需更改 串列埠引腳配置參考如下部分,rx被配置為下拉輸入,tx被配置為上拉輸出。在本例中我新建了乙個uart的使用者任務,大家可不糾結於此,後面會對當前的框架調整進行詳細說明。ua...