如何開發linux驅動程式
一般情況下都會有現成的驅動程式,不需要從零開始開發驅動程式。所以linux驅動開發主要分為兩個步驟:1.讀得懂驅動程式;2.寫的了核心功能。
傳送中斷處理程式
傳送中斷處理函式在/drivers/serial/samsung.c的s3c24xx_serial_tx_chars
迴圈緩衝
struct circ_buf
//判斷資料傳送
struct circ_buf *xmit = &port->state->xmit;
if(uart_circ_empty(xmit) || uart_tx_stopped(port))
//迴圈傳送資料
int count = 256
;
while(!uart_circ_empty(xmit) && (count-- > 0))
//寫入傳送資料
wr_regb(port, s3c2410_utxh, xmit->buf[xmit->tail]);
//移動緩衝位置
xmit->tail = (xmit->tail + 1) & (uart_xmit_size - 1); //
迴圈移動尾部
//修改傳送計數
port->icount.tx++;
}//喚醒阻塞程序
if(uart_circ_chars_pending(xmit) < 256)
//關閉傳送使能
if(uart_circ_empty(xmit))
return irq_handled; //
中斷處理完成
}接收中斷處理程式
接收中斷處理函式在/drivers/serial/samsung.c的s3c24xx_serial_rx_chars
static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id)//讀取錯誤狀態
unsigned int
uerstat;
uerstat =rd_regl(port, s3c2410_uerstat);
//讀取接收資料
unsigned int
ch;
ch =rd_regb(port, s3c2410_urxh);
//寫入接收緩衝
uart_insert_char(port, uerstat, s3c2410_uerstat_overrun, ch, tty_normal);
}//寫入線路規程
struct tty_struct *tty = port->state->port.tty;
tty_flip_buffer_push(tty);
return irq_handled; //
中斷處理完成
}
國嵌攻略 130 串列埠驅動分析 傳送
tty資料傳送流程 tty子系統 1.file operation中找到tty write 2.tty write找到線路規程中的n tty write 3.n tty write找到uart ops中的uart write 串列埠驅動 4.uart write找到s3c24xx serial st...
4 串列埠驅動
1 初始化gpio的模式和速度 2 配置中斷優先順序分組 3 串列埠初始化 4 串列埠服務函式編寫 我是分割線 一 gpio初始化 gpio埠設定 gpio inittypedef gpio initstructure rcc apb2periphclockcmd rcc apb2periph gp...
Linux串列埠驅動程式 6 串列埠驅動實現
在linux驅動開發中,一般都不會從0開始寫,我們做的更多的是移植和修改,有時候還需要對驅動程式進行優化。當然具備移植 修改驅動能力的基礎是能夠讀懂驅動程式,同時需要對這個驅動程式的核心功能非常了解。接下來開始編寫傳送中斷處理程式和接收中斷處理程式的 1.傳送中斷處理程式的設計 傳送中斷處理程式 s...