新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > linux設備模型之uart驅動架構分析

        linux設備模型之uart驅動架構分析

        作者: 時間:2016-10-08 來源:網絡 收藏

        circ = state->info->xmit;

        if (!circ->buf)

        return 0;

        spin_lock_irqsave(port->lock, flags);

        while (1) {

        c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE);

        if (count c)

        c = count;

        if (c = 0)

        break;

        memcpy(circ->buf + circ->head, buf, c);

        circ->head = (circ->head + c) (UART_XMIT_SIZE - 1);

        buf += c;

        count -= c;

        ret += c;

        }

        spin_unlock_irqrestore(port->lock, flags);

        uart_start(tty);

        return ret;

        }

        Uart_start()代碼如下:

        static void uart_start(struct tty_struct *tty)

        {

        struct uart_state *state = tty->driver_data;

        struct uart_port *port = state->port;

        unsigned long flags;

        spin_lock_irqsave(port->lock, flags);

        __uart_start(tty);

        spin_unlock_irqrestore(port->lock, flags);

        }

        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);

        }

        顯然,對于write操作而言,它就是將數據copy到環形緩存區。然后調用port->ops->start_tx()將數據寫到硬件寄存器。

        八:Read操作

        Uart的read操作同Tty的read操作相同,即都是調用ldsic->read()讀取read_buf中的內容。有對這部份內容不太清楚的,參閱《 linux設備模型之tty驅動架構》.

        九:小結

        本小節是分析serial驅動的基礎。在理解了tty驅動架構之后,再來理解uart驅動架構應該不是很難。隨著我們在linux設備驅動分析的深入,越來越深刻的體會到,linux的設備驅動架構很多都是相通的。只要深刻理解了一種驅動架構。舉一反三。也就很容易分析出其它架構的驅動了。


        上一頁 1 2 3 4 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 且末县| 镇雄县| 九龙城区| 竹山县| 定远县| 东城区| 沙河市| 独山县| 于都县| 化德县| 蒲城县| 德兴市| 繁峙县| 青岛市| 遂溪县| 秀山| 黄平县| 江津市| 平乐县| 锦屏县| 麻城市| 湘潭市| 杭州市| 滦南县| 叙永县| 兖州市| 新泰市| 渑池县| 绿春县| 金塔县| 合山市| 柳河县| 白银市| 鄄城县| 巴青县| 乌拉特后旗| 万安县| 北海市| 炉霍县| 班玛县| 铜山县|