• <small id="4aaaa"></small>
    <tr id="4aaaa"></tr>
  • <nav id="4aaaa"></nav>
    <tr id="4aaaa"></tr>
  • 国产,欧美1区2区,亚洲精品A,色www88,特级西西4444www无码,黄色99,九九三级影视,3P无码,中文字幕av久久爽Av
    財訊中國

    Linux下的串口總線驅(qū)動(一)

    來源:網(wǎng)絡(luò) 2021-12-20 07:47:41
    一.系統(tǒng)理論

    PC機南橋的LPC總線(Low Pin Count并行總線,代替以前的ISA總線)上掛接了一個超級I/O模塊,而UART是這個超級模塊芯片組的一部分,這個UART通過RS232線程轉(zhuǎn)換與串行端口相連。與RS232不同,RS485并不是標(biāo)準(zhǔn)的PC接口,但在嵌入式領(lǐng)域,會為了可靠通信而使用RS485,RS485使用差分信號,因此其傳輸距離可以達到數(shù)百米,而RS232傳輸距離僅數(shù)幾米,在處理器一端,RS485接口是半雙工的UART操作。

    Linux包含如下幾種終端設(shè)備:串行端口終端(/dev/ttySn)、偽終端(/dev/pty)、控制終端(/dev/tty)、控制臺終端(/dev/ttyn,/dev/conslole)。串行端口終端使用的設(shè)備名為/dev/ttyS0,/dev/ttyS1等,對應(yīng)的設(shè)備號為(4,0),(4,1)。通過查看/proc/tty/drivers文件可以知道什么類型的tty設(shè)備存在以及什么驅(qū)動被加載到內(nèi)核,這個文件包括一個當(dāng)前存在的不同tty驅(qū)動的列表,包括驅(qū)動名,缺省的節(jié)點名,驅(qū)動的主編號,驅(qū)動的次編號范圍,以及tty驅(qū)動的類型。

    I/O系統(tǒng)調(diào)用是從帶有線路規(guī)程的TTY I/O核心開始,然后通過TTY層,最后到達UART驅(qū)動層。主要涉及串口內(nèi)核配置、UART層內(nèi)核代碼、TTY層內(nèi)核代碼、線路規(guī)程內(nèi)核代碼、串口測試代碼五個部分。

    二.串口內(nèi)核配置

    對于Mini2440串口驅(qū)動,我想從配置開始講起。在內(nèi)核中Kconfig必須完成一層層調(diào)用,如果沒有在上一個Kconfig中調(diào)用該層Kconfig,那么該層Kconfig中的內(nèi)容不會在此出現(xiàn)。這種情況下,只有當(dāng)該層的Kconfig被其他層調(diào)用,該層Kconfig中的內(nèi)容才會被顯示。所以我們找找drivers/serial/Kconfig在哪里被調(diào)用的呢?

    在/drivers/char/kconfig中可以看到一行代碼source "drivers/serial/Kconfig",那我們就到drivers/serial/Kconfig下看看

    Samsung SoC serial support對應(yīng)于samsung.oserial_core.o

    config SERIAL_SAMSUNG

    tristate "Samsung SoC serial support"

    depends on ARM && PLAT_S3C

    select SERIAL_CORE

    Support for console on Samsung SoC serial port對應(yīng)于控制臺驅(qū)動

    Samsung S3C2440/S3C2442 Serial port support對應(yīng)于s3c2440.o

    在/drivers/char/Makefile中可以看到

    obj-y+= mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o tty_buffer.o tty_port.o

    我們知道tty_io.on_tty.o tty_ioctl.otty_ldisc.o tty_buffer.o tty_port.o已編入內(nèi)核

    自此,我們知道關(guān)于串口驅(qū)動,我們內(nèi)核中被編譯了s3c2440.osamsung.oserial_core.o tty_io.on_tty.o tty_ioctl.otty_ldisc.o tty_buffer.o tty_port.o

    我們對此進行分類,屬于UART層的是s3c2440.osamsung.o;屬于TTY層的是serial_core.o;屬于線路規(guī)程的是tty_io.on_tty.o tty_ioctl.otty_ldisc.o tty_buffer.o tty_port.o 。

    好了,對于串口的地圖我們已經(jīng)分析好了,那我們就按照UART層,TTY層,線路規(guī)程一個個的逛逛吧。

    三.UART層內(nèi)核代碼

    我們先看看samsung.o的init代碼吧,這里面完成了uart_driver的注冊

    static int __init s3c24xx_serial_modinit(void)

    {

    int ret;

    ret = uart_register_driver(&s3c24xx_uart_drv);//注冊uart_driver

    if (ret < 0) {

    printk(KERN_ERR "failedto register UART driver\n");

    return -1;

    }

    return 0;

    }

    static struct uart_driver s3c24xx_uart_drv = {

    .owner= THIS_MODULE,

    .dev_name= "s3c2410_serial", //設(shè)備名

    .nr= CONFIG_SERIAL_SAMSUNG_UARTS,//UART端口個數(shù)

    .cons= S3C24XX_SERIAL_CONSOLE,//指向控制臺結(jié)構(gòu)

    .driver_name= S3C24XX_SERIAL_NAME,//驅(qū)動的名字

    .major= S3C24XX_SERIAL_MAJOR,//串口主設(shè)備號

    .minor= S3C24XX_SERIAL_MINOR,//串口次設(shè)備號

    };

    我們關(guān)注下上面這個結(jié)構(gòu)體中一個成員S3C24XX_SERIAL_CONSOLE

    #define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console

    static struct console s3c24xx_serial_console = {

    .name= S3C24XX_SERIAL_NAME,

    .device= uart_console_device,

    .flags= CON_PRINTBUFFER,

    .index= -1,

    .write= s3c24xx_serial_console_write,

    .setup= s3c24xx_serial_console_setup

    };

    上面是控制臺的結(jié)構(gòu)體成員。

    對于UART驅(qū)動,我們除了需要注冊uart_driver外,還需要注冊端口,我們看看s3c2440.o。

    這個文件里面注冊了一個平臺設(shè)備,其中平臺設(shè)備的探測函數(shù)最終調(diào)用了samsung.o中的s3c24xx_serial_probe函數(shù)。

    int s3c24xx_serial_probe(struct platform_device *dev,

    struct s3c24xx_uart_info *info)

    {

    struct s3c24xx_uart_port *ourport;

    int ret;

    dbg("s3c24xx_serial_probe(%p, %p) %d\n", dev, info, probe_index);

    ourport = &s3c24xx_serial_ports[probe_index]; //選擇s3c24xx_uart_port

    probe_index++; //索引號自增

    dbg("%s: initialising port %p...\n", __func__, ourport);

    ret = s3c24xx_serial_init_port(ourport, info, dev);//初始化串口

    if (ret < 0)

    goto probe_err;

    dbg("%s: adding port\n", __func__);

    uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); //向內(nèi)核注冊端口

    platform_set_drvdata(dev, &ourport->port); //設(shè)置私有數(shù)據(jù)

    ret = device_create_file(&dev->dev, &dev_attr_clock_source); //添加設(shè)備屬性

    if (ret < 0)

    printk(KERN_ERR "%s: failed to add clksrc attr.\n", __func__);

    ret = s3c24xx_serial_cpufreq_register(ourport);//注冊CPU頻率

    if (ret < 0)

    dev_err(&dev->dev, "failed to add cpufreq notifier\n");

    return 0;

    probe_err:

    return ret;

    }

    通過上面的函數(shù),我們發(fā)現(xiàn)在UART層,我們調(diào)用了uart_add_one_port函數(shù)完成端口的添加,我們來看看添加了什么端口呢?

    static struct s3c24xx_uart_port s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {

    [0] = {

    .port = {

    .lock= __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock),

    .iotype= UPIO_MEM,

    .irq= IRQ_S3CUART_RX0,

    .uartclk= 0,

    .fifosize= 16,

    .ops= &s3c24xx_serial_ops,//對UART操作的函數(shù)

    .flags= UPF_BOOT_AUTOCONF,

    .line= 0,

    }

    },

    [1] = {

    .port = {

    .lock= __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[1].port.lock),

    .iotype= UPIO_MEM,

    .irq= IRQ_S3CUART_RX1,

    .uartclk= 0,

    .fifosize= 16,

    .ops= &s3c24xx_serial_ops,//對UART操作的函數(shù)

    .flags= UPF_BOOT_AUTOCONF,

    .line= 1,

    }

    },

    #if CONFIG_SERIAL_SAMSUNG_UARTS >2

    [2] = {

    .port = {

    .lock= __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[2].port.lock),

    .iotype= UPIO_MEM,

    .irq= IRQ_S3CUART_RX2,

    .uartclk= 0,

    .fifosize= 16,

    .ops= &s3c24xx_serial_ops,//對UART操作的函數(shù)

    .flags= UPF_BOOT_AUTOCONF,

    .line= 2,

    }

    },

    #endif

    #if CONFIG_SERIAL_SAMSUNG_UARTS >3

    [3] = {

    .port = {

    .lock= __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[3].port.lock),

    .iotype= UPIO_MEM,

    .irq= IRQ_S3CUART_RX3,

    .uartclk= 0,

    .fifosize= 16,

    .ops= &s3c24xx_serial_ops,//對UART操作的函數(shù)

    .flags= UPF_BOOT_AUTOCONF,

    .line= 3,

    }

    }

    #endif

    };

    在端口的定義中,我們知道s3c24xx_uart_port中定義了一個uart_port結(jié)構(gòu)體,繼續(xù)跟蹤對UART的操作函數(shù)

    static struct uart_ops s3c24xx_serial_ops = {

    .pm= s3c24xx_serial_pm,

    .tx_empty= s3c24xx_serial_tx_empty,//發(fā)送是否忙

    .get_mctrl= s3c24xx_serial_get_mctrl,

    .set_mctrl= s3c24xx_serial_set_mctrl,

    .stop_tx= s3c24xx_serial_stop_tx,

    .start_tx= s3c24xx_serial_start_tx,//類似于write

    .stop_rx= s3c24xx_serial_stop_rx,

    .enable_ms= s3c24xx_serial_enable_ms,

    .break_ctl= s3c24xx_serial_break_ctl,

    .startup= s3c24xx_serial_startup,//類似于open

    .shutdown= s3c24xx_serial_shutdown,//類似于close

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

    .type= s3c24xx_serial_type,

    .release_port= s3c24xx_serial_release_port,//釋放端口資源

    .request_port= s3c24xx_serial_request_port,//申請端口資源

    .config_port= s3c24xx_serial_config_port,//配置端口

    .verify_port= s3c24xx_serial_verify_port,

    };

    對于上述uart_ops函數(shù),我們需要自己去實現(xiàn)uart層的具體操作。

    我們在UART層主要涉及uart_driver,uart_port,uart_ops三個結(jié)構(gòu)體,并調(diào)用tty層的uart_register_driver和uart_add_one_port完成驅(qū)動和端口的注冊,UART層具體操作函數(shù)需要用戶自己設(shè)計。

    好了,總結(jié)下UART驅(qū)動層需要完成的任務(wù):

    其一,定義uart_driver、uart_ops、uart_port等結(jié)構(gòu)體的實例并在適當(dāng)?shù)牡胤礁鶕?jù)具體硬件和驅(qū)動的情況初始化它們,當(dāng)然具體設(shè)備XXX的驅(qū)動可以將這些結(jié)構(gòu)套在新定義的XXX_uart_driver、XXX_uart_ops、XXX_uart_port之內(nèi)。

    其二,在模塊初始化時調(diào)用uart_register_driver()和uart_add_one_port()以注冊UART驅(qū)動并添加端口,在模塊卸載時調(diào)用uart_unregister_driver()和uart_remove_one_port()以注銷UART驅(qū)動并移除端口。

    其三,根據(jù)具體硬件的datasheet實現(xiàn)uart_ops中的成員函數(shù),這些函數(shù)的實現(xiàn)成為UART驅(qū)動的主體工作。

    關(guān)鍵詞: Linux串口總線驅(qū)

    相關(guān)新聞

    走安順進定西 海信冰箱再現(xiàn)教育扶貧“山海情”
    2022-01-17 13:48:41
    最強性能二合一輕薄本ROG幻X 1月24日即將開啟預(yù)約
    2022-01-17 13:48:30
    小米豎向折疊屏 價格有驚喜主打女性市場
    2022-01-17 13:48:19
    QQ飛車手游S聯(lián)賽總決賽 真我GT2系列成2022官方指定用機
    2022-01-17 13:48:08
    免費獲得小米有品會員!小米有品有魚App3月停運給用戶送福利
    2022-01-17 13:47:57
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-17 13:46:06
    【手慢無】240GB固態(tài)秒殺促銷 僅售168元
    2022-01-17 12:12:24
    AMD新款Radeon Pro專業(yè)卡:終于用上6nm
    2022-01-17 12:12:16
    《永劫無間》再曝新英雄 顧清寒傲立雪中
    2022-01-17 12:12:07
    三星新品發(fā)布會2月9日召開 S22系列即將登場
    2022-01-17 12:12:00
    12月顯卡出貨量下降19%,還是漲價的鍋
    2022-01-17 12:11:52
    Intel i5-12400性能暴漲30%!還是超頻管用
    2022-01-17 12:11:44
    黑鯊和玩家同在!新機沿用SSD存儲?
    2022-01-17 12:11:36
    是買不起的樣子:3090ti起步2萬3
    2022-01-17 12:11:27
    無線充電加持!曝iPad Pro 6升級M2處理器
    2022-01-17 12:11:19
    寧德時代:不差錢還融資是為了增產(chǎn)
    2022-01-17 12:11:11
    好評94%!7萬在線!《戰(zhàn)神》PC版瘋了
    2022-01-17 12:11:00
    【必買】支持MagSafe磁吸功能 魅族PANDAER“黑化獨角獸”手機殼支持iPhone 13系列
    2022-01-17 12:10:53
    騰訊游戲:寒假打游戲的時間最多14個小時
    2022-01-17 12:10:43
    1小時游玩假?騰訊春節(jié)防沉迷日歷發(fā)布
    2022-01-17 12:10:34
    2月9日亮相 Galaxy S22全新配色將來襲
    2022-01-17 12:10:23
    京東2022年將招聘超2萬高校畢業(yè)生
    2022-01-17 12:10:15
    美國拍賣5G頻譜 運營商投入超300億美元
    2022-01-17 12:10:06
    8088元起 微軟Surface Pro 8 商用版正式開售
    2022-01-17 12:09:58
    起售或是250歐元 Redmi Note 11將在歐洲發(fā)布
    2022-01-17 12:09:50
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-17 12:08:06
    好料好味道,有禮有年味——京味客祝您虎年福禮滿滿
    好料好味道,有禮有年味——京味客祝您虎年福禮滿滿
    2022-01-17 10:59:35
    iPad Pro 6曝光:配置拉滿 3月發(fā)布 7000起
    2022-01-17 10:58:23
    非公RTX 3090 Ti顯卡海外竟上架:最貴2.9萬 翻了一倍
    2022-01-17 10:58:14
    三星2月9日發(fā)布S22系列:真機在官網(wǎng)曝光
    2022-01-17 10:58:03
    三星S21手機限時立減1450 現(xiàn)3549 今晚截止
    2022-01-17 10:56:24
    2022年第五屆CRO全球責(zé)任峰會成功舉辦
    2022年第五屆CRO全球責(zé)任峰會成功舉辦
    2022-01-17 10:55:22
    三星全年賣3億臺手機:賣最多的不是S21
    2022-01-17 10:55:01
    售價過萬!曝三星Galaxy S22 Ultra有1TB版
    2022-01-17 10:54:49
    2022年P(guān)S5必買游戲榜單:照著買沒錯
    2022-01-17 10:54:40
    【手慢無】新裝機神器 i5-12400F處理器1499元熱銷
    2022-01-17 10:54:30
    英特爾13代酷睿或?qū)⒃龃缶彺嫒萘?L2 + L3達到68 MB
    2022-01-17 10:54:20
    功耗爆表 i5-12400超頻至 5.2 GHz
    2022-01-17 10:54:07
    配有手寫筆 moto G Stylus手機視頻曝光:屏幕開孔位于中央
    2022-01-17 10:53:50
    小米MIX FOLD2真機上手圖曝光 內(nèi)屏無挖孔
    2022-01-17 10:53:38
    通話變吵鬧?iPhone13移除電話降噪功能
    2022-01-17 10:53:25
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-17 10:49:36
    周秉鈞韓銀山一行參觀廣東東江縱隊紀(jì)念館
    周秉鈞韓銀山一行參觀廣東東江縱隊紀(jì)念館
    2022-01-17 09:21:35
    小米新機海外發(fā)售:竟然比小米12 Pro強
    2022-01-17 09:09:34
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-17 09:08:04
    iPad Pro 6曝光:升級M2處理器并支持120HZ高刷新率
    iPad Pro 6曝光:升級M2處理器并支持120HZ高刷新率
    2022-01-17 08:41:04
    蘋果新旗艦AR設(shè)備曝光:可支持8K分辨率,售價超萬元
    蘋果新旗艦AR設(shè)備曝光:可支持8K分辨率,售價超萬元
    2022-01-17 08:38:24
    三星S22 Ultra曝光:12GB+512GB版本售價超萬元
    三星S22 Ultra曝光:12GB+512GB版本售價超萬元
    2022-01-17 08:33:04
    成本上升!曝AMD EPYC處理器漲價10%~30%!
    成本上升!曝AMD EPYC處理器漲價10%~30%!
    2022-01-17 08:31:18
    中國區(qū)12月顯卡出貨量出爐:七彩虹近20萬出貨量穩(wěn)坐第一
    中國區(qū)12月顯卡出貨量出爐:七彩虹近20萬出貨量穩(wěn)坐第一
    2022-01-17 08:28:59
    Intel i5-12400全核超頻5.2GHz:最大加速功耗117W
    Intel i5-12400全核超頻5.2GHz:最大加速功耗117W
    2022-01-17 08:27:51
    微信iOS版更新加入語音暫停功能:長語音消息可暫停并繼續(xù)播放
    微信iOS版更新加入語音暫停功能:長語音消息可暫停并繼續(xù)播放
    2022-01-17 08:26:14
    低級錯誤!火狐瀏覽器無法上網(wǎng)原因竟是程序員大小寫搞錯了
    低級錯誤!火狐瀏覽器無法上網(wǎng)原因竟是程序員大小寫搞錯了
    2022-01-17 08:24:11
    藏起來我就用不了了?教你如何在Win11上找出隱藏IE瀏覽器
    藏起來我就用不了了?教你如何在Win11上找出隱藏IE瀏覽器
    2022-01-17 08:22:23
    一鍵切換不用愁!Win11必備小工具讓體驗更順手
    一鍵切換不用愁!Win11必備小工具讓體驗更順手
    2022-01-17 08:18:40
    想讓W(xué)in11運行Win10開始菜單 下載這個小程序 1秒解決
    2022-01-17 07:42:21
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-17 07:40:45
    專業(yè)卡也用上6nm?AMD新款Radeon Pro專業(yè)卡曝光
    2022-01-17 06:11:37
    PC畫質(zhì)居然更優(yōu)秀?《戰(zhàn)神4》三平臺對比
    2022-01-17 06:11:29
    顯卡盲盒!800塊有機會抽到RTX3090
    2022-01-17 06:11:22
    Intel 13代酷睿緩存或?qū)⑻嵘?8MB
    2022-01-17 06:11:14
    三星Galaxy S22發(fā)布會將在2月9日23:00開啟
    2022-01-17 06:11:07
    Powerbeats用戶集體起訴蘋果
    2022-01-17 06:10:59
    史上最爛《戰(zhàn)地》續(xù)作!外掛都不想為其更新
    2022-01-17 06:10:52
    44萬人強力圍觀 小米之家山西分舵開了個話題直接上熱搜
    2022-01-17 06:10:44
    Win11測試出現(xiàn)亂碼!中文閱讀受到影響
    2022-01-17 06:10:34
    雷蛇靈刃14發(fā)布:標(biāo)配銳龍9 6900HX 頂配3080Ti 售價1.3萬
    2022-01-17 06:10:25
    美國玩家也氪金!《原神》2021年在美國狂賺近25億人民幣
    2022-01-17 06:10:17
    小米平板5系列全量更新MIUI13 不會更新的看這里
    2022-01-17 06:10:09
    蘋果首次允許App內(nèi)第三方支付
    2022-01-17 06:10:00
    十年了!Windows11新音量調(diào)節(jié)指示器
    2022-01-17 06:09:52
    買得起Kindle看不起書 到底誰在為電子水墨屏買單?
    2022-01-17 06:09:44
    摩托羅拉新機曝光 搭載驍龍SM8475+125W快充
    2022-01-17 06:09:34
    威剛秀肌肉!PCIe 5.0固態(tài)讀取速度恐怖!14GB/s
    2022-01-17 06:09:25
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-17 06:08:02
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-16 22:46:35
    曝iPhone 14全系標(biāo)配120Hz:起售價還是5999
    2022-01-16 21:09:44
    ROG新品!在CES推出42英寸顯示器 OLED面板
    2022-01-16 21:09:33
    12代酷睿新品!雷神推出游戲/設(shè)計新主機
    2022-01-16 21:09:21
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-16 21:08:01
    Moto新機曝光,即將開啟兩億像素新時代
    2022-01-16 19:41:57
    小米11系列開啟推送MIUI 13系統(tǒng),公測反饋良好
    2022-01-16 19:41:44
    紅魔7跑分、配置曝光,單核1219,多核3732
    2022-01-16 19:40:37
    Redmi K50 高配版有望搭載索尼 IMX766 傳感器
    2022-01-16 19:40:15
    解決鍍金端子氧化發(fā)黑問題 蘋果將推新版Lightning充電線
    2022-01-16 19:40:02
    120Hz高刷 OPPO平板電腦現(xiàn)身跑分網(wǎng)站
    2022-01-16 19:39:51
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-16 19:38:29
    2000元到手 驍龍680版Redmi Note11要來
    2022-01-16 18:10:05
    2月9日見!三星S22系列手機發(fā)布會定檔
    2022-01-16 18:09:49
    小米 11 Ultra開啟內(nèi)測NFC“讀寫勿擾”與“解鎖后使用”功能
    2022-01-16 18:09:35
    后置四攝 紅米Redmi Note 11S渲染圖曝光
    2022-01-16 18:09:21
    曝真我GT2 Pro春節(jié)前上市 20日舉行預(yù)溝通會
    2022-01-16 18:08:02
    現(xiàn)磨咖啡5元一杯 蜜雪冰城討好小鎮(zhèn)青年
    2022-01-16 17:18:11
    又一家中資企業(yè)打入日本加密貨幣市場 Amber數(shù)億日元買下持牌交易所
    2022-01-16 17:17:59
    電動車 沒有新革命
    2022-01-16 17:17:47
    電動車“私樁共享可行嗎”引熱議 威馬汽車創(chuàng)始人給答案
    2022-01-16 17:17:37
    防疲勞、還是導(dǎo)航信號?高速路上的綠色激光燈有什么用?
    2022-01-16 17:17:25
    AT&T、Dish和T-Mobile投入數(shù)十億美元購買更多5G頻譜
    2022-01-16 17:17:14
    美國稅局可能會對NFT和加密貨幣征收不同的稅
    2022-01-16 17:17:03
    虛擬偶像滿足粉絲想象?專家預(yù)警或影響結(jié)婚生子
    2022-01-16 17:16:50

    熱門文章

    熱點專題