• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于linux操作系統(tǒng)的多串口驅(qū)動研究

    2012-03-14 06:02:44王巧玲陳婭荔
    關(guān)鍵詞:信息結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)內(nèi)核

    王巧玲,高 杰,陳婭荔

    ?

    基于linux操作系統(tǒng)的多串口驅(qū)動研究

    *王巧玲1,高 杰2,陳婭荔1

    (1.井岡山大學(xué)電子與信息工程學(xué)院,江西,吉安 343009 2.南昌大學(xué)共青學(xué)院信息工程系,江西,共青城 332020)

    在介紹基于linux操作系統(tǒng)的多串口驅(qū)動設(shè)計理論基礎(chǔ)上, 重點研究對多串口編程的技術(shù),實現(xiàn)基于tty的核心設(shè)計,可作為實現(xiàn)串口終端設(shè)備集中管理、實時數(shù)據(jù)采集的服務(wù)器主板應(yīng)用。其特點是可以采用ARM平臺,但完全兼容X86平臺,用戶原來在X86 平臺下編寫linux操作系統(tǒng)的多串口驅(qū)動的程序只需做一次重新編譯即可實現(xiàn)移植,達(dá)到基于Linux操作系統(tǒng)的多串口驅(qū)動實時通訊的目的。

    linux操作系統(tǒng);多串口驅(qū)動;tty核心

    在Linux操作系統(tǒng)中串口的編程技術(shù)和DOS、Windows系統(tǒng)下的方法有所不同。本文較為詳細(xì)的敘述了在Linux操作系統(tǒng)中串口的驅(qū)動編程技術(shù)。重點研究多串口驅(qū)動通訊,本驅(qū)動創(chuàng)新點可以通過自動探測的方法測出當(dāng)前是什么類型的主板,可以讓bios往中斷狀態(tài)寄存器或其他保留的寄存器位中寫一個標(biāo)記即可,用于唯一標(biāo)記每一類主板。串口驅(qū)動主要技術(shù)是在tty核心[1]的基礎(chǔ)上實現(xiàn)的,需要同時驅(qū)動最多32個串口,板上的串口共用中斷號,板上串口基地址連續(xù)。因此,通過合理的結(jié)構(gòu)體設(shè)計可以方便的實現(xiàn)。

    1 設(shè)計理論

    串口驅(qū)動本質(zhì)上也是字符設(shè)備驅(qū)動[2-3],只是內(nèi)核根據(jù)其特殊的數(shù)據(jù)傳輸過程進(jìn)行封裝,將其文件操作(file_operation)封裝到tty核心(tty_io.c)中,由tty核心提供接口給應(yīng)用程序調(diào)用,tty核心還提供接口給線路規(guī)程和驅(qū)動程序使用;因此,在寫串口驅(qū)動時只需要調(diào)用tty核心提供的接口,并傳入驅(qū)動的處理函數(shù)(tty_operations)。

    向tty核心注冊驅(qū)動時,tty核心便會為該驅(qū)動分配設(shè)備號,并注冊文件操作函數(shù)(file_operations)。而在tty核心中各文件操作函數(shù)會調(diào)用驅(qū)動傳入的處理函數(shù),可見真正實現(xiàn)應(yīng)用程序需求的函數(shù)還是驅(qū)動程序,tty核心只是實現(xiàn)一個中轉(zhuǎn)的過程,但tty核心中封裝了很多串口驅(qū)動實現(xiàn)的通用函數(shù),大大簡化了串口驅(qū)動的編寫。

    編寫串口驅(qū)動主要分以下幾個步驟:

    1.1 注冊、釋放設(shè)備驅(qū)動

    int tty_register_driver(struct tty_driver *driver);在注冊前要對tty_driver進(jìn)行賦值,在tty_driver中指定設(shè)備號、串口個數(shù)、操作函數(shù)等信息。

    int tty_unregister_driver(struct tty_driver *driver);釋放設(shè)備驅(qū)動。

    1.2 串口操作函數(shù)

    設(shè)置驅(qū)動提供的串口操作函數(shù),注冊時提供給tty核心使用,串口操作函數(shù)是在tty_driver中設(shè)置的。

    1.3 中斷處理函數(shù)

    中斷處理函數(shù)是串口通訊的核心,驅(qū)動對串口進(jìn)行讀、寫都是通過中斷來實現(xiàn)的;串口內(nèi)部有2個64B的FIFO(TX和RX),分別用于發(fā)送和接收數(shù)據(jù)。

    圖1 串口數(shù)據(jù)發(fā)送

    串口發(fā)送數(shù)據(jù)過程如圖1所示,一般串口通訊都是基于異步協(xié)議的,因此數(shù)據(jù)是以字節(jié)為單位傳輸?shù)模?dāng)驅(qū)動將一個字節(jié)數(shù)據(jù)寫到串口時,會先通過THR寄存器存入RX FIFO,然后通過TSR將數(shù)據(jù)發(fā)送出去,每一個數(shù)據(jù)的發(fā)送時間是16個時鐘周期。當(dāng)RX FIFO里的數(shù)據(jù)低于某一TRIGGER值或為空時,就會觸發(fā)中斷,并將LSR寄存器的bit[0]和ISR的bit[1]置1,中斷處理程序根據(jù)這些值發(fā)送數(shù)據(jù)到串口。RX FIFO的TRIGGER值由FCR寄存器的bit[6,7]設(shè)置。

    串口接收數(shù)據(jù)過程如圖2所示,和發(fā)送數(shù)據(jù)一樣,串口接收數(shù)據(jù)也是以字節(jié)為單位的,串口通過RSR寄存器接收數(shù)據(jù),然后會將數(shù)據(jù)存入TX FIFO,驅(qū)動程序同樣以字節(jié)為單位從TX FIFO中取數(shù)據(jù)。當(dāng)TX FIFO中數(shù)據(jù)高于某個TRIGGER值就會觸發(fā)中斷,并將LSR的bit[5]和ISR的bit[2]置1,中斷處理程序根據(jù)這些值從串口TX FIFO讀取數(shù)據(jù)。TX FIFO的TRIGGER值由FCR寄存器的bit[4,5]設(shè)置。

    當(dāng)啟用了自動RTS硬件流控制時(EFR bit[6]=1 MCR bit[1]=1),當(dāng)TX FIFO的數(shù)據(jù)大于56時,串口會自動通知發(fā)送端停止發(fā)送數(shù)據(jù);當(dāng)TX FIFO數(shù)據(jù)小于8時,串口會自動通知發(fā)送端繼續(xù)發(fā)送數(shù)據(jù)。使用RTS/CTS(請求發(fā)送/清除發(fā)送)流控制時,應(yīng)將通訊兩端的RTS、CTS線對應(yīng)相連。

    圖2 串口數(shù)據(jù)接收

    2 設(shè)計思路

    多串口驅(qū)動基于tty核心進(jìn)行的,主要設(shè)計以下幾個方面:

    2.1 與內(nèi)核通訊

    這里的與內(nèi)核通訊實際上是通過tty核心來實現(xiàn)的,通過向tty核心注冊驅(qū)動告訴內(nèi)核應(yīng)該處理哪個驅(qū)動和應(yīng)該使用哪些處理函數(shù),注冊函數(shù)如下:

    int tty_register_driver(struct tty_driver *driver);

    2.2 與應(yīng)用程序通訊

    字符設(shè)備驅(qū)動與應(yīng)用程序通訊是通過文件操作file_operations來實現(xiàn)的,而文件操作是在tty核心中實現(xiàn)的。

    可見,應(yīng)用程序雖然是調(diào)用tty核心的文件操作函數(shù),但本質(zhì)上還是驅(qū)動來實現(xiàn)的。因此,驅(qū)動中可以根據(jù)需要實現(xiàn)與應(yīng)用程序通訊的函數(shù),本人在多串口驅(qū)動中實現(xiàn)了open、release、write、ioctl等函數(shù)。

    2.3 與硬件通訊

    驅(qū)動與硬件通訊就是操作寄存器,在串口芯片的datasheet中有詳細(xì)的說明,多的串口芯片是ST16C654,這里介紹幾個驅(qū)動中常用的寄存器。

    RHR:接收數(shù)據(jù)寄存器;

    THR:發(fā)送數(shù)據(jù)寄存器;

    IER:中斷使能寄存器,其中bit[0-3]分別對應(yīng)4中中斷;

    ISR:中斷狀態(tài)寄存器,其中bit[1,2]分別代表讀、寫中斷;

    FCR:FIFO控制寄存器,使能FIFO和TRIGGER等級都在這里設(shè)置;

    LCR:線路控制寄存器,設(shè)置線路規(guī)程,包括:數(shù)據(jù)位,校驗位,停止位等;

    MCR:MODEM控制寄存器,其中bit[0,1]用于使能硬件流控制輸出;

    LSR:線路狀態(tài)寄存器,其中bit[0]標(biāo)記RHR是否有數(shù)據(jù),

    bit[5]標(biāo)記THR是否為空;

    DLL、DLM:波特率除數(shù)寄存器,用于設(shè)置波特率。

    3 數(shù)據(jù)結(jié)構(gòu)設(shè)計

    這里的數(shù)據(jù)結(jié)構(gòu)不是指上一節(jié)的數(shù)據(jù)結(jié)構(gòu),這里是指串口驅(qū)動內(nèi)部的數(shù)據(jù)組織方式,這些數(shù)據(jù)結(jié)構(gòu)貫穿整個串口驅(qū)動程序,合理的設(shè)計數(shù)據(jù)結(jié)構(gòu)和組織方式可以有效地提高驅(qū)動的效率,下面分別介紹內(nèi)核和多串口驅(qū)動的數(shù)據(jù)結(jié)構(gòu)設(shè)計和組織方式,并進(jìn)行比較和分析。

    數(shù)據(jù)結(jié)構(gòu)和組織方式的設(shè)計要注意以下幾個方面:

    (a)數(shù)據(jù)結(jié)構(gòu)要能表示串口的所有信息以及運(yùn)行過程中串口的屬性;

    (b)open時要能根據(jù)數(shù)據(jù)結(jié)構(gòu)來判斷是哪一個串口,因為有可能一塊板上有很多串口;

    (c)中斷處理函數(shù)中也需要能通過數(shù)據(jù)結(jié)構(gòu)來判斷是哪個串口產(chǎn)生的中斷。

    3.1 內(nèi)核數(shù)據(jù)結(jié)構(gòu)設(shè)計

    內(nèi)核串口驅(qū)動主要是通過以下2個數(shù)組來實現(xiàn)的。

    struct serial_state rs_table[64];

    這是一個串口基本信息結(jié)構(gòu)體,結(jié)構(gòu)體中包括波特率、基地址、中斷號等信息,在定義時就已經(jīng)對其進(jìn)行了初始化,初始化是通過宏SERIAL_PORT_DFNS來實現(xiàn)的,這個宏初始化了每個串口的基地址、中斷號,這個數(shù)組中的初始值就是默認(rèn)情況下的ttySn的值,所以可以根據(jù)主板的串口信息修改該宏的值,實現(xiàn)驅(qū)動主板上各串口。

    struct async_struct *IRQ_ports[225];

    這是一個數(shù)組指針,數(shù)組大小為225,對應(yīng)于每個中斷號,數(shù)組每個元素指向所有共享該中斷號的串口信息結(jié)構(gòu)體鏈表;async_struct是一個包含一個已打開串口所有信息的結(jié)構(gòu)體,當(dāng)打開一個串口時,會動態(tài)創(chuàng)建一個串口信息結(jié)構(gòu)體async_struct,然后根據(jù)打開設(shè)備的基本信息serial_state對這個結(jié)構(gòu)體進(jìn)行初始化,最后將其鏈入相應(yīng)IRQ鏈表的頭。

    低版本內(nèi)核串口驅(qū)動的數(shù)據(jù)結(jié)構(gòu)模型如圖3所示,在打開設(shè)備時,通過打開設(shè)備的次設(shè)備號和驅(qū)動的起始次設(shè)備號計算出是第幾個串口,從而得到串口基本信息serial_state;在中斷處理程序中,可以直接根據(jù)中斷號獲取所有使用該中斷號的串口信息,然后對所有串口進(jìn)行處理。

    圖3 低版本內(nèi)核數(shù)據(jù)結(jié)構(gòu)模型

    高版本內(nèi)核串口驅(qū)動的設(shè)計思想和低版本內(nèi)核類似,只是在其基礎(chǔ)上進(jìn)行了一些改進(jìn),以8250串口驅(qū)動為例說明,主要有以下幾個數(shù)據(jù)結(jié)構(gòu):

    struct old_serial_port old_serial_port[64];

    串口基本信息結(jié)構(gòu)體,類似于2.4內(nèi)核的serial_state結(jié)構(gòu)體,由宏SERIAL_PORT_DFNS初始化。

    struct uart_8250_port serial8250_ports[64];

    已打開串口信息結(jié)構(gòu)體,類似于低版本內(nèi)核的async_struct結(jié)構(gòu)體,與低版本內(nèi)核的不同之處在于這里的結(jié)構(gòu)體是靜態(tài)分配的。

    struct irq_info irq_lists[225];

    這是一個數(shù)組,類似于低版本內(nèi)核的IRQ_ports,數(shù)組的內(nèi)容為包含一個list_head類型變量的結(jié)構(gòu)體,用于指向相同中斷號的所有串口的鏈表頭。

    3.2 多數(shù)據(jù)結(jié)構(gòu)設(shè)計

    內(nèi)核串口驅(qū)動的數(shù)據(jù)結(jié)構(gòu)設(shè)計是一種通用的設(shè)計,目的在于能應(yīng)用于各種不同的主板,而多串口驅(qū)動的數(shù)據(jù)結(jié)構(gòu)完全是針對104串口系列主板設(shè)計的,是根據(jù)多的特性設(shè)計結(jié)構(gòu)體。

    由于每塊多主板的所有串口是有一些共用屬性的,所以設(shè)計一個主板信息結(jié)構(gòu)體,這個結(jié)構(gòu)體每塊主板一個,主板各個串口信息都可以通過此結(jié)構(gòu)體來設(shè)置,結(jié)構(gòu)體定義如下:

    struct evocdrv_brdconf {/*每塊板的信息*/

    int board_type;/*主板類型1-1048COM 2-COMMON*/

    int flags;/*UART_CLEAR_FIFO | UART_USE_ FIFO |UART_HAS_EFR*

    int ports;/*串口個數(shù)*/

    int irq;/*中斷號,一般為共享中斷*/

    int irq_type;/*0:串口0-7共享中斷(M1=on);1--0-3共享,4-7共享(M1=off)*/

    int vector;/*中斷狀態(tài)寄存器基地址,4塊板16個端口,板上所有串口共用*/

    int vector_mask;/*中斷狀態(tài)*/

    int uart_type;/*芯片類型*/

    char uart_name[20];/*芯片名字*/

    int ioaddr;/*每個串口的端口基地址,由sw1設(shè)置(p14)*/

    int baud_base;/*串口的波特率基數(shù)quot=baud_ base/baud*/

    int max_baud;/*最大波特率*/};

    除了主板信息結(jié)構(gòu)體之外,還定義了一個大小為32的串口信息結(jié)構(gòu)體數(shù)組,用于保存每個串口的信息,串口信息數(shù)組在初始化時根據(jù)其主板的信息設(shè)置;由于多主板的特殊性,如:主板上的所有串口是共用中斷號的,串口的基地址是連續(xù)的等等,所以可以把這些共用的屬性設(shè)置在主板信息結(jié)構(gòu)體中。串口信息數(shù)組是這樣設(shè)計的,默認(rèn)每塊主板8個串口,若主板串口個數(shù)小于8則數(shù)組的相應(yīng)位為空值。

    打開串口時,根據(jù)設(shè)備的次設(shè)備號和驅(qū)動的次設(shè)備號起始值,計算出打開的是第幾個串口,根據(jù)這個就可以直接從串口信息數(shù)組中獲取串口信息;在中斷處理程序中,這里并沒有像內(nèi)核串口驅(qū)動中的中斷指針數(shù)組,但由于每塊板上的串口中斷號是相同的,所以只需要在發(fā)生中斷時判斷是哪塊板上的串口產(chǎn)生的,然后對該板上的串口進(jìn)行一一判斷并處理;在請求中斷號時,將板上第一個串口信息結(jié)構(gòu)體作為參數(shù)傳入,然后在中斷處理函數(shù)中根據(jù)串口信息數(shù)組的第0,8,16,24個元素來判斷屬于哪塊主板。

    3.3 函數(shù)的實現(xiàn)

    串口驅(qū)動中要實現(xiàn)的函數(shù)有很多,包括與tty核心的通訊函數(shù),與應(yīng)用程序的通訊函數(shù)以及中斷處理函數(shù),主要函數(shù)如下:

    struct tty_operations evocdrv_ops = {

    .open = evocdrv_open,/*打開串口*/

    .close = evocdrv_close,/*關(guān)閉串口*/

    .write = evocdrv_write,/*寫串口*/

    .put_char = evocdrv_put_char,/*寫一個字符到串口*/

    .flush_chars = evocdrv_flush_chars,/*發(fā)送寫緩沖區(qū)中數(shù)據(jù)*/

    .write_room = evocdrv_write_room,/*獲取寫緩沖區(qū)的可用空間*/

    .chars_in_buffer = evocdrv_chars_in_buffer,/*獲取寫緩沖區(qū)數(shù)據(jù)大小*/

    .flush_buffer = evocdrv_flush_buffer,/*清空寫緩沖區(qū)*/

    .ioctl = evocdrv_ioctl,/*ioctl*/

    .throttle = evocdrv_throttle,/*通知串口不要發(fā)送數(shù)據(jù)*/

    .unthrottle = evocdrv_unthrottle,/*通知串口恢復(fù)發(fā)送數(shù)據(jù)*/

    .set_termios = evocdrv_set_termios,/*設(shè)置線路規(guī)程*/

    .stop = evocdrv_stop,/*停止向串口發(fā)送數(shù)據(jù)*/

    .start = evocdrv_start,/*恢復(fù)向串口發(fā)送數(shù)據(jù)*/

    .hangup = evocdrv_hangup,/*設(shè)備掛起,等待再次被open*/

    .tiocmget = evocdrv_tiocmget,/*獲取MODEM狀態(tài)位*/

    .tiocmset = evocdrv_tiocmset,/*設(shè)置MODEM狀態(tài)位*/

    };

    這里挑一些與應(yīng)用程序聯(lián)系比較密切的函數(shù)進(jìn)行介紹。

    (1) open

    當(dāng)應(yīng)用程序調(diào)用open函數(shù)打開設(shè)備文件時就會進(jìn)入此函數(shù),此函數(shù)主要實現(xiàn)打開設(shè)備以及對設(shè)備進(jìn)行初始化等功能,主要工作如下:

    ● 找到打開串口的信息結(jié)構(gòu)體并進(jìn)行必要的初始化;

    ● 初始化串口寄存器,包括啟用FIFO、中斷等各種初始化工作;

    ● 設(shè)置波特率、停止位、流控制等線路狀態(tài)信息;

    (2) close

    當(dāng)應(yīng)用程序調(diào)用close函數(shù)關(guān)閉設(shè)備時會進(jìn)入此函數(shù),此函數(shù)實現(xiàn)的功能與open相反,主要是善后工作,包括對所有改變過的寄存器復(fù)位,還有對open后請求的一些資源進(jìn)行釋放。

    (3) write

    當(dāng)應(yīng)用程序調(diào)用write函數(shù)進(jìn)行寫操作時會進(jìn)入此函數(shù),此函數(shù)主要實現(xiàn)把應(yīng)用程序?qū)懭氲臄?shù)據(jù)保存到寫緩沖區(qū)xmit_buf中,這是一個4KB大小的緩沖區(qū),是在open時動態(tài)分配的,在close是釋放。當(dāng)xmit_buf中有數(shù)據(jù)時,開啟發(fā)送數(shù)據(jù)中斷IER_THRI,然后就會進(jìn)入中斷處理程序?qū)mit_buf的數(shù)據(jù)發(fā)送給串口。

    (4) ioctl

    當(dāng)應(yīng)用程序調(diào)用ioctl函數(shù)時會進(jìn)入此函數(shù),此函數(shù)主要提供應(yīng)用程序一些設(shè)置的方法和獲取驅(qū)動信息的方法,這里有一個很重要的方法TIOCSSERIAL,當(dāng)調(diào)用setserial命令設(shè)置設(shè)備節(jié)點信息時會調(diào)用ioctl并傳入TIOCSSERIAL參數(shù),在處理程序中,根據(jù)用戶傳入的基礎(chǔ)波特率、中斷號、基地址等串口信息修改串口信息結(jié)構(gòu)體,如果中斷號或基地址改變了,則重新設(shè)置串口各寄存器,否則只要重新設(shè)置串口的線路信息就可以了。

    (5) set_termios

    當(dāng)應(yīng)用程序調(diào)用tcsetattr函數(shù)時進(jìn)入此函數(shù),主要功能是設(shè)置線路規(guī)程信息,函數(shù)tcsetattr調(diào)用后tty核心會更新tty_struct->termios,并將原來的線路規(guī)程保存在old_termios中作為參數(shù)傳入set_termios中,程序根據(jù)tty_struct中的線路規(guī)程值對串口進(jìn)行重新設(shè)置。

    (6) tiocmset

    設(shè)置MODEM狀態(tài),主要是設(shè)置DTR/RTS線的狀態(tài),主要應(yīng)用于硬件流控制中。

    (7) 中斷處理函數(shù)

    串口驅(qū)動程序的數(shù)據(jù)傳輸和接收都是通過中斷來實現(xiàn)的,觸發(fā)中斷的情況有很多,這里列出幾個常用的中斷觸發(fā)。當(dāng)出現(xiàn)以下幾種情況時會觸發(fā)中斷:

    ①若設(shè)置了IER寄存器的RDI位,當(dāng)FIFO值到達(dá)TRIGGER值時觸發(fā)讀中斷,并將ISR寄存器的bit[1]和LSR寄存器的bit[0]置1;

    ②若設(shè)置了IER寄存器的THRI位,當(dāng)FIFO值低于TRIGGER值或FIFO為空時觸發(fā)寫中斷,并將ISR寄存器的bit[0]和LSR寄存器的bit[5]置1;

    ③若設(shè)置了IER寄存器的TLSI位,當(dāng)出現(xiàn)RX break、RX framing error、RX parity error、overrun error的任意一個時將觸發(fā)一個中斷;

    ④若設(shè)置了IER寄存器的MSI位,當(dāng)CTS線、DSR線、RI響鈴控制器、CD數(shù)據(jù)載波檢測線中任意一個狀態(tài)改變時將觸發(fā)一個中斷;

    由于有很多中情況會觸發(fā)中斷,所以在中斷處理函數(shù)中要對各種可能產(chǎn)生中斷的情況進(jìn)行判斷并處理,這里最重要的當(dāng)然是對讀、寫中斷的處理了,可以通過讀取寄存器的值來判斷進(jìn)行哪種操作。

    當(dāng)ISR寄存器的bit[1]或LSR寄存器的bit[0]為1時,執(zhí)行讀操作,即從串口讀取數(shù)據(jù),由于串口內(nèi)部有個64B的RX FIFO,而且串口數(shù)據(jù)傳輸是以字節(jié)為單位的,所以在讀取數(shù)據(jù)操作函數(shù)(receive_chars)中,每次以字節(jié)為單位從串口RHR寄存器讀取64B的數(shù)據(jù);先將讀取的數(shù)據(jù)保存到tty_buffer中(tty_insert_flip_char),然后在將tty_ buffer中的數(shù)據(jù)發(fā)送到read_buf中(tty_flip_buffer _push),應(yīng)用程序就是從read_buf中讀取數(shù)據(jù)的。

    當(dāng)ISR寄存器的bit[0]或LSR寄存器的bit[5]為1時,執(zhí)行寫操作,即向串口寫數(shù)據(jù)(transmit_ chars),寫操作與讀操作類似,也是每次以字節(jié)為單位向串口寫入64B的數(shù)據(jù),寫入數(shù)據(jù)的寄存器為THR;這里寫入的數(shù)據(jù)并不是用戶空間傳入的數(shù)據(jù),應(yīng)用程序先將數(shù)據(jù)寫入寫緩沖區(qū)xmit_buf,函數(shù)transmit_chars從寫緩沖區(qū)發(fā)送數(shù)據(jù)到串口,寫緩沖區(qū)大小為4KB。

    4 結(jié)語

    可以看出內(nèi)核中數(shù)據(jù)結(jié)構(gòu)的設(shè)計是一種通用的設(shè)計,不論是哪種類型的主板、哪種類型的芯片都可使用內(nèi)核驅(qū)動;但正是由于這種通用性,使得內(nèi)核對串口信息的默認(rèn)值很難做一個合適的設(shè)置,因為不同的主板串口信息往往是不同的,只能通過serserial命令來手動修改。多串口驅(qū)動的設(shè)計是將內(nèi)核中2個串口信息結(jié)構(gòu)體合為一個,并實現(xiàn)一個主板信息結(jié)構(gòu)體,此結(jié)構(gòu)體包含了一塊板上所有串口共用的信息,對于中斷處理的設(shè)計是通過傳入每塊板第一個串口的信息結(jié)構(gòu)體實現(xiàn)的,這里沒有內(nèi)核方便,有待改進(jìn)。

    [1] 李萌.linux操作系統(tǒng)多串口編程技術(shù)[J].火控雷達(dá)技術(shù); 2008,29(3).

    [2] 劉海燕,荊濤.linux系統(tǒng)應(yīng)用與開發(fā)教程[M].北京:機(jī)械工業(yè)出版社,2006:44-47.

    [3] 高艷輝,龔華軍.嵌入式實時Linux在PC104平臺上的實現(xiàn)[J].儀器儀表用戶,2008,15(2).

    [4] 高艷輝.基于嵌入式實時Linux的無人機(jī)半物理仿真平臺研究[D].南京:南京航空航天大學(xué),2008.

    [5] 曾煒,沈為群.基于RTAI-Linux的飛行仿真實時管理系統(tǒng)[J].計算機(jī)工程,2008,34(19).

    [6] 劉海燕,邵立嵩.linux系統(tǒng)應(yīng)用與開發(fā)教程[M].北京:機(jī)械工業(yè)出版社,2006:65-69.

    [7] 黃志洪,鐘耿揚(yáng).linux操作系統(tǒng)[M].北京:冶金工業(yè)出版社,2010:155-169.

    The research of multi-serial drive based on the Linux operating system

    *WANG Qiao-ling1,GAO Jie2, CHENG Ya-li1

    (1.School of Electronic Information Engineering, Jinggangshan University, Ji’an, Jiangxi 343009, China;2.Information Engineering Department of Nanchang University, Gongqing College, Gongqing City, Jiangxi 332020,China)

    We introduce the Linux operating system based on the design theory of multi-serial port drive and realize the core design based on tty with the multi-serial port programming technology, which can be used as a serial port terminal equipment to realize the centralized management, the real-time data acquisition server application motherboard. Its characteristic is can be used with ARM platform, but is fully compatible with X86 platform. Furthermore, the original X86 operating system Linux multi-serial port drive program in the workbench need only recompile to realize the transplant, which is based on Linux operating system to the serial driver real-time communication.

    Linux operating system; multi- serial driver; tty core

    1674-8085(2012)03-0069-06

    TP316

    A

    10.3969/j.issn.1674-8085.2012.03.015

    2012-02-16;

    2012-03-27

    *王巧玲(1979-),女,江西吉水人,講師,碩士,主要從事計算機(jī)軟件理論研究(Email:xinyuwql@163.com);

    高 杰(1983-),男,江西吉安人,助教,主要從事嵌入式方向研究(Email:275750383@qq.com);

    陳婭荔(1982-),女,江西南昌人,助教,碩士,主要從事人工智能和圖像處理研究(Email:30006959@qq.com).

    猜你喜歡
    信息結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)內(nèi)核
    萬物皆可IP的時代,我們當(dāng)夯實的IP內(nèi)核是什么?
    強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
    基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
    Linux內(nèi)核mmap保護(hù)機(jī)制研究
    對外漢語教材編寫中信息結(jié)構(gòu)知識的應(yīng)用
    “翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
    基于調(diào)節(jié)聚焦理論的生物農(nóng)藥推廣有效性研究
    高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
    中國市場(2016年45期)2016-05-17 05:15:48
    事件結(jié)構(gòu)、信息結(jié)構(gòu)與句法表征*——領(lǐng)主屬賓句的認(rèn)知語法分析
    TRIZ理論在“數(shù)據(jù)結(jié)構(gòu)”多媒體教學(xué)中的應(yīng)用
    性色av乱码一区二区三区2| 欧美日韩亚洲综合一区二区三区_| 免费观看人在逋| 后天国语完整版免费观看| 欧美另类一区| 99国产精品一区二区三区| 久久久久久久大尺度免费视频| 久久久精品免费免费高清| 免费观看av网站的网址| 777米奇影视久久| 在线观看免费高清a一片| 在线观看www视频免费| 一区二区日韩欧美中文字幕| 色精品久久人妻99蜜桃| 亚洲欧洲精品一区二区精品久久久| 欧美日韩国产mv在线观看视频| 国产高清视频在线播放一区 | 久久久久久亚洲精品国产蜜桃av| 一本大道久久a久久精品| www.自偷自拍.com| 91成年电影在线观看| 亚洲精品久久久久久婷婷小说| 可以免费在线观看a视频的电影网站| 99久久综合免费| 热re99久久精品国产66热6| 国产精品久久久人人做人人爽| 亚洲国产精品一区二区三区在线| 亚洲国产欧美在线一区| av不卡在线播放| 精品人妻1区二区| 国产一区二区激情短视频 | 无遮挡黄片免费观看| 91成年电影在线观看| 91九色精品人成在线观看| 国产av又大| 免费av中文字幕在线| 在线十欧美十亚洲十日本专区| www.自偷自拍.com| 久久中文字幕一级| 亚洲国产欧美在线一区| 久久久久国产精品人妻一区二区| 在线观看免费视频网站a站| 狠狠婷婷综合久久久久久88av| 女警被强在线播放| 亚洲av成人一区二区三| 精品亚洲成国产av| 亚洲av日韩在线播放| 少妇的丰满在线观看| 精品久久久精品久久久| 美女午夜性视频免费| 中文字幕人妻丝袜制服| 2018国产大陆天天弄谢| 黑人巨大精品欧美一区二区mp4| 亚洲精品久久成人aⅴ小说| 亚洲精品中文字幕一二三四区 | 久久久久精品国产欧美久久久 | 美女高潮到喷水免费观看| 麻豆国产av国片精品| 青青草视频在线视频观看| 日韩一区二区三区影片| 亚洲久久久国产精品| 久久性视频一级片| 91老司机精品| 欧美 日韩 精品 国产| 国产欧美亚洲国产| 操美女的视频在线观看| netflix在线观看网站| 日韩制服丝袜自拍偷拍| 最近中文字幕2019免费版| 亚洲精品久久久久久婷婷小说| 国产熟女午夜一区二区三区| 久久免费观看电影| av超薄肉色丝袜交足视频| 香蕉国产在线看| 国产男女内射视频| 亚洲成人手机| 国产精品一区二区精品视频观看| 91成人精品电影| 在线天堂中文资源库| 高清黄色对白视频在线免费看| 视频在线观看一区二区三区| 久久这里只有精品19| 国产av国产精品国产| 国产精品免费视频内射| 一本一本久久a久久精品综合妖精| 久久性视频一级片| 亚洲精品av麻豆狂野| 老熟妇仑乱视频hdxx| 国产一区二区激情短视频 | 日韩电影二区| 亚洲精华国产精华精| 中文字幕色久视频| 一级黄色大片毛片| 老汉色av国产亚洲站长工具| 菩萨蛮人人尽说江南好唐韦庄| 99久久99久久久精品蜜桃| 97在线人人人人妻| 国产精品久久久久久人妻精品电影 | 欧美日韩福利视频一区二区| 一本综合久久免费| 国产精品国产av在线观看| 成人手机av| 久久久久久久精品精品| 新久久久久国产一级毛片| 日韩欧美免费精品| 一级毛片电影观看| 成人av一区二区三区在线看 | 成年人午夜在线观看视频| 日韩 欧美 亚洲 中文字幕| 亚洲av欧美aⅴ国产| 搡老乐熟女国产| 激情视频va一区二区三区| 欧美黑人欧美精品刺激| 亚洲av男天堂| a 毛片基地| 国产又色又爽无遮挡免| 99热国产这里只有精品6| 色播在线永久视频| 亚洲第一av免费看| 美女大奶头黄色视频| 国产高清videossex| 麻豆乱淫一区二区| 色94色欧美一区二区| 两人在一起打扑克的视频| 99国产精品一区二区三区| 考比视频在线观看| 两性夫妻黄色片| 日日夜夜操网爽| 极品少妇高潮喷水抽搐| 满18在线观看网站| 精品国内亚洲2022精品成人 | 搡老熟女国产l中国老女人| 波多野结衣av一区二区av| 国产福利在线免费观看视频| 国产成人啪精品午夜网站| av免费在线观看网站| 中文字幕人妻丝袜一区二区| 国产97色在线日韩免费| 国产视频一区二区在线看| 91精品三级在线观看| 黄色片一级片一级黄色片| av不卡在线播放| 热99久久久久精品小说推荐| 国产成人av教育| 亚洲av片天天在线观看| 久久精品国产亚洲av香蕉五月 | 美女大奶头黄色视频| 国产一区二区 视频在线| 999精品在线视频| 日韩三级视频一区二区三区| 各种免费的搞黄视频| 国产精品一区二区精品视频观看| 国产成人精品在线电影| 丰满人妻熟妇乱又伦精品不卡| 国产亚洲一区二区精品| 91成年电影在线观看| 久久久国产一区二区| 欧美成人午夜精品| 成在线人永久免费视频| 熟女少妇亚洲综合色aaa.| 亚洲精品第二区| 五月开心婷婷网| 在线av久久热| 一区二区三区激情视频| 久久中文字幕一级| 亚洲精品久久午夜乱码| av在线app专区| 欧美在线一区亚洲| 久久国产亚洲av麻豆专区| 男人舔女人的私密视频| 亚洲精品久久久久久婷婷小说| 国产免费视频播放在线视频| 两个人免费观看高清视频| 最黄视频免费看| 亚洲精品国产av成人精品| 久久精品国产亚洲av香蕉五月 | 免费人妻精品一区二区三区视频| 人妻人人澡人人爽人人| 男女床上黄色一级片免费看| 欧美另类亚洲清纯唯美| 亚洲精品国产区一区二| 国产福利在线免费观看视频| 国产成人精品久久二区二区免费| 国产伦理片在线播放av一区| 狂野欧美激情性xxxx| 一区二区三区激情视频| 国产成人精品无人区| 国产一区二区 视频在线| 精品人妻一区二区三区麻豆| 亚洲天堂av无毛| 一本综合久久免费| a级片在线免费高清观看视频| 国产欧美日韩综合在线一区二区| 一二三四在线观看免费中文在| 欧美日本中文国产一区发布| 亚洲欧洲日产国产| 午夜免费成人在线视频| 国产精品成人在线| 国产精品一区二区精品视频观看| 香蕉丝袜av| 正在播放国产对白刺激| 波多野结衣av一区二区av| 久久性视频一级片| 日韩 亚洲 欧美在线| 色婷婷av一区二区三区视频| 久久 成人 亚洲| 国产精品久久久av美女十八| 男人操女人黄网站| 精品卡一卡二卡四卡免费| 国产成人精品在线电影| 精品一区二区三卡| 亚洲精品中文字幕一二三四区 | 亚洲成国产人片在线观看| 婷婷丁香在线五月| 中文字幕最新亚洲高清| av电影中文网址| 久久精品熟女亚洲av麻豆精品| 满18在线观看网站| 黄片播放在线免费| 亚洲 国产 在线| 老司机影院毛片| 亚洲精品国产一区二区精华液| 黄网站色视频无遮挡免费观看| 国产又色又爽无遮挡免| 满18在线观看网站| 波多野结衣一区麻豆| 亚洲综合色网址| 亚洲欧美清纯卡通| 久久久久久久国产电影| 91精品三级在线观看| 久久性视频一级片| 亚洲国产精品一区三区| 国产精品国产三级国产专区5o| 日韩 欧美 亚洲 中文字幕| 男女之事视频高清在线观看| 十分钟在线观看高清视频www| 国产熟女午夜一区二区三区| 69av精品久久久久久 | 国产色视频综合| 欧美另类一区| 亚洲自偷自拍图片 自拍| 国产深夜福利视频在线观看| 天天躁狠狠躁夜夜躁狠狠躁| 91成年电影在线观看| 国产精品秋霞免费鲁丝片| netflix在线观看网站| 十八禁高潮呻吟视频| 亚洲av电影在线进入| 桃花免费在线播放| 欧美激情久久久久久爽电影 | 狠狠精品人妻久久久久久综合| 国产av精品麻豆| 老司机午夜十八禁免费视频| 窝窝影院91人妻| 侵犯人妻中文字幕一二三四区| 欧美97在线视频| 欧美日韩成人在线一区二区| 脱女人内裤的视频| 中文字幕制服av| 亚洲男人天堂网一区| 中文字幕制服av| 日韩免费高清中文字幕av| 老熟妇乱子伦视频在线观看 | 午夜影院在线不卡| 免费在线观看完整版高清| 中文欧美无线码| 日日摸夜夜添夜夜添小说| 无遮挡黄片免费观看| 欧美黑人欧美精品刺激| 欧美人与性动交α欧美精品济南到| 国产成人欧美在线观看 | 国产黄频视频在线观看| 欧美久久黑人一区二区| 中文字幕av电影在线播放| 亚洲一区中文字幕在线| 在线观看人妻少妇| 90打野战视频偷拍视频| 国产精品亚洲av一区麻豆| 人人澡人人妻人| 性色av一级| 日本精品一区二区三区蜜桃| 国产免费福利视频在线观看| e午夜精品久久久久久久| 搡老乐熟女国产| 色婷婷久久久亚洲欧美| 乱人伦中国视频| 亚洲九九香蕉| 亚洲精品国产一区二区精华液| 丝袜脚勾引网站| 久热这里只有精品99| av超薄肉色丝袜交足视频| 精品久久久久久电影网| 老司机深夜福利视频在线观看 | 欧美久久黑人一区二区| 精品国产超薄肉色丝袜足j| 亚洲欧美日韩另类电影网站| 国产精品免费视频内射| 欧美黑人精品巨大| 亚洲av日韩精品久久久久久密| 日韩人妻精品一区2区三区| 这个男人来自地球电影免费观看| 69精品国产乱码久久久| 日本撒尿小便嘘嘘汇集6| 男女高潮啪啪啪动态图| 欧美精品亚洲一区二区| 在线观看一区二区三区激情| 午夜福利免费观看在线| 香蕉丝袜av| 最黄视频免费看| 国产亚洲欧美精品永久| 一区二区三区四区激情视频| 国产精品久久久久久精品古装| 人人妻,人人澡人人爽秒播| 91成年电影在线观看| 色婷婷av一区二区三区视频| 国精品久久久久久国模美| 狠狠精品人妻久久久久久综合| avwww免费| 免费女性裸体啪啪无遮挡网站| 日本a在线网址| 久久性视频一级片| 亚洲色图综合在线观看| 亚洲午夜精品一区,二区,三区| 欧美在线黄色| 蜜桃在线观看..| 黄色片一级片一级黄色片| 又黄又粗又硬又大视频| 中文字幕制服av| 精品一品国产午夜福利视频| 黄色 视频免费看| 19禁男女啪啪无遮挡网站| 久久九九热精品免费| 国产亚洲欧美精品永久| 一本久久精品| 少妇粗大呻吟视频| 亚洲精品一二三| 69av精品久久久久久 | 自拍欧美九色日韩亚洲蝌蚪91| 成年人午夜在线观看视频| 欧美黄色片欧美黄色片| 免费不卡黄色视频| 欧美精品亚洲一区二区| www.av在线官网国产| 首页视频小说图片口味搜索| 亚洲五月色婷婷综合| 日韩视频一区二区在线观看| 男女国产视频网站| 亚洲国产成人一精品久久久| 男女下面插进去视频免费观看| 日本av手机在线免费观看| 午夜影院在线不卡| 成人黄色视频免费在线看| 午夜91福利影院| 大香蕉久久网| 亚洲国产欧美网| 五月开心婷婷网| av国产精品久久久久影院| 人妻一区二区av| 亚洲情色 制服丝袜| 欧美午夜高清在线| 我的亚洲天堂| 亚洲精品美女久久av网站| 久久久久久久久免费视频了| 国产一区二区三区综合在线观看| 久久 成人 亚洲| 女人久久www免费人成看片| 脱女人内裤的视频| 90打野战视频偷拍视频| av电影中文网址| 中文字幕另类日韩欧美亚洲嫩草| 老司机深夜福利视频在线观看 | 一区二区三区激情视频| 一区在线观看完整版| 12—13女人毛片做爰片一| 亚洲色图 男人天堂 中文字幕| 亚洲中文字幕日韩| 国产精品成人在线| 中文字幕制服av| 一进一出抽搐动态| 91成人精品电影| 日本撒尿小便嘘嘘汇集6| 精品亚洲成a人片在线观看| 极品人妻少妇av视频| 美女视频免费永久观看网站| 在线看a的网站| av在线播放精品| 婷婷色av中文字幕| 日本黄色日本黄色录像| 99国产精品一区二区蜜桃av | 麻豆av在线久日| 搡老熟女国产l中国老女人| 日本黄色日本黄色录像| 国产片内射在线| 免费黄频网站在线观看国产| 99热国产这里只有精品6| 亚洲专区国产一区二区| 国产亚洲精品久久久久5区| 久久国产亚洲av麻豆专区| 免费在线观看完整版高清| 国产精品免费大片| 午夜免费成人在线视频| 国产熟女午夜一区二区三区| 久久人人爽人人片av| 午夜福利乱码中文字幕| 久久精品亚洲av国产电影网| svipshipincom国产片| 成年av动漫网址| 在线观看免费日韩欧美大片| 两性午夜刺激爽爽歪歪视频在线观看 | 男人爽女人下面视频在线观看| 国产一区二区激情短视频 | 久久久欧美国产精品| 99久久精品国产亚洲精品| 每晚都被弄得嗷嗷叫到高潮| 中国美女看黄片| 夜夜骑夜夜射夜夜干| 在线天堂中文资源库| 久久久久精品国产欧美久久久 | 国产男人的电影天堂91| 国产欧美日韩一区二区三 | av欧美777| 亚洲精品国产色婷婷电影| 蜜桃在线观看..| 一级毛片女人18水好多| 黄色视频,在线免费观看| 国产精品熟女久久久久浪| 伊人亚洲综合成人网| 一级a爱视频在线免费观看| a在线观看视频网站| 在线观看www视频免费| 国产欧美日韩一区二区精品| 自线自在国产av| 99久久精品国产亚洲精品| 午夜影院在线不卡| 制服人妻中文乱码| 亚洲精品粉嫩美女一区| 亚洲专区字幕在线| 久久精品成人免费网站| 日韩中文字幕欧美一区二区| 美女主播在线视频| 男女午夜视频在线观看| 2018国产大陆天天弄谢| 欧美黑人欧美精品刺激| 9191精品国产免费久久| 久久99一区二区三区| 国产精品免费视频内射| 69精品国产乱码久久久| 一个人免费看片子| 亚洲精品国产色婷婷电影| 十八禁网站免费在线| 黄色毛片三级朝国网站| 精品国产乱码久久久久久男人| 亚洲精品一卡2卡三卡4卡5卡 | 久久人人97超碰香蕉20202| 欧美日韩成人在线一区二区| 亚洲精品成人av观看孕妇| 日韩欧美免费精品| 精品少妇久久久久久888优播| 91精品伊人久久大香线蕉| 日本91视频免费播放| 视频区图区小说| 每晚都被弄得嗷嗷叫到高潮| 成年美女黄网站色视频大全免费| netflix在线观看网站| 在线精品无人区一区二区三| 国产精品一区二区免费欧美 | 在线av久久热| 丁香六月天网| 最新在线观看一区二区三区| 纯流量卡能插随身wifi吗| 日本一区二区免费在线视频| 久久国产精品影院| 天堂中文最新版在线下载| 黄色毛片三级朝国网站| 91麻豆精品激情在线观看国产 | 国产精品一区二区在线不卡| 日韩欧美国产一区二区入口| av网站免费在线观看视频| 久久青草综合色| tube8黄色片| 久久精品成人免费网站| 男人爽女人下面视频在线观看| 人人妻人人澡人人爽人人夜夜| 9色porny在线观看| 黄片小视频在线播放| 国产一卡二卡三卡精品| 国产区一区二久久| 亚洲专区中文字幕在线| 青草久久国产| 九色亚洲精品在线播放| 久久精品国产亚洲av高清一级| 美女福利国产在线| 国产精品二区激情视频| 男女国产视频网站| 午夜福利一区二区在线看| √禁漫天堂资源中文www| 国产在线观看jvid| 国产成人欧美在线观看 | 大码成人一级视频| 国产成人系列免费观看| 18禁裸乳无遮挡动漫免费视频| 国产野战对白在线观看| 久久这里只有精品19| 韩国精品一区二区三区| 日本一区二区免费在线视频| 女人被躁到高潮嗷嗷叫费观| 久久九九热精品免费| 性色av一级| 亚洲人成电影观看| 国产亚洲一区二区精品| a在线观看视频网站| 亚洲精品成人av观看孕妇| 精品福利永久在线观看| 欧美激情久久久久久爽电影 | 18禁裸乳无遮挡动漫免费视频| 色播在线永久视频| 一二三四社区在线视频社区8| 黄色怎么调成土黄色| 国产av一区二区精品久久| 日韩制服骚丝袜av| 欧美亚洲日本最大视频资源| 亚洲精品久久久久久婷婷小说| 老司机影院成人| 在线看a的网站| 手机成人av网站| 男女免费视频国产| 亚洲国产中文字幕在线视频| 欧美日韩国产mv在线观看视频| 国产免费现黄频在线看| 国产成人免费无遮挡视频| 久久av网站| 91大片在线观看| 国产av一区二区精品久久| 91麻豆精品激情在线观看国产 | 欧美中文综合在线视频| 在线永久观看黄色视频| 一级毛片电影观看| 免费少妇av软件| 婷婷丁香在线五月| av在线老鸭窝| 国产亚洲欧美精品永久| 日韩欧美一区视频在线观看| 国产又爽黄色视频| 国产国语露脸激情在线看| 老司机靠b影院| 欧美人与性动交α欧美精品济南到| 国产一级毛片在线| 国产色视频综合| 婷婷色av中文字幕| 免费高清在线观看日韩| 久久久精品国产亚洲av高清涩受| 国产在线一区二区三区精| 两人在一起打扑克的视频| 国产亚洲av片在线观看秒播厂| 欧美黄色淫秽网站| 美女中出高潮动态图| 日本猛色少妇xxxxx猛交久久| 午夜福利一区二区在线看| 高潮久久久久久久久久久不卡| 91成年电影在线观看| 国产精品久久久久久精品电影小说| 1024视频免费在线观看| 在线观看www视频免费| 国产欧美日韩一区二区精品| 亚洲伊人色综图| 欧美黄色淫秽网站| 国产日韩欧美在线精品| 欧美日韩亚洲国产一区二区在线观看 | 亚洲人成77777在线视频| 在线 av 中文字幕| 国产成人影院久久av| 久久久久久久大尺度免费视频| 午夜精品久久久久久毛片777| 涩涩av久久男人的天堂| 熟女少妇亚洲综合色aaa.| 男人添女人高潮全过程视频| 免费不卡黄色视频| 久久亚洲精品不卡| 黑人欧美特级aaaaaa片| 成人免费观看视频高清| 岛国在线观看网站| 欧美日韩成人在线一区二区| 天堂俺去俺来也www色官网| 亚洲美女黄色视频免费看| 少妇粗大呻吟视频| 亚洲av男天堂| 久久精品国产亚洲av香蕉五月 | 99国产精品一区二区蜜桃av | 多毛熟女@视频| 99精品欧美一区二区三区四区| 在线观看免费高清a一片| 久久99一区二区三区| 激情视频va一区二区三区| 女警被强在线播放| 波多野结衣av一区二区av| 久久ye,这里只有精品| 日韩熟女老妇一区二区性免费视频| 最新在线观看一区二区三区| 日韩电影二区| 久久久久久久久免费视频了| 欧美日韩中文字幕国产精品一区二区三区 | 久久久久久久国产电影| 欧美日韩一级在线毛片| videos熟女内射| 久久久久精品国产欧美久久久 | 这个男人来自地球电影免费观看| 婷婷成人精品国产| 99热国产这里只有精品6| 丝袜喷水一区| 久久ye,这里只有精品| 亚洲av电影在线进入| 天堂8中文在线网| 他把我摸到了高潮在线观看 | 国产99久久九九免费精品| 久久精品人人爽人人爽视色|