2012-03-23 18 views

回答

1

不應該有任何問題快速連續多次調用它。如果由競爭處理器完成,start_tx()port->lock上執行自旋鎖。如果按順序完成,特定於uart的驅動程序將檢查它是否已經啓動。 (來自linux-2.6.27.8/drivers/mmc/card/sdio_uart.c):

if (!(port->ier & UART_IER_THRI)) { 
      port->ier |= UART_IER_THRI; 
      sdio_out(port, UART_IER, port->ier); 
    } 

從更高級別的角度來看,請參閱串行芯檢查如果發射機已經啓動,以及用於啓動它的適當性(linux-2.6.27.8/drivers/serial/serial_core.c):

static void __uart_start(struct tty_struct *tty) 
{ 
     struct uart_state *state = tty->driver_data; 
     struct uart_port *port = state->port; 

     if (!uart_circ_empty(&state->info->xmit) && state->info->xmit.buf && 
      !tty->stopped && !tty->hw_stopped) 
       port->ops->start_tx(port); 
} 
0

我在這個領域工作在較舊的內核上,2.6.10。在用戶空間假設'寫'的情況下,我也看到了對驅動程序的start_tx函數的2次(或更多次)調用。通過stty,我關閉了tty層中的任何'opost'。之後,我看到每個寫入只有一個start_tx。我懷疑行紀律層正在添加對start_tx的調用。

我知道的軼事,但認爲它可能有幫助。

相關問題