欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

i.MX6ULL platform驅(qū)動匹配機制詳解與probe不調(diào)用排查思路

i.MX6ULL platform驅(qū)動匹配機制詳解與probe不調(diào)用排查思路 前幾天幫同事調(diào)i.MX6ULL的驅(qū)動現(xiàn)象非常典型模塊加載了日志里卻沒有probe函數(shù)的打印。設(shè)備樹里compatible屬性的值和驅(qū)動of_match_table里的字符串肉眼看上去一模一樣就是匹配不上。最后我在/sys/bus/platform目錄下翻了半天才發(fā)現(xiàn)設(shè)備樹節(jié)點compatible值的末尾多了一個不可見的空格。這類問題根子都在對Platform設(shè)備與驅(qū)動匹配機制的理解還停留在“大概知道”的層面。本文就以i.MX6ULL平臺為例把platform總線的匹配機制、代碼路徑、實操套路和排錯思路完整串一遍。如果你正準備入門i.MX6ULL或者其他Cortex-A系列芯片的Linux驅(qū)動開發(fā)或者寫過platform驅(qū)動但老是栽在匹配環(huán)節(jié)這篇應(yīng)該能幫你省不少時間。1. 為什么i.MX6ULL上的外設(shè)多半繞不開platform機制1.1 從硬件控制器的角度理解platform設(shè)備的來源i.MX6ULL是一顆Cortex-A7內(nèi)核的處理器但芯片內(nèi)部集成了大量外設(shè)控制器比如UART、I2C、SPI(ECSPI)、SDIO、GPIO、PWM、ADC、LCDIF、ENET等。這些控制器從軟件角度看本質(zhì)就是一段寄存器地址區(qū)域加上若干中斷號但在Linux設(shè)備模型里它們需要被抽象成設(shè)備節(jié)點掛到某一類總線上。問題在于這些控制器不是PCI設(shè)備也無法枚舉它們的位置和資源在硬件設(shè)計時就固定了。Linux內(nèi)核為這類“掛不到真實總線上的片上外設(shè)”設(shè)計了一條虛擬總線就是platform總線。i.MX6ULL上幾乎每一個內(nèi)部外設(shè)控制器在內(nèi)核啟動后都會注冊成一個platform_device。設(shè)計上通常分兩步第一步是描述硬件傳統(tǒng)方式是在arch/arm/mach-imx/目錄下的板級文件里手動填充platform_device結(jié)構(gòu)體并調(diào)用platform_device_register這種方式在內(nèi)核3.x時代很常見第二步是現(xiàn)在主流的設(shè)備樹方式內(nèi)核在啟動過程中通過of_platform_default_populate等函數(shù)解析設(shè)備樹把節(jié)點自動轉(zhuǎn)換成platform_device。設(shè)備樹之所以能成為主流核心原因是解決了硬件描述與驅(qū)動代碼耦合的問題更換板卡硬件時不用重新編譯內(nèi)核只改設(shè)備樹文件。在i.MX6ULL的官方BSP里默認就是設(shè)備樹方式。你在設(shè)備樹里寫一個節(jié)點內(nèi)核啟動后就可以在/sys/bus/platform/devices/目錄下看到對應(yīng)的設(shè)備目錄。1.2 platform設(shè)備與platform驅(qū)動的注冊時機剛學(xué)驅(qū)動的人很容易有一個困惑驅(qū)動和設(shè)備到底誰先注冊probe函數(shù)什么時候調(diào)用這里的關(guān)鍵是理解Linux設(shè)備模型的事件驅(qū)動機制。當(dāng)驅(qū)動注冊時總線會遍歷所有已經(jīng)注冊的設(shè)備逐個調(diào)用匹配函數(shù)尋找合適的設(shè)備找到就立刻調(diào)用驅(qū)動的probe反過來當(dāng)設(shè)備注冊時總線也會遍歷所有已經(jīng)注冊的驅(qū)動找到匹配項就觸發(fā)probe。所以注冊順序本身不影響最終是否能匹配上只影響probe觸發(fā)的早晚。如果兩個都注冊完成后還沒匹配上那就是匹配條件本身出了問題這也是調(diào)試時的基本判斷方向。在i.MX6ULL的啟動流程里設(shè)備樹解析生成platform_device的動作發(fā)生得比較早通常在kernel_init之前。而驅(qū)動模塊如果選擇編譯為模塊(.ko)則是在系統(tǒng)啟動后由modprobe或insmod加載。操作系統(tǒng)會先存在設(shè)備再補充驅(qū)動如果驅(qū)動編譯進內(nèi)核(zImage)則設(shè)備和驅(qū)動的注冊順序就不一定了但各自注冊時都會去掃描對方所以probe依然會正常觸發(fā)。1.3 platform總線在sysfs中的組織結(jié)構(gòu)/sys/bus/platform/目錄下有兩個關(guān)鍵子目錄devices/和drivers/。devices目錄下面是所有platform設(shè)備的軟鏈接drivers目錄下面是所有platform驅(qū)動的軟鏈接。當(dāng)驅(qū)動和設(shè)備匹配成功后設(shè)備目錄下會多出一個driver鏈接指向?qū)?yīng)的驅(qū)動目錄同時驅(qū)動目錄下也會出現(xiàn)設(shè)備的鏈接。這個雙向鏈接是判斷綁定關(guān)系最直觀的依據(jù)。我在調(diào)試時幾乎離不開這個目錄。設(shè)備有沒有注冊、驅(qū)動有沒有加載、綁定關(guān)系是否建立ls一下馬上就知道。這篇文章后續(xù)的排錯環(huán)節(jié)很多操作也是圍繞這個目錄展開的。2. platform_match的執(zhí)行順序驅(qū)動和設(shè)備到底怎么“對上眼”2.1 內(nèi)核源碼里platform_match的完整邏輯platform_driver和platform_device的匹配入口是platform_match函數(shù)定義在drivers/base/platform.c中。以Linux 5.x/6.x內(nèi)核為例核心邏輯如下static int platform_match(struct device *dev, struct device_driver *drv) { struct platform_device *pdev to_platform_device(dev); struct platform_driver *pdrv to_platform_driver(drv); /* When driver_override is set, only bind to the matching driver */ if (pdev-driver_override) return !strcmp(pdev-driver_override, drv-name); /* Attempt an OF style match first */ if (of_driver_match_device(dev, drv)) return 1; /* Then try ACPI style match */ if (acpi_driver_match_device(dev, drv)) return 1; /* Then try to match against the id table */ if (pdrv-id_table) return platform_match_id(pdev, pdrv-id_table) ! NULL; /* fall-back to driver name match */ return (strcmp(pdev-name, drv-name) 0); }這五步的優(yōu)先級是硬編碼的從上到下依次執(zhí)行命中即返回。理解這個順序?qū)φ{(diào)試很多匹配問題非常有幫助。2.2 五種匹配方式的適用場景先看driver_override這是留給調(diào)試和特殊場景用的“后門”。如果設(shè)備節(jié)點的driver_override屬性被設(shè)置那么只和這個字段指定的驅(qū)動名進行字符串比較其他匹配方式全部跳過。我一般用它來強制綁定某個驅(qū)動或者在設(shè)備樹不便于修改的板子上暫時切換驅(qū)動后面排錯章節(jié)會詳細演示。接著是of_driver_match_device這是i.MX6ULL設(shè)備樹平臺最常用的匹配路徑。它做的事可以理解為取出device_node的compatible屬性和驅(qū)動的of_device_id數(shù)組中每個成員的compatible字段逐一比較只要有任何一個字符串相等就返回匹配。注意compatible比較要求完全相等包括廠商前綴和大小寫一個字符不對都不行。然后是acpi_driver_match_devicex86平臺和部分ARM服務(wù)器平臺會走ACPI路徑i.MX6ULL這種典型嵌入式平臺幾乎不用但代碼邏輯存在不影響什么。再然后是platform_match_id這是給沒有設(shè)備樹的老式驅(qū)動用的。驅(qū)動可以定義一個platform_device_id數(shù)組static const struct platform_device_id mybeep_id_table[] { { mybeep, 0 }, { } };platform_match_id會拿設(shè)備的name字段和id_table里的name做比較。那什么時候會走上這條路呢最常見的就是沒有設(shè)備樹、設(shè)備通過platform_device_register注冊的場景設(shè)備名字就是在platform_device結(jié)構(gòu)體里指定的那個字符串。最后一步是退化匹配直接把pdev-name和drv-driver.name做字符串比較。這種寫法在很老的驅(qū)動里能看到比如static struct platform_driver mybeep_driver { .driver { .name mybeep, }, .probe mybeep_probe, .remove mybeep_remove, };如果設(shè)備樹里的節(jié)點沒有compatible屬性且設(shè)備節(jié)點名為mybeep驅(qū)動名也叫mybeep走這一步就能匹配上。但這屬于“祖?zhèn)鲗懛ā痹谛麓a里不推薦依賴它。一方面它太隱晦可讀性差另一方面設(shè)備樹節(jié)點的name字段通常包含總線前綴或單元地址和驅(qū)動名不一定對得上。規(guī)范做法是使用of_match_table或id_table。2.3 設(shè)備樹compatible與of_match_table的對應(yīng)邏輯static const struct of_device_id mybeep_of_match[] { { .compatible myvendor,mybeep, }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, mybeep_of_match);關(guān)于MODULE_DEVICE_TABLE很多人以為它只是給用戶態(tài)工具看的其實它還有一層重要含義它會在編譯時生成模塊別名把of_device_id里的compatible字符串編碼進.modinfo段。這樣modprobe在加載模塊時可以通過內(nèi)核發(fā)送的uevent事件自動匹配設(shè)備。驅(qū)動編譯為模塊后用modinfo檢查能看到類似aliasof:NTCmyvendor,mybeep的信息有這個信息才說明模塊別名生成正確。我在寫platform驅(qū)動時的習(xí)慣是只要面對的是設(shè)備樹平臺of_match_table一定寫id_table可以不寫name退化匹配基本不考慮。這是最清晰、最不容易出錯的路徑。3. 在i.MX6ULL上實操從設(shè)備樹到probe觸發(fā)的完整過程3.1 一個最簡單的beep硬件設(shè)備與設(shè)備樹描述以一塊i.MX6ULL開發(fā)板上的蜂鳴器為例。蜂鳴器的控制引腳通常接到某個GPIO上比如GPIO5_IO01具體引腳以你板子原理圖為準。硬件上無非是給GPIO輸出高電平就響輸出低電平就停。設(shè)備樹里我習(xí)慣這樣描述/ { mybeep { compatible myvendor,mybeep; pinctrl-names default; pinctrl-0 pinctrl_mybeep; mybeep-gpios gpio5 1 GPIO_ACTIVE_HIGH; status okay; }; };引腳復(fù)用配置放在iomuxc節(jié)點下iomuxc { pinctrl_mybeep: mybeepgrp { fsl,pins MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x17059 ; }; };MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01這個宏由SDK提供位于imx6ull-pinfunc.h頭文件具體引腳對應(yīng)的宏名以你的BSP為準。0x17059是引腳配置值包含了上下拉、驅(qū)動能力、速度等設(shè)置。這里不展開講怎么算直接用SDK推薦的配置值就可以。3.2 platform驅(qū)動代碼骨架與加載后的sysfs變化驅(qū)動的代碼結(jié)構(gòu)如下#include linux/module.h #include linux/platform_device.h #include linux/of.h #include linux/gpio/consumer.h static int mybeep_probe(struct platform_device *pdev) { struct device *dev pdev-dev; struct gpio_desc *desc; desc devm_gpiod_get(dev, mybeep, GPIOD_OUT_LOW); if (IS_ERR(desc)) { dev_err(dev, failed to get mybeep gpio: %ld\n, PTR_ERR(desc)); return PTR_ERR(desc); } dev_info(dev, mybeep probe ok, beep on\n); gpiod_set_value(desc, 1); return 0; } static void mybeep_remove(struct platform_device *pdev) { struct device *dev pdev-dev; dev_info(dev, mybeep removed\n); } static const struct of_device_id mybeep_of_match[] { { .compatible myvendor,mybeep, }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, mybeep_of_match); static struct platform_driver mybeep_driver { .probe mybeep_probe, .remove mybeep_remove, .driver { .name mybeep, .of_match_table mybeep_of_match, }, }; module_platform_driver(mybeep_driver); MODULE_LICENSE(GPL); MODULE_DESCRIPTION(i.MX6ULL beep platform driver);注意編譯鏡像時設(shè)備樹源文件(dts)要加入編譯列表如果手動用fdtdump或dtc工具查看dtb確認節(jié)點確實存在再加載驅(qū)動模塊。模塊加載命令insmod mybeep.ko加載后先看dmesgdmesg | tail -20正常情況下會看到“mybeep probe ok”。再檢查sysfsls -l /sys/bus/platform/devices/mybeep/driver lrwxrwxrwx 1 root root 0 Jan 1 00:00 /sys/bus/platform/devices/mybeep/driver - ../../../bus/platform/drivers/mybeep這個尾部箭頭指向mybeep驅(qū)動說明設(shè)備與驅(qū)動已經(jīng)綁定probe成功執(zhí)行。3.3 驅(qū)動、設(shè)備和probe的對應(yīng)關(guān)系我見過不少初學(xué)者在probe里寫了一堆初始化但完全沒搞懂probe為什么能拿到pdev參數(shù)。platform_driver的probe回調(diào)簽名為int (*probe)(struct platform_device *)這個參數(shù)就是匹配上的那個platform_device。probe里通過pdev-dev拿到struct device指針之后就可以用devm系列API、device_property系列API訪問設(shè)備樹屬性、GPIO、中斷等資源。probe的本質(zhì)是“驅(qū)動被允許操作設(shè)備”的入口不是驅(qū)動模塊加載入口。驅(qū)動的模塊加載入口其實是由module_platform_driver宏展開時的module_init函數(shù)完成的它負責(zé)調(diào)用platform_driver_register最終在總線匹配成功后觸發(fā)probe。理解這個層次排查問題思路就會清晰很多。4. probe沒調(diào)用怎么排查我在i.MX6ULL上的完整debug鏈路4.1 一次典型的匹配失敗復(fù)現(xiàn)假設(shè)驅(qū)動加載后dmesg沒有probe日志先從最基礎(chǔ)的確認開始。第一步確認設(shè)備樹節(jié)點是否被內(nèi)核解析ls /proc/device-tree/mybeep/ cat /proc/device-tree/mybeep/compatible/proc/device-tree是設(shè)備樹在內(nèi)存中的展開形式節(jié)點存在就說明設(shè)備樹里確實有這個節(jié)點而且dtb已經(jīng)正確加載。cat compatible時建議用xxd或od查看十六進制因為compatible值在設(shè)備樹里是字符串?dāng)?shù)組用cat可能看不到結(jié)尾空格或不可見字符。我當(dāng)初遇到的那個多一個空格的坑就是靠xxd查出來的xxd /proc/device-tree/mybeep/compatible 00000000: 6d79 7665 6e64 6f72 2c6d 7962 6565 700a myvendor,mybeep.看到末尾的0x0a了嗎當(dāng)時我們設(shè)備樹里字符串后面多了一個換行符。compatible的字符串比較是逐字節(jié)進行的一個多余字符就會導(dǎo)致匹配失敗。如果cat顯示正常、情況又非常詭異一定要用xxd確認原始字節(jié)。4.2 確認platform_device與platform_driver兩端的注冊情況設(shè)備樹節(jié)點解析成功后內(nèi)核還未必生成了platform_device。用下面的命令看設(shè)備端ls /sys/bus/platform/devices/如果mybeep目錄不存在說明設(shè)備沒有注冊成功問題出在設(shè)備樹解析階段常見原因包括節(jié)點語法錯誤、status屬性為disabled、父節(jié)點狀態(tài)不對。如果目錄存在再查看驅(qū)動注冊情況ls /sys/bus/platform/drivers/mybeep/如果這個目錄不存在說明驅(qū)動模塊沒有注冊成功常見原因包括platform_driver結(jié)構(gòu)體初始化錯誤、module_platform_driver宏使用不當(dāng)、模塊加載失敗??梢韵扔胢odprobe或insmod看返回信息再用dmesg查模塊加載階段是否有報錯。如果兩邊都存在卻沒有綁定鏈接就要看驅(qū)動目錄下的uevent或者設(shè)備的ueventcat /sys/bus/platform/drivers/mybeep/uevent cat /sys/bus/platform/devices/mybeep/ueventuevent文件會顯示模塊名和MODALIAS信息。如果驅(qū)動的MODALIAS里有of:N...T...Cmyvendor,mybeep設(shè)備的MODALIAS也是Cmyvendor,mybeep那匹配理論上應(yīng)該成立。這里經(jīng)常出現(xiàn)的問題是大小寫不一致、compatible缺少廠商前綴、或者of_match_table結(jié)尾忘了寫sentinel空條目。4.3 對比compatible字符串、檢查of_match_table的常見錯誤of_match_table的檢查重點有三個。第一of_device_id數(shù)組必須以空結(jié)構(gòu)體結(jié)束也就是sentinel否則內(nèi)核遍歷數(shù)組時會越界或漏匹配。第二compatible字符串必須完整按慣例包含“廠商名,設(shè)備名”兩部分比如“myvendor,mybeep”不少人在設(shè)備樹里少寫了廠商前綴驅(qū)動里寫了兩個字符串當(dāng)然不相等。第三驅(qū)動結(jié)構(gòu)體中of_match_table字段是否真的賦值給了.driver的成員而不是賦給了platform_driver的頂層字段。有時候代碼寫成了static struct platform_driver mybeep_driver { .of_match_table mybeep_of_match, ... };這是錯的of_match_table必須放在.driver子結(jié)構(gòu)體里。這個問題編譯不會報錯但驅(qū)動加載后平臺總線完全不知道匹配表的存在只能退回去走name匹配自然匹配不上。4.4 用driver_override強制綁定與手動bind/unbind驗證為了快速驗證“到底是不是匹配邏輯的問題”可以手動觸發(fā)綁定。設(shè)備已經(jīng)有了驅(qū)動也注冊了直接寫sysfs# 先解除可能的舊綁定 echo mybeep /sys/bus/platform/drivers/mybeep/unbind 2/dev/null # 強制指定驅(qū)動 echo my_beep /sys/bus/platform/devices/mybeep/driver_override echo mybeep /sys/bus/platform/drivers/my_beep/bind注意driver_override里寫的是驅(qū)動名即.driver.name的值bind里寫的是設(shè)備名。如果這樣手動綁定時probe能執(zhí)行說明驅(qū)動本身沒問題問題一定出在自動匹配機制的某個環(huán)節(jié)。如果手動綁定也失敗驅(qū)動代碼本身要回爐檢查重點看probe里有沒有返回錯誤碼。還要強調(diào)一種容易誤導(dǎo)的現(xiàn)象probe函數(shù)被調(diào)用了但設(shè)備狀態(tài)仍然顯示not bound。這時要區(qū)分probe根本沒執(zhí)行和probe執(zhí)行后返回錯誤。第一種對應(yīng)匹配失敗第二種對應(yīng)初始化失敗。初始化失敗時dmesg里通常有probe函數(shù)的dev_err輸出sysfs下設(shè)備的driver鏈接也會消失。這種情況需要用driver_override加上echo bind的方式復(fù)現(xiàn)觀察內(nèi)核打印的具體strace或錯誤碼。4.5 一張表總結(jié)probe沒調(diào)用的常見原因現(xiàn)象可能原因驗證方法/proc/device-tree下無節(jié)點設(shè)備樹未編譯/節(jié)點被裁剪/status為disabled檢查dts編譯列表、dtb內(nèi)容、status屬性/sys/bus/platform/devices下無設(shè)備節(jié)點存在但未生成platform_device檢查節(jié)點語法、父節(jié)點狀態(tài)、of_platform_create/sys/bus/platform/drivers下無驅(qū)動驅(qū)動模塊加載失敗/驅(qū)動未注冊dmesg查看模塊加載日志兩邊都存在但無driver鏈接compatible不匹配/of_match_table錯誤xxd對比compatible字符串檢查of_match_table的sentinel和字段位置probe執(zhí)行但設(shè)備報錯驅(qū)動初始化失敗或資源獲取失敗查看dmesg中probe內(nèi)錯誤日志檢查GPIO等資源是否沖突5. 容易被忽略的細節(jié)module_platform_driver宏、remove回調(diào)與資源管理習(xí)慣5.1 module_platform_driver宏到底展開了什么module_platform_driver是一個宏不是函數(shù)。它把驅(qū)動的注冊和注銷包裝成標準的模塊入口函數(shù)static int __init mybeep_driver_init(void) { return platform_driver_register(mybeep_driver); } module_init(mybeep_driver_init); static void __exit mybeep_driver_exit(void) { platform_driver_unregister(mybeep_driver); } module_exit(mybeep_driver_exit);使用這個宏的好處是省去手寫入口函數(shù)避免注冊和注銷邏輯不對稱。但這也帶來一個理解上的盲區(qū)很多新人以為probe函數(shù)是模塊加載入口實際上模塊加載入口是宏展開出來的mybeep_driver_init它做了teamplate注冊工作后立即返回。platform_driver_register內(nèi)部會同步掃描總線上的設(shè)備如果找到匹配項調(diào)用匹配邏輯后再調(diào)用probe。手動載入驅(qū)動有時會遇到probe在注冊期間就同步執(zhí)行的情況。如果probe里做了耗時操作modprobe命令就會卡住一會兒這不是系統(tǒng)異常而是probe同步調(diào)用的表現(xiàn)。知道了這一點就不會誤以為系統(tǒng)死機了。5.2 remove回調(diào)簽名變化與不同內(nèi)核版本的兼容處理i.MX6ULL的老BSP比如NXP官方4.1.15和5.4內(nèi)核platform_driver的remove回調(diào)簽名是static int mybeep_remove(struct platform_device *pdev)但在Linux 6.1之后內(nèi)核社區(qū)把remove的返回值改成了void引入了一個過渡階段新代碼用remove_new成員保存void返回類型的回調(diào)。比如static void mybeep_remove(struct platform_device *pdev) { ... } static struct platform_driver mybeep_driver { .probe mybeep_probe, .remove_new mybeep_remove, ... };如果你在6.1以上內(nèi)核里直接寫.remove mybeep_remove(舊式int返回版本)編譯會收到warning甚至報錯。如果你的驅(qū)動需要同時兼容老內(nèi)核和新內(nèi)核可以使用內(nèi)核提供的宏或者條件編譯處理。這不是i.MX6ULL專有問題但很多用老SDK的工程師升級內(nèi)核時都會撞上。5.3 資源管理為什么推薦devm_platform_ioremap_resource與devm_gpiod_get在probe里獲取硬件資源時我強烈建議使用devm系列API這類API把資源的申請和釋放綁定到了struct device的生命周期。驅(qū)動卸載時probe里用devm_獲取的資源會自動釋放不需要在remove里逐個手動釋放。少了release步驟不僅代碼簡潔還減少了內(nèi)存泄漏和資源泄漏的風(fēng)險。對于寄存器地址映射老式寫法是res platform_get_resource(pdev, IORESOURCE_MEM, 0); regs devm_ioremap_resource(pdev-dev, res);或者直接一步到位regs devm_platform_ioremap_resource(pdev, 0);devm_platform_ioremap_resource內(nèi)部會做platform_get_resource、devm_request_mem_region、devm_ioremap三件事返回映射后的虛擬地址。如果資源不存在或已被占用返回ERR_PTR錯誤。GPIO的獲取同理用devm_gpiod_get系列。設(shè)備樹屬性名mybeep-gpios會被轉(zhuǎn)換成con_id“mybeep”這正好對應(yīng)我們設(shè)備樹里的寫法。devm_gpiod_get返回struct gpio_desc指針后續(xù)可以使用gpiod_set_value、gpiod_get_value等操作函數(shù)。5.4 關(guān)于“什么情況下才應(yīng)該寫platform驅(qū)動”的思考最后聊一個偏設(shè)計的話題。這個細節(jié)是我?guī)氯藭r總被問到的是不是驅(qū)動都必須寫成platform驅(qū)動并沒有這個要求。platform驅(qū)動適合描述“掛在CPU總線上的外設(shè)控制器”這類實體硬件。如果設(shè)備樹里能用一個物理節(jié)點描述它probe后需要訪問寄存器或GPIO等硬件資源就適合platform驅(qū)動。但如果只是一個純軟件邏輯比如一個內(nèi)核線程配合procfs提供調(diào)試接口沒有對應(yīng)的實體硬件那寫成platform驅(qū)動更多是套了一套框架反而顯得繞。在i.MX6ULL上像beep這種簡單GPIO輸出設(shè)備其實還可以考慮用內(nèi)核自帶的led-class框架或者pwm-leds驅(qū)動不需要自己寫platform驅(qū)動。自己寫platform驅(qū)動更適合那些需要訪問私有寄存器、處理特定中斷、做硬件狀態(tài)管理的設(shè)備。選型時先把內(nèi)核現(xiàn)成子系統(tǒng)找一遍能復(fù)用就復(fù)用這才是驅(qū)動開發(fā)的省力之道。我在實際調(diào)試中養(yǎng)成了一個習(xí)慣遇到匹配問題先看/sys/bus/platform下設(shè)備與驅(qū)動兩端是否存在再對比/proc/device-tree里的compatible原始字節(jié)最后才去翻源碼。這套流程跑下來大部分platform驅(qū)動匹配問題都能定位到根因。希望這篇文章能幫你把i.MX6ULL上的platform機制這塊拼圖補完整。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91色综合网站在线| 亚州激情在线视频| 色天堂婷婷| 97色色网| 五月色色激情网| 九九免费精品在线视频| 婷婷午夜| 9l视频自拍9l视频自拍九色学生| 婷婷激情鹿城五月天| 久久精品五月| 亚洲成Av人片乱码色第1集| 婷婷五月天AV| 开心激情站| 五月天播播中文字幕| 五月天婷婷在线啪啪视频| 色情五月天丁香社区| 青柠影视免费高清电视剧| 综合AV在线| 丁香五月欧美激情| 热99精品视频| 色综合综合色| 五月丁香色婷婷综合| 无码色色色色色| 啪啪东京热| 亚洲电影在线观看| 日本精品人妻无码77777| 日韩成人无码人妻| 亚洲AV成人在线| 丁香婷婷五月天在线视频| 五月丁香 久久久| 久99视频| 五月丁香六月婷婷精品| 欧美天天草人人草| 亚洲色爽| 99久久精品网| 五月婷亚洲精品| 99er6热在线观看精品6| 开心激情网五月| 亚洲色激婷| 久久婷婷热| 成人午夜免费电影| 婷婷五月天激情网| 二人电影免费版在线观看| 久青操| ady狠狠入| 久久五月天丁香花| 9久久久| 久热99视频在线观看| 做爰丰满少妇1313| 91/九色黑人| 婷婷五月欧美综合| 婷婷久久婷婷色五月| 激情98色婷婷五| 黑人糟蹋人妻HD中文字幕| 99这里只有精品国产| 欧美五月婷婷| 玖玖在线视频福利| 精品九九视频| 这里只有精彩视频| 婷婷五月天亚洲| 丁香五月大香蕉| 99久久婷婷国产综合精品草原| 久久婷婷五月综合伊人| 风流少妇A片一区二区蜜桃| 色五月婷婷网| 91丨人妻丨国产丨丝袜| 97人人做| 欧美性丁香色色五月天综合爱爱| 婷婷开心久久| 99热手机在线精品| 精品热青草| 亚洲无码九九九| 久久99久久久| 第二色AⅤ| 热久久国产视频| 性日本精品| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 丁香伊人五月色婷婷五十路| 殴美激情综合网| 日本综合久| 亚洲一色色色色色色色色| 天天插天天日天天爽| www.五月激情红色| 激情综合网址| 成人午夜天| 99欧美精品99日本精品| 黄网免费观看| 天天透天天摸天天舔| 99精色| 99九九视频精彩在线| 婷婷99狠狠| 丁香激情网| 五月天婷婷偷拍| 91久久免费| www久久99| 99热精品10| 激情六月婷| 欧美色97| 91狼友视频在线观看| 99碰视频| 色五月天成人在线| 六月激情婷婷| 婷婷五月天性| 日本久久网| 九九亚洲天堂| 91狠狠综合久久久久久| 99无吗| 久久婷色| 色婷成人狠干| 婷婷五月激情在线| 狠狠爱综合网| 五月丁香操婷逼| 久热这里只有精品66| 极品另类| 久久综合五月婷婷| 激情美女五月天激情在线| 一月婷婷色色| 超级97碰碰| 激情五月综合色| 丁香五月天天高清在线| 色135综合网| 九九色之九九色之88| 婷婷国产日本欧美| 九九热在线视频观看| 最新日韩AV中文字幕| 、激情六月天| 色婷婷av在线观看| 五月丁香啪啪综合| 99视频只有精品| 精品一二三区久久AAA片| 人人叉久| 十一月婷婷激情四射| 欧美成人AAA片一区国产精品| 五月婷久久久| 日本五月婷婷| 五月天婷婷激情四射综合| 狠狠舔| 激情亭亭五月| 99色最新在线视频网站| 日本色色影片| 色欲香综合网| 五月婷婷玖玖综合玖玖爱| 婷婷五月天色色| 六月综合婷婷开心伊人| 91亚洲免费片| 日韩啊啊啊| 日操夜操天天操不卡| 五月天开心激情网色欲无码| 综合网天天| 色五月婷婷91| 婷婷综合在线| 亚洲色五月| 97九色视频| 9999综合99综合人| av色色国产| 香蕉久日夜| 色综合五月在线| 99综合| 91人人网| 五月婷婷基地| 丁香激惜男女| 激情婷婷丁香五月| 丁香五月天天高清在线| 91精品国产色猫| 一级二级香港秋霞欧美欧美秋霞| 亚洲国产网址| 成人免费高清在线播放| 亚洲av网站| 无码区婷婷五月花开| 操逼六区| 丁香五月伊人| www.日日夜夜| 久久精品日| 秋霞三及片| 久久久亚洲成人无码A片| 狠色狠色综合久久| 五月丁香888| 五月丁香香蕉| 操99| 精品亚洲国产成AV人片传媒| 亚洲丁香五月在线观看| 玖玖婷婷婷丁香五月| 玖玖热视频| 大胆伊人久久| 天天舔天天爽| www.色擼擼.com| 色五月美女| 色五月激情五月天| 天天综合网、天天综合色 | 国产精品久久..4399| 久久综合五月天| 婷婷五月综合在线| 小视频一区 | 五月丁香六月激情综合| 丁香五月激情视频在线| 99re免费在线视频| 久久亚洲婷婷| 五月天伊人综合| 久久激情五月网| 91操片| 99热在线播放| 久久激情四射| 丁香五月自拍| 日本性激情色播| 婷婷色色丁香| 色色丁香| 超碰99资源站| 提提热五月天婷婷| 丁香五月婷婷Av| 天天色宗合| 秋霞网在线观看理论91| 99热天堂| 超碰狠狠干99| 任你草| 秋霞电影理论| 婷婷永久在线| 婷婷碰碰| 亚洲五月天婷婷| 啪啪干伊人婷婷| 91九色成人原创视频| 成人在线网| 五月婷丁香在线视频在线| 91日综合欧美| 欧洲MV日韩MV国产| 激情小说视频图片| 狠狠色噜噜狠狠狠888| jiujiu热在线视频| 天天色综| 精品久久99| 熟女人妻一区二区三区免费看| 99免费在线视频| 天天干天天操天天干天天操天天干天天操 | 97碰碰在线观看视频| 五月天开心网| 能看的av| BBWCUCKOLD精品熟妇| 欧洲毛片基地c区| 99热这里全都是精品| 西瓜美女a片| 永久的网站AAAA| 99久在线精品99re5热视频| 91在线资源| 欧美S码亚洲码精品M码| 五月婷婷色在线| 久久五月婷| 色色色干| 狼人久草| 亚洲欧洲中文日韩久久AV乱码| 日韩1区2区| 色婷婷久久综合| 超碰免费在线| 丁香色五月婷婷17C| 免费看欧美成人A片无码| 99热这里只有精品8| 色狠狠综合网| 亚洲性图一区二区三区| 亚洲啪啪啪啪| 五月丁香黄色| 97色啪| 91聚色综合网| 疯狂做受XXXX高潮A片动画| 丝袜激情网| 亚洲丁香五月| 丁香五月激情视频| 国色天香伊人狠狠色| 激情综合播播| 噜综合| 97视频久久| 五月色亭丁香| 偷偷操九九| 激情亭亭五月| 色欲人妻综合aaaaaaaa网| 性爱网久久| 色五月丁香五月五月婷婷| 亚洲性爱99| 婷婷五月天天| 婷香五月激情视频| 99这里有精品| 97色综合视频| 婷婷丁香在线| 久热网站| site:pnnrt.com| 无码成人AAAAA毛片AI换脸| 99热个人在线| 婷婷五月综激情| 丁香五月天在线观看视频| 日本婷婷网| 日韩黄在免| 99人妻碰碰久久久禁片| 综合AV在线| 久久五月天大美女| 五月丁香六月婷婷欧美综合| 国产成人+综合亚洲+天堂| 亚洲AV在线免费看| 婷婷五月激情网| 先锋男人99资源| 深爱激情丁香五月| 96丁香六月婷婷蜜桃综合久久| 欧美性猛交AAAA片黑人 | 久久丁香网| 亚洲成人一区| 色婷五月天激情| 综合激情在线| 黄色激情网站在线观看| 丁香五月婷婷六月婷婷| 天天激情| 狠狠五月天| 97偷拍在线视频| 久热超碰| 大香蕉99热| 亚洲视频综合网| 伊人玖玖精品| 九九精品视频在线6| 色婷婷免费视频| 丁香五月五月婷婷欧美大香蕉| 色九月国产| 多精窝99在线视频| 激情五月六月婷婷| 大香蕉久热| 五月天欧美激情| 国产亚洲色婷婷久久99精品91| 97热91| 97狠狠色| 婷婷五月天成人| 国外亚洲成AV人片在线观看| 亚洲小视频免费观看| 99啪视频在线观看| 五月丁香六月激情综合在线| 丁香五月婷婷色| 久久3p| 五月丁香激情六月| 五月婷婷久久大片| 丁香五月综合图片在线观看| 五月丁香综合激情| 五月天激情站| 九九热最新| 99热免费精品| 亚洲综合视频在线| w婷婷五月婷婷w| 九九视频在线| 99人人干人人| 婷婷欧美激情综合| 久久伦乱| 大香蕉99热| 色综合久久无码| 69er小视频| 亚洲综合在线视频| 婷婷五月天激情在线观看| 欧美 日韩 成人 在线| 成人国产网站| 丁香六月激情国产| 亚洲秘 无码一区二区三区妃光/1| 激情婷婷五月基地| 熟女国产在线一区二区三区四区| 日本欧美成人片AAAA| 亚洲 小说 欧美 激情 另类| 99热这里只有精品9| 婷婷九月激情| 婷婷五月天久久久| 婷婷五月天影视| 性爱综合网| 色5在线| 伊人五月天在线| 丁香五月另类色婷婷麻豆| 狠狠操狠狠| 丁香综合久久| 免费观看亚洲AV片| 一夜福利不卡| 超极99精品| 久色国产| 久久人妻熟女一区二区| 丁香久久五月婷综合| 五月综合久久| 久久九区| 国产肥白大熟妇BBBB视频| 欧美五月丁香在线观看| 丁香九色不卡aaa| 激情五月天开心| 欧美色色色色色| 可以看的av| 99视频精品在线| 91操人视频| 天天爽天天爽| 日日日天天干| 亚洲成人免费电影| 亚洲三A| 美女五月天| 六月丁香六月婷婷欧美| 五月天激情婷婷| www.五月天婷婷姐姐| 天堂在线伊久| 免费亚洲婷婷中文字幕| 五月色欧洲| 日韩成人影片在线观看| 久久机热/这里只有精品| 丁香五月骚喷水视频| 99热xx| 丁香婷婷九月| 26uuu激情五月天| 日本久久极品| 99视频内射三四| 99re这里只有精品在线观看| 影音先锋色婷婷| 成人免费120分钟啪啪| 五月成人天| 九九av| 69天堂99| 99操视频| 综合网啪啪| 这里只有精品99www| 婷婷综合另类| 无码人妻丰满熟妇奶水区码| 91碰在线| 在线综合网| 深爱 五月天| 大香人妻| 无码 av电影| 99日在线视频| 婷婷综合五月天亚洲综合| 色综合久久99色| 人人人操 超碰| 丁香五月婷婷啪啪啪| 丁香婷婷六月激情综合| 91超碰人人操| WWW.99视频| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇| 五月婷婷亚洲| 五月婷中文娱乐综合| 亚洲五月天激情| 激情五月天综合网| 色爱亚洲| 99热99热99热99热| 狠色狠色狠色狠色狠色网| 91超级碰在线视频| www.久久久久久| a性生活久久无| 中文AV网| AAA久久| 久久丁香五月天| 色五月婷婷大| 五月婷庭丁香在线| 日韩99色| 无码网| 97超碰综合| www.刺激色网站www.| 色色色图| 色五月亚洲| 丁香婷婷成人在线播放| 狠狠五月激情婷婷直播片| 九九热99re8热免费观看 | 射琪琪| 久久38视频| AV在线不卡播放| www.久久久久| 四LLL少妇BBBB槡BBBB| 久久婷婷五月综合色奶水99啪| 综合视频久久| 一起操 91N.com| 丁香婷婷婷| 天天射天天操天天干| 无码成人AAAAA毛片AI换脸| 成人在线视频网| 老司机日日夜夜青草| 91婷婷在线| 亚洲av网站| 综合婷婷| 拍真实国产伦偷精品| 九九色热| 色九四色| 日本婷婷综合精品| 亚洲激情久久| 婷婷五月色| 亚洲亚洲人成综合网络| 97色 五月天丁香| 婷婷五月天成人视频| 校园春色亚洲色| 欧洲综合一区| 欧美网站视频4399| 丁香五月天导航| 精品视频99看在线视频| 丁香婷婷色五月天| 国产亚洲色婷婷久久99精品91| 婷婷五月天成人网| 美女五月天| 1000部毛片A片免费观看| 天堂成人A片永久免费网站| 99久久国产宗和精品1上映| 一级操逼大片| 久久天堂| 久久久久综合激动五月天| 色五月激情五月丁香五月婷婷啪啪综合 | 五月丁香婷婷成人网| 激情五月天在线视频| 一起操 91N.com| 色99视| 色色色99| 色婷婷五月天天天干天天操天天爽| 天天日夜夜帕| 欧美黄色AA片哗啦啦啦| 超碰婷婷五月| 久久99网站| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 天天狠天天叉| 色婷婷网| 五月婷婷六月综合| 开心久久爱五月天| 操逼六区| 激情五月天婷婷播播久久综合91| 婷婷丁香花五月天| 人妻操操色| 丁香婷婷色色| 99热爆在线| 人妻激情在线| 丁香五月欧美激情| 丁香婷婷啪啪| 欧美色色色色色色| www.日韩艹| 五月婷婷丁香五月天| 天天色视频| 激情超碰网| 六月色伊人婷婷| 思思热在线视频精品| 九九色色| 丁香色六月婷婷| 婷婷丁香五月天亚洲| AAA久久| 色情成人五月天| 天天摸.天天mo| 99久久网站| 99色在线| 久久久99久久| 色久综合| 香蕉99网| 天天日婷婷| 丁香五月综合| 色狠狠色| 超碰免费大香蕉| 超极99精品| 婷婷欧美色| 九九热re99re6在线精品| 久久综合九色综合97婷婷| 91超碰在线观看| 人妻久久久久久久久久| 国产亚洲精品久久久久久久久动漫| 久久婷婷五月天蜜桃| 人人草人人视| 亚洲综合婷婷| 欧美性生交A片免费看| 五月色网| 天天肏视频| 98永久精品| 天天做天天爱天天做| 成人无码精品1区2区3区免费看| 九九伊人网| 九九九九综合| 欧美日本黄色| 五月丁香婷婷婷激情爱爱| 丁香婷婷五月天亚洲| 婷婷99中文字幕| 偷拍91九色| 婷婷色五天| av免费在线网站| 久草热视频在线观看| 潘金莲AAAAAAAAAA| 色婷婷五月天天天干天天操天天爽| 色爆五月| 婷婷五月丁香久久| 青青色com久久| 无码色色| 色婷婷影| 91九色国产在线| 国产免费AV在线| 在线网黄| 五月丁香久久精品在线观看| 亚洲色久| 婷婷综合激情五月综合| 日韩三级高清无码| 99热免费观看| 六月久久婷婷| 亚洲第一综合| 五月婷婷免费| 色射7856五月天激情四射| 99性色| 狠狠色97| 色婷久久| 五月之婷婷| 亚洲四色五月| 色婷婷丁香五月天| 亚洲99视频| 超级碰碰99| 99色精品| 操笔无码| 九九精品碰| 91婷婷色| 米奇激情婷婷| 黄页免费一级视频懂色| 亚洲精品视频在线播放| 欧美综合激情五月丁香| 综合日本婷婷| 噜噜噜狠狠色综合| 最近中文字幕大全免费版在线 | 麻豆123区| 九九热99久久99| 五月天成人综合| 五月天婷综合网站| 极品九九九九九九| 五月丁香在线| 亚洲视色| sS丁香五月婷婷| 色护士综合| 激情久久久| 色五月婷婷激情五月| 久久码久久无清| 久久六月天| 俺去啦综合网| 日本精品在线噜噜噜| 亞洲自怕| 人妻少妇色综合| 天天草比天天爽| 丁香五月婷婷六月婷婷| 五月丁香综合久久夜夜| 99热啪啪| 99激情网| 色五XX| 色色自拍视频网站| 五月狠狠| 大香蕉视频婷婷| 婷婷五月天堂| 五月丁香久久| 婷婷色网站| 五月丁香久人妻中文| 91N 一起草| 天天色粽合合合合合合合| 久久久无码精品成人A片小说| Av性爱网站| 小色小蛇伊人婷婷色香五月| 婷婷丁香中文字幕| 97人妻碰碰中文无码久热丝袜| 六月激情婷婷| 婷婷五月偷拍| 日本婷婷综合精品| 婷婷丁香五月天综合AV| 日本乱论99| 九九精品9| 婷婷六月天| 激情综合在线观看| 爱婷婷都市激情| 色区域网站视频| 婷婷伊人激情婷婷| 综合亚洲五月天| 五月天丁香网站| 超碰伊人碰婷婷五月| 午夜亚洲AV日韩无码| 日本色色色| 激情综合五月| 色五月婷婷基地| 丁香五月天亚洲视频| 丁香五月天在线| 婷婷五月天男人影院色色网| 婷婷丁香一月| 2023天天日夜夜爽| 久久久婷丁香五月| 欧美丁香六月在线观看视频| 丁香香五月激情免费视频| 午夜婷婷丁香| 欧美婷婷六月丁香综合色| 99九九99九九九视频精彩| 综合玖玖偷拍| 9有码中文| 五月天另类图片区99| 婷婷性爱综合| 精品动漫 无码av| 狠狠色丁香久久综合婷婷亚洲成人福利 | 激情丁香图片| 五月天激情电影| 亚洲亚洲亚洲AAAAAA| 99er6热在线观看精品6| 另类图片婷婷五月天| 99热九九在线| 丁香婷婷视频| 综合网激情| 婷婷六月激情| 综合另类视频| 色色网站| 99热99艹在线观看| 99五丁香月| 亚洲AV永久无码影院黑人| 婷婷丁香www视频日本韩国| av操一操| 玖玖国产视频一区| 可以直接看的av网站| 天天日婷婷| 深爱激情丁香| 综合激情在线| 激情五月婷婷| 99国产97在线,| 丁香婷婷五月综合| 天天色综和网| 一区操| 亚洲国产网站| 久久九九免费视频| 伊人五月成人| 激情综合99| 亚洲精品白浆高清久久久久久| 天天综合网网欲色| 亚洲精品视频在线| 激情婷婷激情在线不卡| 久操大| 久婷五月| 热99re| 能看的av| 九九99久久精品| 超碰国产在线观看| 日操| z色五月播播久久| 久久婷婷热| 啪啪啪丁香五月| 337p大胆噜噜噜噜噜91Av| 这里只有精品99www| 五月亭亭开心网| 99精品久久| 91精品啪| www.狠狠操.con| 色五月综合| 偷偷与邻居做爰完整视频| 日本九九九九九九| 激情婷婷亚洲五月| WWW.99视频| 九色在线五月婷婷网址| 97操操| 天天做天天摸| 色欲婷婷夜夜| 五月天六月婷婷| 欧美日韩成人| 26uuu精品一区二区| 婷婷五月开心中文字幕在线| www.91操| 吾爱AV导航| 色欲丁香久久| 99热最新| 日本久久视频| 噜噜狠狠色综无码久久合欧美| 午夜性做爰电影| 色九月婷婷综合| 五月伊人婷婷| 国产在线激情视频| 色婷婷91激情小说| 五月天婷婷影院| 婷婷五月天首页激情| 久久婷婷欧美| 欧美性爱五月天| 97人人操人人爽| 丁香婷婷激情| 美国不卡视频| 色J香五月天| 婷婷D区| 国产永久一二一起草| 日本一道久久| 婷婷久久综| 五月激情天| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 伊人婷婷青青cao| 婷婷五月色惰| 婷香狠狠爱五月| 天天天天色天天天天天干| 性按摩玩人妻HD中文字幕| 人妻自慰在线| 99热自拍| 激情播丁香| 亚洲成人综合在线| 五月天激情综合首页| 欧美精品99久久久| 日韩成人电影AV| 黄网免费观看| 欧美影院婷婷| 色婷婷小说网| 女性自慰系列第五页| 丁香五月激情啪啪| 天天日天天舔天天摸| 九月色婷婷| 99久久99久久综合| 激情婷婷五月天| 日日噜人人人做人| 色婷婷五月天| 森林影视大全,最好看的2019年视频 | caopeng97日韩| 四川BBB搡BBB爽爽视频| 婷婷五月综合激情小说| 97搞在线| AV性爱网| 爽极品色| 性色五月天| 狠狠 婷婷| 五月婷婷 婷婷五月 一区二区 久久久| 密乳视频| 国产永久一黄| 欧洲不卡视频| caopeng超碰| 最新高清无码专区| 婷婷丁香色五月| 97久久五月丁香婷婷| 丁香花五月天激情| 丁香五月天激情五月天激情五月天激情网| 99ER热精品视频| 26UUU精品一区二区c〇m| www.九月婷婷丁香.com| 色色色五月婷| 99热热九九| 婷婷99狠| 九九精品99| 五月丁香999| 丁香97综合| 成人看片网站| 大香蕉院线| 久久久久激情网| 九九热超碰| 五月婷婷婷自由综合| 日本丁香久在线| 99热官网| 色五月天在线观看| 亚洲日本激情| 97超级免费无码| 丁香婷婷五月综合色情| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 婷婷五月丁香婷婷| 99久久精品国产色欲| 99亚洲精品视频| 另类激情五月天| 四色永久成人网站| 综合久久五月| 亚洲人人操| 日日夜夜天天综合| 丁香激惜男女| 欧美、日韩、中文、制服、人妻| 337p大胆噜噜噜噜噜91Av| 激情深爱综合网| 丁香五月综合久久八| 大香蕉伊然在亚洲90| 狠狠色丁香| 色婷婷亚洲精品天天综| 精品99久久久久成人网站免费| 久久五月天丁香花| 一起草AV| 亚洲不卡欧洲| 婷婷五月深爱五月| 婷婷激情五月天7| 九色无码| 五月天婷婷色综合| 久久久久久久人妻| 丁香六月激情四射| 激情五月天小说| 九九免费视频在线| 色色色婷婷五月天| 在线sebiav精品视频| 九九热精品| 日本久久婷婷| 久久人妻久久| 99在线视频在线观看| 色噜噜综合网| 婷婷玖玖五月天| 狠狠爱丁香婷| 成人做爰高潮A片免费视频| 婷婷久热| 天天爽天天爽| 久久机热/这里只有精品| 色五月婷婷大| 成人天天爽| 亚洲色久| 97碰碰视频在线观看免费| 丁香97综合| 91久女| 亚洲国产精品VA在线看黑人| 99性爱视频| 婷婷性爱| 高清无码视频网址| 伊人久久艹| 成人版视频在线观看| www.婷婷五月| 99免费视频网| 99热99re6国产在线播放| 五月丁香婷婷久久| 婷五月天在线草| 凹凸7777操操操| 99 热| 思思热闹这里只有精品| 五月婷婷大香蕉| 婷婷伊人网| 激情av| 大香蕉五月天| 日韩ac不卡无码| 色婷婷亚洲婷婷| 97人人操人人爽| 色99视频| 激情婷婷五月久久| 樱花99视频| 2050人人操免费工开爱| 亚洲亚洲激情| 日日鲁鲁夜夜爽爽| 亭亭五月激情亚洲在线| 久热只有这里精品| 涩五月色婷婷| 丁香五月天资源网| 婷婷色综合av| 亚洲AV网站| 九九99精品视频在线观看| 九九热99热| 大学生高潮无套内谢视频| 狠狠精品干练久久久无码中文字幕| 极品人妻VIDEOSSS人妻| 色五月婷婷7777| 亚洲成人av在线观看| www.久9| 任你擦免费视频| 一逼色综合| 亚洲婷婷丁香五月在线| 色综合天天网| 综合色激情| 99热精品观看| 伊人激情影院| 五月天婷婷丁香成人网| 91丨九色熟女丨首页| 中美日韩成人在线| 婷婷综合五月天激情| 俺去也在线www色官网| 五月丁香色六月激情干大屄| 亚洲综合视频网| 综合网色| 国产av天天插天天操天天爽| 六月婷婷九月丁香| 美女天天久久| 久久这里有精品视频| 91色综合网| 中文字幕日产A片在线看| 百度一下国产精品A| 庭庭久久内射| 开心五月丁香综合久久| 久久久久久久久人妻| 色色婷| 成人在线观看精品| 超碰99资源站| 丁香六月视频| 日日夜夜天天| 色色色综合| 婷婷人妻激情| 五月情四婷婷| 99热这里都是精品| 大战熟女丰满人妻AV| 99精品视频推荐| 五月婷婷激情四季| 泰州成人视频| 99re在线播放| 中文字幕av在线播放| 天天插轮理| www999日韩精品| 狠狠干最新地址| 色综合激情| 婷婷五月天堂一本在线| 色综合色色| 大香蕉丁香| 色色99色色| 亚洲午夜视频| 婷婷黄色网| 国产99美少妇| 九九99香蕉在线视频播放| 熟妇内谢69XXXXXA片| 亚洲五月激情| 狠狠色综合五月| 色丁香五月婷婷| 亚洲AV第二区国产精品| 丁香五月第四色88| 99性爱视频| 久久伦乱| 婷婷五月天激情诱惑| 欧美 日韩 人妻 高清 中文| www.五月婷婷| 国产精品VA在线| 桃色五月婷婷| 色色网站在线免费观看视频| 9精品在线| 亚洲婷婷综合视频| 五月婷婷插一插| 久久曰曰| 婷婷丁香成人| 日韩在线视频网站| 激情啪啪五月天| 婷婷五月天亚洲精品| 91久久婷婷| 色色色99| 91在线日| 欧美色色干| 婷婷激情小说| 国产乱轮一区二区三区| 夜夜骑日日夜夜| 丁香五月天社区| 五月丁香日本一抹本| 中文字幕永久免费| 亚洲综合五月天婷婷丁香| 五月天久久综合婷婷| www99xxxx五月丁| 伊人五月成人| chaopeng在线人人| 在热视频精品| 草榴视频黄色网| 五月天激情子轮| 久久婷婷九月国产精品| 狠狠操天天日| 人妻日日日| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 五月天婷久久| 夜夜爽天天日| 香港九九六区八区99| 色婷婷五月天小说网| 国产XXXX搡XXXXX搡麻豆| 色婷婷丁香五月观看| 99在线免费视频| 日韩一66精品| 人妻体体内射精一区二区| 天天激情夜夜干| 色五月激情五月| 99热这里只有精品2024| 午夜微拍福利| 狠狠色综合精品视频在线| 丁香狠狠操| 五月天色色婷婷| 五月丁香色| 99久视频| 六月婷婷色五月| 欧美婷婷丁香社区在线播放| 精品人妻久久久久| 玖玖精品婷婷| 狠狠综合网| 婷婷丁香视频在线观看免费| 亚洲精品久久久久AV无码| 丁香五月亚洲综合| 99视频在线看| 五月丁香啪综合| AV伊人青草丁香六月| 国产一区二区三区影院| 精品色色色| 9热在线观看| 综合色播| 久久99久久99精品免观看软件| 久久密臀婷婷| 色吧五月婷婷| 思思99热在线| 男人的天堂av俄罗斯热| 91九色欧美| 狠狠草天天草| 激情五月天.色网| 噜噜噜狠狠色综| 五月婷婷狠天天色综合| 久久成人亚洲欧美电影| 色色日本欧美| 婷婷五月天伊人在线| 岛国AAAV| 9l视频自拍九色9l视频自拍九色9l社区| 超碰三级秋霞| 壅壅儕家a| 色婷婷www| 色5月婷婷| 五月丁香福利| 丁香五月天AV在线 | 狠狠操.com| 1024欧美看片| 91久久久久久| 色五月丁香五月婷婷五月成人网 | 狠狠高潮精品亚洲1| www,五月天com| 一区=区操屄高清大全av| 一起草Av| 久噜久噜| 狠狠爱综合| www.韩日视频| 桃色五月天| 99网| 99爱免费在线观看| 丁香久月婷| 无码成人AAAAA毛片AI换脸| 超碰在线超碰| 99热精品9| 天天插天天插天天插天天插| 六月色丁香中文字幕| 天天干天天干天天| 狠狠的日| 人人做人人看人人摸| 久久xxxx| 综合www色| 色色色com| 综合色99| 丁香久久五月婷综合| 久久人妻在线| 亚洲午夜精品久久久久久人妖| 91日精品| 婷婷丁香六月天| 99性爱| 99在线热| 五月综合色| 91wwmm导航| 婷婷五月激情片| 色情五月天小说| 五月丁香色婷婷久久| 色婷婷在线视频观看| 人妻AV在线| 九九香蕉网| 天天综合久久| 色色色成人网| 婷婷十月丁香| 久久婷婷五月综合色播| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 午夜丁香 婷婷| 色综合女人99| 五月天婷婷婷| 色婷婷成人做爰A片免费看网站| 色综合久久天天综合网| 久久婷婷亚洲| 色婷婷小说网| 婷婷丁香五月亚洲| 天天五月情| 色婷婷五月天综合网| 伊人综合网4| 草操AV在线| 激情丁香五月婷| 婷婷五月天在线看| 另类天堂| 五月婷婷六月丁香免费| 99自拍视频| 五月丁香美女视频| 色情综合网| 五月婷婷免费在线| 操操啪| 99热99ai| 激情婷婷五月女| 99r这里只有精品哦| 婷婷五月天成人娱乐| 色五月婷婷激情综合网| 欧美丁香婷婷天天操| WWW.夜夜操.com| 熟女乱论网| 色播五月天天| 99爱免费在线视频| 都市激情小说婷婷| 99爱视频在线播放| 人人操五月天| 99精品一二三四视频| 婷婷欧美综合| 人人干av| 国产高潮A片羞羞视频涩涩| 亚洲欧美在线观看| 嫩模草| 综合久久久婷| 久久久久亚洲AV成人无码电影| 亚洲精品电影| 激情综合婷婷五月| 色狠狠综合网| 日日夜夜爽| 五月天激情综合网| 婷婷伊人| A片试看50分钟做受视频| 五月天丁香婷婷视频网址| 伊人成综合五月婷婷| 色播五月综合网| 丁香色五月 97干| 激情综合网五月天天| 色综合色香蕉网| 超碰色人妾| 天天摸天天肏| 无码中文一区二区三区| 九一99| 日韩色五月| 99久久综合| 天天操天天插天天射| 五月丁香久久呀| 天天爱天天日| 色综合天天天天做夜夜| 伊人久久大香线蕉av最新| 开心婷婷五月| 99超级超级超级碰| AV在线资源| 婷婷四色五月| 97欧美在线| 女人高潮内射99精品| 丁香花五月天婷婷成人社区| 色播五月综合网| 激情婷婷五月天伊人在线观看 | 五月婷婷久久大香蕉| 亚洲丁香五月综合| 蜜臀av粉嫩av懂色av| 我爱大香蕉| 亚洲爱爱无码婷婷色五月| 天天色,天天日,天天做| 中文字幕在线播放视频| 日本无码专区| 丁香婷婷色九月| 五月丁香六月色情网欧美| 五月色影院| 色色色999| 婷婷伊人五月丁香天堂网| 婷婷放心五日爱| 五月婷婷激情视频| 色婷婷六月| 99热在线观看99| 天天做天天双| 国产免费一区二区三区三州老师F1F1.CC| 久久综合五月天| 欧美激情中文字幕| www.婷婷,com| AV九九| 91丨九色丨老熟女激情| 久久色五月天| 色婷婷精品视频| 热99色| 色八月婷婷| 丁香五月婷婷亚洲色图| 黄色网址五月婷婷| 婷婷五月天中文字幕.| 久热只有精品| 亚洲网综合在线| 久久久妻人人人| 91人人操人人爱| 九九伦子片| 成人欧美一区二区三区在线观看| 婷婷午夜激情| 色综合色综合色综合| 岛国资源网| 99在线观看精品视频| 超碰国产av| 婷婷久久综合久色| 人妻日日日| 丁香五月婷婷性爱| 99热99在线| 99视频91| www夜夜操com| 99riAV成人在线视频| 激情综合五月.....| 青青草激情网| 日本色天堂| 91狠狠色丁香| 欧美亚洲成人在线| 亚洲五月色| 91热久88| 26uuu亚洲欧美| 亚洲国产精品VA在线看黑人| 婷婷综合另类小说| 亚洲精品大片| 操操人人| 久久免费操| 国产精品人妻在线网址| 亚洲色另类| 激情婷婷综合网| 热99AV网站| www.韩日视频| 五月丁香婷婷三级| 夜色五月天| 天天日天天干天天插天天射| 色婷婷六月| 日本激情五月| 五月婷婷丁香日韩在线| 甈你aaaaa| 99热草草| 激情五月天伊人av| 色黄啪啪| 女人被男人吃奶到高潮| 98永久精品| 丁香六月婷婷开心| 婷婷丁香五月麻豆| 久操热线|