V210 UART TX 流程
1. 雖然V210的uart驅動是平臺總線設備驅動模型,但實際上他還是以字符設備驅動存在,那么分析他的發送流程,
? ? 首先找到他的file_operations的write函數
? ? drivers/char/tty_io.c
? ? ? ? ?tty_write(struct file *file, const char __user *buf,?size_t count, loff_t *ppos)
2.?drivers/serial/serial_core.c
? ? ? ??uart_write(struct tty_struct *tty, const unsigned char *buf, int count)
? ? ? ? ? ? ? ?uart_start(struct tty_struct *tty)
? ? ? ? ? ? ? ? ? ? ? ??__uart_start(struct tty_struct *tty)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??if (!uart_circ_empty(&state->xmit) && state->xmit.buf &&!tty->stopped && !tty->hw_stopped)
? ? ? ? ? ? ? ? ? ? ? ? ? ?port->ops->start_tx(port);
? ?對V210來說,uart0和uart1有流控,uart2和uart3沒有流控,所以,如果應用程序對uart3設置的流控,那么
tty->hw_stopped這個參數會被置1,應用層的數據傳到這里就停止了。
3. drivers/serial/samsung.c
? ? ?static void s3c24xx_serial_start_tx(struct uart_port *port)
? ? ?這個函數執行后,會調用發送中斷處理函數
? ? ?static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
? ? ?從打印的log看,發送中斷函數結束后,tty_write和uart_write才會返回
下面說一下log調試方法,因為uart2做為調試串口,因此,為了避免調試串口也打印log,可以在那些函數中,用
下面幾個辦法來區分
1. 對于tty_write函數來說,我們可以通過inode獲得設備文件的子設備號來區分
? ???int num = MINOR(inode->i_rdev);
2. 對于uart_write來說,我們可以通過uart_port數據結構的中斷號來區分
? ??if(port->irq != IRQ_S5P_UART_RX2)
? ? 為什么這么寫,從arch/arm/plat-s5p/dev_uart.c中可以看到4個串口的硬件資源結構體定義
? ??
? ? 另外,從drivers/serial/samsung.c里的s3c24xx_serial_init_port函數里,可以看到下面幾句
? ??res = platform_get_resource(platdev, IORESOURCE_MEM, 0);
? ??port->mapbase = res->start;
? ? port->membase = S3C_VA_UART + res->start - (S3C_PA_UART & 0xfff00000);
? ? ret = platform_get_irq(platdev, 0);
? ??port->irq = ret;
? ? ourport->rx_irq = ret;
? ? ourport->tx_irq = ret + 1;
? ? 這幾句就是在獲取uart硬件資源的內存資源和中斷資源,可以看到,platform_get_irq得到第一個中斷號資源,即
? ? 接收中斷,然后port->irq = ret, 即uart_port這個結構體的irq變量==IRQ_S5P_UART_RX2
? ? 然后s3c24xx_uart_port的rx_irq ==?IRQ_S5P_UART_RX2, tx_irq ==?IRQ_S5P_UART_TX2,因此可以通過判斷
? ? 中斷號來區分是哪個串口
3. 另外通過s3c24xx_uart_port結構體的channelnum也可以區分是哪個串口
? ? 在uart平臺總線設備驅動的probe函數(s3c24xx_serial_probe)可以看到以下賦值
? ??ourport->channelnum= dev->id
? ? 然后,從uart平臺總線設備里可以看到
? ? arch/arm/plat-samsung/dev-uart.c
? ??
? ?因此可以知道channelnum實際就是0-3,分別對應了4個uart
總結
以上是生活随笔為你收集整理的V210 UART TX 流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一次办信用卡能上门服务吗
- 下一篇: 关于std:auto_ptr