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

ARTICLE DETAIL

資訊詳情

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

新版Linux LED驅(qū)動實驗:設(shè)備號分配與cdev結(jié)構(gòu)體全流程解析

新版Linux LED驅(qū)動實驗:設(shè)備號分配與cdev結(jié)構(gòu)體全流程解析 做 ARM Linux 驅(qū)動繞不開一個經(jīng)典實驗LED。這些年在網(wǎng)上能翻到的教程一大半還在用老版register_chrdevmknod那套寫法放到 Ubuntu20.04 的新內(nèi)核上要么編譯報錯要么加載后行為不對勁。標(biāo)題里提到的“新版 LED 驅(qū)動實驗原理”和“設(shè)備號分配 cdev 結(jié)構(gòu)體全流程”其實點出了新舊兩套框架最本質(zhì)的差異新版把一個黑盒拆成了幾個顯式步驟每一步都讓你自己控制、自己釋放。這篇文章就照著 Ubuntu20.04 環(huán)境把從設(shè)備號申請到 cdev 注冊、再到/dev/led節(jié)點自動出現(xiàn)的完整鏈路走一遍順帶把我在調(diào)試中踩過的坑填給你適合剛從 2.6/3.x 老代碼切過來、或者準(zhǔn)備正經(jīng)寫字符設(shè)備驅(qū)動的開發(fā)者參考。1. 從“一鍵打包”到“全流程拆解”新版 LED 驅(qū)動實驗的框架差異1.1 老版 register_chrdev 到底封裝了什么早期驅(qū)動里最常見的一段代碼是這樣的ret register_chrdev(major, led, led_fops);如果major傳 0內(nèi)核會替你動態(tài)分配一個主設(shè)備號如果傳一個固定值那就把該主設(shè)備號占下來??粗∈碌@個函數(shù)內(nèi)部做的事情遠(yuǎn)比表面多它會申請一段設(shè)備號區(qū)間、初始化一個cdev結(jié)構(gòu)體、把file_operations掛上去并且一下就占滿 256 個次設(shè)備號。問題也隨之而來。第一你無法精細(xì)管理次設(shè)備號比如一個驅(qū)動要控制 8 個 LED你想讓每個 LED 各占一個次設(shè)備號老接口根本表達(dá)不出這種意圖它默認(rèn)把所有次設(shè)備號都包圓了。第二主設(shè)備號沖突極難排查內(nèi)核只在申請失敗時返回一個錯誤碼不會告訴你是誰占用了這個號你得自己去翻/proc/devices。第三也是最讓新手難受的一點設(shè)備節(jié)點不會自己出現(xiàn)。老教程會教你在加載后用mknod /dev/led c major 0手動建節(jié)點而現(xiàn)代發(fā)行版的/dev由 devtmpfs/udev 管理手動mknod出來的節(jié)點在系統(tǒng)重啟后就會消失權(quán)限也經(jīng)常不對。這并不是說register_chrdev不能用了它在 5.x 內(nèi)核里依然作為兼容接口存在但新代碼再走這條路等于放棄了內(nèi)核提供的大量資源管理能力。新版驅(qū)動把流程拆成我們下面要講的“設(shè)備號分配 → cdev 注冊 → 設(shè)備節(jié)點創(chuàng)建”三段讓每一步都可控、可回滾、可排查。1.2 新版全流程每個環(huán)節(jié)各管一攤新版 LED 驅(qū)動在module_init里要按順序做四件事分配設(shè)備號alloc_chrdev_region或register_chrdev_region初始化并添加cdevcdev_initcdev_add創(chuàng)建 classclass_create創(chuàng)建設(shè)備節(jié)點device_create。對應(yīng)在module_exit里清理順序嚴(yán)格反著來先銷毀設(shè)備節(jié)點再銷毀 class然后移除 cdev最后釋放設(shè)備號。我經(jīng)常跟新人講這段順序不是隨便定的它對應(yīng)的是資源依賴關(guān)系device_create依賴 class 存在cdev 依賴設(shè)備號存在所以你銷毀的時候必須從最上層開始一層層拆先斷掉用戶可見的入口再回收內(nèi)核資源。我用一個生活類比來理解這套模型設(shè)備號是房子的門牌號cdev是房子里擺好的辦公桌file_operations是桌上貼著的工作流程說明而/dev/led這個節(jié)點則是門口掛的招牌。沒有門牌號辦公桌不知道掛靠在哪沒有辦公桌客人來了沒人接待沒有招牌用戶根本不知道有這個房間。新版驅(qū)動把這三件事一步步做每一步失敗都能立刻定位到是哪塊出了問題。2. 設(shè)備號分配alloc_chrdev_region 和 register_chrdev_region 怎么選2.1 dev_t 與 MKDEV/MAJOR/MINOR 的編碼規(guī)則設(shè)備號在內(nèi)核里是一個dev_t類型本質(zhì)是個 32 位無符號整數(shù)。高 12 位是主設(shè)備號低 20 位是次設(shè)備號。主設(shè)備號用來區(qū)分設(shè)備類型和對應(yīng)的驅(qū)動次設(shè)備號用來區(qū)分同一驅(qū)動下的多個實例。直接位運(yùn)算容易出錯內(nèi)核提供了現(xiàn)成宏#include linux/kdev_t.h dev_t devno MKDEV(240, 0); // 主設(shè)備號 240次設(shè)備號 0 int major MAJOR(devno); // 取出主設(shè)備號 int minor MINOR(devno); // 取出次設(shè)備號主設(shè)備號在 5.x 內(nèi)核里可用于注冊的范圍大約到 511實際分配時建議別手寫固定值除非你有明確理由。次設(shè)備號的 20 位空間足夠讓一個主設(shè)備掛幾百萬個同類型設(shè)備所以驅(qū)動里通常一個主設(shè)備號配合多個次設(shè)備號使用。我在調(diào)試時候的習(xí)慣是先把MAJOR(devno)和MINOR(devno)打出來看確認(rèn)設(shè)備號確實拿到了再進(jìn)行下一步。這一步出錯后面所有工作都白做。2.2 兩種分配函數(shù)的適用場景設(shè)備號分配有兩個 API很多新手搞不清區(qū)別其實看名字就夠直白函數(shù)傳入?yún)?shù)特點適用場景風(fēng)險register_chrdev_region(dev_t first, unsigned count, const char *name)需要手動構(gòu)造first即指定起始設(shè)備號調(diào)試時固定設(shè)備號、產(chǎn)品有明確主設(shè)備號約定可能與其他驅(qū)動沖突加載失敗alloc_chrdev_region(dev_t *dev, unsigned firstminor, unsigned count, const char *name)內(nèi)核自動分配結(jié)果寫入指針產(chǎn)品代碼、避免手工管理設(shè)備號每次加載主設(shè)備號可能不同如果你想固定主設(shè)備號代碼這么寫static int major 240; dev_t devno; devno MKDEV(major, 0); ret register_chrdev_region(devno, 1, led); if (ret 0) { pr_err(failed to register chrdev region\n); return ret; }如果讓內(nèi)核動態(tài)分配dev_t devno; ret alloc_chrdev_region(devno, 0, 1, led); if (ret 0) { pr_err(failed to alloc chrdev region\n); return ret; } major MAJOR(devno); pr_info(led major %d, minor %d\n, major, MINOR(devno));我在實際項目里強(qiáng)烈推薦第二種原因很現(xiàn)實你永遠(yuǎn)不知道目標(biāo)板子上哪些主設(shè)備號已經(jīng)被其他驅(qū)動占了。動態(tài)分配把“找空號”這件事交給內(nèi)核沖突概率降到最低。調(diào)試階段為了復(fù)現(xiàn)問題可以加一個模塊參數(shù)允許手動指定主設(shè)備號0 表示動態(tài)分配。static int major 0; module_param(major, int, 0644); if (major) { devno MKDEV(major, 0); ret register_chrdev_region(devno, 1, led); } else { ret alloc_chrdev_region(devno, 0, 1, led); }這樣insmod led.ko默認(rèn)動態(tài)分配insmod led.ko major241則固定為 241調(diào)試和產(chǎn)品兩不誤。2.3 設(shè)備號釋放與常見沖突排查設(shè)備號屬于內(nèi)核全局資源用完了必須還回去。釋放函數(shù)只有配套的unregister_chrdev_region(devno, count)一個放在module_exit的最后一步執(zhí)行。我在代碼審查時見過不少新手把unregister_chrdev_region放在cdev_del之前當(dāng)時看不出問題但設(shè)備文件還開著的時候內(nèi)核按設(shè)備號找不到對應(yīng)的cdev系統(tǒng)日志里就會冒出一些奇怪的錯誤。排查設(shè)備號沖突最直接的辦法是加載前先看一眼cat /proc/devices這個文件列出當(dāng)前已經(jīng)注冊的字符設(shè)備和塊設(shè)備的設(shè)備號與名稱。如果發(fā)現(xiàn)目標(biāo)主設(shè)備號已經(jīng)在列表里那就別硬搶。還有一招是用grep過濾cat /proc/devices | grep led如果日志出現(xiàn)register_chrdev_region: ... already in use之類的提示多半就是主設(shè)備號撞車了。3. cdev 結(jié)構(gòu)體如何把 file_operations 掛到設(shè)備號上3.1 struct cdev 的關(guān)鍵成員與初始化設(shè)備號只是給設(shè)備發(fā)了一張“身份證”真正讓這張身份證生效的是cdev。內(nèi)核源碼里的定義大致如下struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; dev_t dev; unsigned int count; };四個關(guān)鍵成員各有用處kobj讓cdev成為內(nèi)核對象模型的一員可以被引用計數(shù)管理owner通常寫成THIS_MODULE保證設(shè)備正被使用時模塊不能被卸載ops掛載文件操作函數(shù)集是業(yè)務(wù)核心dev記錄它對應(yīng)的設(shè)備號count表示占用了多少個次設(shè)備號。初始化有兩種方式。一種是在文件作用域直接放一個struct cdevstatic struct cdev led_cdev; cdev_init(led_cdev, led_fops);另一種先用cdev_alloc()動態(tài)分配再cdev_init()。對于 LED 這種單實例驅(qū)動我建議用靜態(tài)方式少一次動態(tài)內(nèi)存管理就少一類內(nèi)存泄漏隱患多實例場景再用動態(tài)方式按需創(chuàng)建。初始化完成后led_cdev.owner THIS_MODULE這行也別忘了否則模塊卸載時會出問題。3.2 cdev_add 的時機(jī)與錯誤處理cdev_add是真正把cdev和設(shè)備號綁進(jìn)內(nèi)核的設(shè)備表里的動作ret cdev_add(led_cdev, devno, 1); if (ret 0) { pr_err(failed to add cdev\n); goto err_unregister; }第三個參數(shù)是設(shè)備數(shù)量一般寫 1如果申請了多個次設(shè)備號就寫對應(yīng)的數(shù)量。這里特別提醒一個最容易忽視的點cdev_add一旦成功用戶空間立刻就能打開這個設(shè)備了所以在這之前必須保證后續(xù)所有資源都已經(jīng)準(zhǔn)備好。順序反了比如先cdev_add再class_create那么成功添加后到 class 創(chuàng)建前這個短暫窗口內(nèi)已經(jīng)可以 open 設(shè)備但節(jié)點還不存在容易讓上層應(yīng)用拿到一個半成品設(shè)備。cdev_add失敗時要記得把前面分配的設(shè)備號釋放掉。我最??吹降膯栴}就是失敗分支里只return -EINVAL設(shè)備號還掛在系統(tǒng)里第二次加載直接撞車。正確的回滾順序是cdev_del→unregister_chrdev_region一層層退回去。3.3 file_operations 里怎么設(shè)計 LED 的操作入口file_operations是驅(qū)動與用戶空間交互的接口表。LED 實驗不需要復(fù)雜功能核心就三個open、write、release。以下是新內(nèi)核推薦的空 open 寫法static int led_open(struct inode *inode, struct file *filp) { return 0; }如果有多個 LED可以在open里通過iminor(inode)取出次設(shè)備號確定當(dāng)前操作的是哪一路 LED。write里要接收用戶傳進(jìn)來的“開/關(guān)”指令static ssize_t led_write(struct file *filp, const char __user *buf, size_t count, loff_t *ppos) { char value; if (copy_from_user(value, buf, 1)) return -EFAULT; if (value 1) led_set_state(1); else if (value 0) led_set_state(0); else return -EINVAL; return 1; }注意這里不能直接用*buf那是用戶空間地址內(nèi)核線程不能直接解引用。copy_from_user返回值為 0 表示拷貝成功返回值非 0 表示還有多少字節(jié)沒拷完應(yīng)當(dāng)返回-EFAULT。這個細(xì)節(jié)是新手最容易踩的不拷貝直接解引用輕則讀到垃圾值重則觸發(fā)內(nèi)核 oops。file_operations定義如下static const struct file_operations led_fops { .owner THIS_MODULE, .open led_open, .write led_write, .release led_release, };寫const是必須的因為內(nèi)核只允許注冊只讀的file_operations表。4. 設(shè)備節(jié)點從 mknod 到自動出現(xiàn)class_create 與 device_create 的配合4.1 /dev/led 這個節(jié)點到底是誰創(chuàng)建的老框架需要mknod手動創(chuàng)建節(jié)點但新版驅(qū)動在module_init里調(diào)用device_create后/dev/led會自動出現(xiàn)。這個“自動”的背后是 udev 在干活device_create會向內(nèi)核的 sysfs 寫入設(shè)備信息并觸發(fā) ueventudev 守護(hù)進(jìn)程收到事件后根據(jù)設(shè)備所屬的 class 和名字在/dev下創(chuàng)建對應(yīng)節(jié)點。對于嵌入式環(huán)境里不用 udev、而是用 busybox 的場景對應(yīng)的機(jī)制是 mdev需要在啟動腳本里配置 mdev 的規(guī)則。Ubuntu20.04 桌面版和服務(wù)器版默認(rèn)都有 udev所以我們在 PC 上跑模塊時基本上不需要額外配置。class_create的作用是給設(shè)備分組。設(shè)備創(chuàng)建后你會在/sys/class/led/下面看到這個設(shè)備這也是用戶態(tài)程序發(fā)現(xiàn)硬件設(shè)備的入口之一??梢岳斫鉃閏lass是設(shè)備在 sysfs 里的“目錄名”決定它歸到哪個類目下面。4.2 device_create 參數(shù)逐項拆解device_create這個函數(shù)參數(shù)比較多我一個個解釋static struct class *led_class; static struct device *led_device; led_class class_create(THIS_MODULE, led); if (IS_ERR(led_class)) { pr_err(failed to create class\n); goto err_cdev_del; } led_device device_create(led_class, NULL, devno, NULL, led); if (IS_ERR(led_device)) { pr_err(failed to create device\n); goto err_class_destroy; }第一個參數(shù)led_class是設(shè)備歸屬的 class第二個參數(shù)parent通常傳 NULL第三個參數(shù)devno是這個設(shè)備對應(yīng)的設(shè)備號它是設(shè)備和cdev掛鉤的錨點第四個參數(shù)drvdata可以傳驅(qū)動的私有數(shù)據(jù)指針LED 實驗里不需要最后一個變參是設(shè)備節(jié)點名字的格式化字符串比如想要led0、led1這種名字就寫成device_create(led_class, NULL, devno, NULL, led%d, 0)。要注意class_create和device_create的返回值都是錯誤指針。判斷時不能直接和 NULL 比較要用IS_ERR()和PTR_ERR()if (IS_ERR(led_device)) { ret PTR_ERR(led_device); goto err_class_destroy; }4.3 完整可編譯的 LED 驅(qū)動代碼把前三章的思路串起來就是一個完整的新版 LED 字符設(shè)備驅(qū)動。我貼一個能直接編譯的版本實際硬件控制部分我用一個接口函數(shù)代替你換成自己的 GPIO 或寄存器操作即可#include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/cdev.h #include linux/device.h #include linux/uaccess.h #define LED_DEV_COUNT 1 static int major 0; module_param(major, int, 0644); MODULE_PARM_DESC(major, led major number, 0 for dynamic alloc); static dev_t led_devno; static struct cdev led_cdev; static struct class *led_class; static struct device *led_device; static void led_set_state(int state) { /* 實際項目中替換為 ioremap 寄存器操作或 gpiod_set_value */ pr_info(led state - %d\n, state); } static ssize_t led_write(struct file *filp, const char __user *buf, size_t count, loff_t *ppos) { char value; if (count 1) return -EINVAL; if (copy_from_user(value, buf, 1)) return -EFAULT; if (value 1) led_set_state(1); else if (value 0) led_set_state(0); else return -EINVAL; return 1; } static int led_open(struct inode *inode, struct file *filp) { return 0; } static int led_release(struct inode *inode, struct file *filp) { return 0; } static const struct file_operations led_fops { .owner THIS_MODULE, .open led_open, .write led_write, .release led_release, }; static int __init led_init(void) { int ret; if (major) { led_devno MKDEV(major, 0); ret register_chrdev_region(led_devno, LED_DEV_COUNT, led); } else { ret alloc_chrdev_region(led_devno, 0, LED_DEV_COUNT, led); } if (ret 0) { pr_err(failed to alloc/register chrdev region\n); return ret; } major MAJOR(led_devno); pr_info(led major %d, minor %d\n, major, MINOR(led_devno)); cdev_init(led_cdev, led_fops); led_cdev.owner THIS_MODULE; ret cdev_add(led_cdev, led_devno, LED_DEV_COUNT); if (ret 0) { pr_err(failed to add cdev\n); goto err_unregister_region; } led_class class_create(THIS_MODULE, led); if (IS_ERR(led_class)) { ret PTR_ERR(led_class); pr_err(failed to create class\n); goto err_cdev_del; } led_device device_create(led_class, NULL, led_devno, NULL, led); if (IS_ERR(led_device)) { ret PTR_ERR(led_device); pr_err(failed to create device\n); goto err_class_destroy; } return 0; err_class_destroy: class_destroy(led_class); err_cdev_del: cdev_del(led_cdev); err_unregister_region: unregister_chrdev_region(led_devno, LED_DEV_COUNT); return ret; } static void __exit led_exit(void) { device_destroy(led_class, led_devno); class_destroy(led_class); cdev_del(led_cdev); unregister_chrdev_region(led_devno, LED_DEV_COUNT); pr_info(led driver removed\n); } module_init(led_init); module_exit(led_exit); MODULE_LICENSE(GPL); MODULE_AUTHOR(A Developer); MODULE_DESCRIPTION(New style LED char device driver); MODULE_VERSION(1.0);這個文件保存為led.c和后面的 Makefile 放同一目錄。加載后write一個1或0進(jìn)去日志里會打印led state - 1或led state - 0。換成真實硬件時只要把led_set_state里的占位代碼替換成實際的點燈/滅燈操作即可字符設(shè)備那套框架完全不用動。5. Ubuntu20.04 上編譯模塊KDIR 與 Makefile 是關(guān)鍵5.1 本機(jī)編譯與交叉編譯的取舍Ubuntu20.04 在驅(qū)動開發(fā)里通常有兩個角色。如果你只是想在 x86 主機(jī)上驗證字符設(shè)備框架直接用本機(jī)內(nèi)核頭文件編譯模塊insmod到當(dāng)前系統(tǒng)就能測。如果你手上有 ARM 開發(fā)板需要把 Ubuntu 當(dāng)作宿主機(jī)給目標(biāo)板交叉編譯.ko文件。本機(jī)編譯需要安裝內(nèi)核頭文件最簡單的方式sudo apt update sudo apt install linux-headers-generic裝完后一般指向/lib/modules/$(uname -r)/build目錄。uname -r查看當(dāng)前內(nèi)核版本如果頭文件版本和當(dāng)前運(yùn)行內(nèi)核不一致編譯時 vermagic 對不上insmod時會拒絕加載。這一點在升級內(nèi)核后特別容易踩舊頭文件還在但當(dāng)前內(nèi)核已經(jīng)換新版本了。交叉編譯則要準(zhǔn)備目標(biāo)板同版本的內(nèi)核源碼并且該源碼目錄已經(jīng)完成配置。這個源碼目錄就是 KDIR編譯出的模塊和開發(fā)板內(nèi)核的 vermagic 必須完全一致否則加載時報version magic不匹配。所以內(nèi)核源碼版本要和開發(fā)板燒錄的內(nèi)核版本嚴(yán)格對應(yīng)最好直接用制作內(nèi)核鏡像時的那份源碼。5.2 Makefile 模板外部模塊的 Makefile 是一個固定套路核心是調(diào)用內(nèi)核構(gòu)建系統(tǒng)obj-m : led.o KERNELDIR ? /lib/modules/$(shell uname -r)/build PWD : $(shell pwd) all: $(MAKE) -C $(KERNELDIR) M$(PWD) modules clean: $(MAKE) -C $(KERNELDIR) M$(PWD) clean-C告訴 make 先切換到內(nèi)核構(gòu)建目錄M$(PWD)指回模塊源碼目錄modules是構(gòu)建目標(biāo)。這個 Makefile 里的縮進(jìn)必須是 Tab不能用空格否則 make 直接報錯我見過太多次因為這個原因卡住的情況。交叉編譯時改成ARCH ? arm CROSS_COMPILE ? arm-linux-gnueabihf- KERNELDIR ? /path/to/kernel/source all: $(MAKE) -C $(KERNELDIR) M$(PWD) ARCH$(ARCH) CROSS_COMPILE$(CROSS_COMPILE) modules clean: $(MAKE) -C $(KERNELDIR) M$(PWD) ARCH$(ARCH) CROSS_COMPILE$(CROSS_COMPILE) cleanCROSS_COMPILE是工具鏈前綴Ubuntu20.04 上安裝 32 位 ARM 工具鏈sudo apt install gcc-arm-linux-gnueabihf安裝完確認(rèn)一下arm-linux-gnueabihf-gcc -v工具鏈能跑起來再繼續(xù)否則后面所有交叉編譯命令都會以command not found告終。5.3 編譯報錯與模塊加載校驗編譯階段最常出現(xiàn)的問題之一是頭文件找不到報錯類似linux/module.h: No such file or directory。這通常意味著KERNELDIR指向的目錄缺少include/generated或include/linux文件簡單說就是內(nèi)核頭文件沒準(zhǔn)備好。解決方法是要么用發(fā)行版提供的linux-headers-generic要么在內(nèi)核源碼根目錄先執(zhí)行make prepare等配置步驟不能拿一個剛解壓的裸源碼目錄直接當(dāng) KDIR 用。另一個問題是架構(gòu)混亂。如果你在一臺 x86 主機(jī)上編譯出了 ARM 的.ko可以先用file命令確認(rèn)file led.ko輸出里能看到 ELF 架構(gòu)信息比如ARM或x86-64。如果架構(gòu)不對多半是 Makefile 里的ARCH和CROSS_COMPILE沒起作用或者上一次編譯的中間文件殘留。換架構(gòu)之前先make clean清掉舊文件再編避免殘留的.o被復(fù)用。模塊編譯出來之后用modinfo看 vermagicmodinfo led.ko | grep vermagic這份信息和開發(fā)板內(nèi)核要一致。Ubuntu 桌面版默認(rèn)開啟了安全啟動直接insmod可能報Required key not available那是模塊簽名校驗沒通過。臨時測試可以進(jìn)入 BIOS 關(guān)閉 Secure Boot或者給模塊做簽名這個環(huán)節(jié)不是驅(qū)動邏輯問題但很容易卡住新手。6. 加載、測試、排錯實際跑一次新版 LED 驅(qū)動6.1 insmod 之后應(yīng)該看到什么先把 Ubuntu20.04 上本機(jī)測試的完整流程走一遍。編譯成功得到led.ko然后用sudo加載sudo insmod led.ko緊接著觀察內(nèi)核日志dmesg | tail正常情況下應(yīng)該能看到led major 240, minor 0數(shù)字取決于動態(tài)分配結(jié)果。然后確認(rèn)設(shè)備號確實進(jìn)入內(nèi)核cat /proc/devices | grep led再查看設(shè)備節(jié)點ls -l /dev/led如果有crw-rw---- 1 root root 240, 0 ... /dev/led說明整套鏈路已經(jīng)通了。此時用一個普通用戶訪問可能沒有權(quán)限測試時直接換成 root 或用sudoecho 1 /dev/led echo 0 /dev/led每執(zhí)行一次dmesg里應(yīng)該多一行l(wèi)ed state - 1或led state - 0。如果你在板子上接了真實 LED這時候燈就會跟著亮滅。6.2 失敗鏈路排查清單我在帶人做實驗時總結(jié)過一套排查順序按現(xiàn)象定位最快現(xiàn)象可能原因排查與解決insmod 成功但 /dev/led 不存在device_create失敗或者 udev 沒有收到事件dmesg看是否有failed to create device檢查 class_create 是否成功/dev/led 存在但 open 失敗設(shè)備節(jié)點權(quán)限不足或 cdev_add 順序有問題sudo chmod 666 /dev/led臨時測試寫 udev 規(guī)則做永久處理open 成功但 echo 報錯copy_from_user失敗或 write 邏輯返回負(fù)數(shù)回到驅(qū)動代碼檢查 fops 里 write 是否注冊成功rmmod 報仍在占用有進(jìn)程打開著 /dev/ledfuser -v /dev/led查看占用進(jìn)程關(guān)閉后再卸載加載時設(shè)備號沖突register_chrdev_region 指定的 major 被占用cat /proc/devices查詢改用動態(tài)分配或換號特別說一下/dev/led權(quán)限問題。device_create創(chuàng)建的節(jié)點默認(rèn)屬主是 root權(quán)限是 0600所以普通用戶echo進(jìn)去必然被拒。臨時測試用chmod 666沒問題產(chǎn)品上建議寫一個 udev 規(guī)則按 class 和 subsystem 給設(shè)備節(jié)點設(shè)置權(quán)限組這樣每次開機(jī)自動生效不依賴手動改權(quán)限。6.3 動態(tài)主設(shè)備號對應(yīng)用透明嗎這是許多新手最后會糾結(jié)的問題如果每次加載主設(shè)備號都變那我應(yīng)用程序里寫死的mknod或者open路徑怎么辦答案是不用擔(dān)心。/dev/led這個節(jié)點名是device_create最后一個參數(shù)決定的和主設(shè)備號無關(guān)。應(yīng)用層打開設(shè)備用的是路徑名真正打開時 VFS 會根據(jù)節(jié)點記錄的dev_t找到對應(yīng)的cdev所以你完全不感知主設(shè)備號是多少。這也正是新版框架的價值設(shè)備號是內(nèi)核內(nèi)部資源應(yīng)用只看到設(shè)備節(jié)點名。多 LED 場景就更好理解了。申請兩個次設(shè)備號device_create分別創(chuàng)建led0和led1應(yīng)用行為完全一致驅(qū)動內(nèi)部通過iminor(inode)區(qū)分控制哪一路。LED 實驗跑通后建議你再補(bǔ)一個read方法和ioctl把整個字符設(shè)備驅(qū)動的骨架填滿后面寫按鍵、寫傳感器驅(qū)動時這套框架能直接復(fù)刻。最后提醒一句經(jīng)驗調(diào)試階段固定major241方便看現(xiàn)象但產(chǎn)品代碼里一定要默認(rèn)走動態(tài)分配。我見過不止一次同事把測試時的固定設(shè)備號帶進(jìn)量產(chǎn)程序結(jié)果目標(biāo)板上那個號早被別的驅(qū)動占走驅(qū)動加載直接失敗排查大半天才反應(yīng)過來。新版這套流程看著比老版多一些代碼但每一步都可控、可回滾、可定位等你能不看模板把這個鏈路默寫出來字符設(shè)備驅(qū)動基本上就入門了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99er这里只有精品视频| 五月丁香六月婷婷久久肏| 老司机视频lsj爱就色| 婷婷六月综合基地| 5月丁香啪啪啪| 日本啪啪天堂| 99热插| 激情五月婷婷| 99视频内射三四| 啪到高潮激情丁香五月| 激情婷婷另类| 五月丁香激情综合网官网| 久综合九| 婷婷久久丁香五月| 五月天停停日日| 亚洲日韩乱码一区二区三区四区 | 超碰在线资源| 97超级碰| 热99视频精品在线| 大香伊人久色| 国产内射婷婷| 人人摸人人操人人爱| 丁香六月婷婷综合激情欧美| 激情综合网五月| 日本五月视频| 久久婷婷五月天亚洲欧美| 天天爽天天爽天天爽天天爽天天爽| 综合网狠狠| 热99玖玖99玖玖99九九| 2050人人操免费工开爱 | 五月丁香六月欧美| 欧美婷婷五月| 五月综合色播播丁香婷婷 | 欧美三级黄色片久久| 欧美天堂婷婷日韩| 九九久99免费视频| 激情婷婷网| 六月婷婷天堂| 亚洲婷婷五月| 1024手机在线观看看片_日韩精品| 五月丁香综合久久夜夜| 六月激情丁香一道本7777| 日韩二区搞逼插逼毛片| 五月婷婷亚洲| 欧美这里只有精品| 色99在线视频| 中文字幕成人| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 大香蕉久久久| 久久精品色| 99re热在线视频| 久久久久99精品成人网站| 成人片在线免费看| caop在线| www.99热最新视频8| 日本婷婷综合精品| 天天色激情| 日本成人小说婷婷六月| 天天干天天干天天操| 天天爽综合网| 香焦网五月天| 99热在线观看| 婷婷五月精品| 色情五月婷| 欧美视频五区| 六月婷婷狠狠色在线观看| 天天更新天天亚洲| 婷婷射丁香| 婷婷五月天堂| 久操大香蕉| 极品人妻VIDEOSSS人妻| 肏日网在线看| 狠狠搞五月天| 丁香五月天天高清在线| 亚洲精品成人| 97色射| 99ri国产精品| 美女亚洲五月丁香| 日本色狠狠| 日本色99| 欧美A级成人婬片免费看理论| 五月天另类小说久久小说网| 大香蕉五月天婷婷| 丁香五月激情无码视频| AV在线大香蕉| 玖玖九九超碰| 亚洲精品网站色视频| 婷婷六月激情啪啪| 99干日本| 99热 日韩| 丁香色五月AV在线| 一个色的综合| 超碰97干| 婷婷中文综合网| 婷婷丁香五月激情密臀av| 操碰99| 天天爽,天天操。| 永久AⅤ1| 极品人妻VideOssS人妻| 天天日中文| 六月婷婷网| 国产日批视频免费播放| 婷婷在线激情| ..真实国产乱子伦对白在线_欧 | 婷婷丁香综合在线| 五月丁香色五月| 五月婷婷,狠狠操| 婷婷五月天综合网| 丁香五月婷婷Av| 五月婷婷综合激情| 超碰在线国产| 色综合香蕉| 激情文学天天| 97精品自拍| 国产SUV精品一区二区883| 久久九九re热| 激情五月婷在线精品| 婷婷丁香宗合888| 极品人妻VIDEOSSS人妻| 99久热在线精品| 丁香五月五月婷婷五月天激情四射| www久久久| 天堂久久久久天堂网| 色色五月天丁香| 久热最新视频| 开心激情婷婷| 99久热这里只有精品视频删减版| 91精品久久久久久久| www.金莲av| 97自拍视频在线| 天天日夜夜帕| 伊人喵咪a V| 天天人人综合| 婷婷伊人网| 日本在线wwww| 欧美人妻一区二区| 91九色PORNY大屁股| 噜噜噜噜噜久| 99这里只有精品|v| 色婷婷大香蕉| 久久久999精品| 久热精彩视频98| 五月花成人网| 久草热8精品视频在线观看| 99re久久| 激情五月婷婷综合| 激情五月天婷婷| 激情图片婷婷丁香五月| 玖玖精品婷婷| 丁香五月中文字幕| 日本久热| 婷香五月激情视频| 五月色婷婷在线观看| 婷婷久久99| 五月婷婷六月丁香首页| 五月天伊人久久久久| 99热九九九九| 最新va在线播放| 99久热在线精品99re6热| 丁香婷婷六月天| 色婷婷99| 国产热精品| 色色色网站| 五月天激情国产综合婷婷婷就去爱| 超碰国产在线观看| 色婷婷丁香| 91在线日| 99热在这里只有免费精品| 91欧美| 久久久香| 激情综合五月婷婷| 婷婷色香六月综合激情| 女同在线9| 69午夜成人影片| 婷婷丁香社区| 99免费在线| 香蕉99网| 激情五月婷婷在线观看| 超碰成人在线观看| 99热97| 激情网第九色| 少妇人妻人伦A片| 另类五月婷婷| 琪琪色综合网站| 五月丁香在线偷拍视频| 欧美日本97| 亚洲热综合| 成人 AV播放| 亚洲另类噜噜| 玖玖婷婷精品| 4399成人黄A片| 性色五月天| 操97| 成人亚洲精品久久久久 | 婷婷九月色| 久久综合中文| 五月综合色| 五月伊人综合| 99在线看视频| 五月天综合久久| 久99热| 色99色| 色插综合网| 成人AV在线中文版| 日日肏夜夜干| 久久久久久激情| 26uuu精品一区二区| 第四色色六月色综合| 激情五月天色色| 免费试看小视频 99| 五月天激情美女久久| 色五月丁香五月婷婷五月成人网| 国产在线视频1234| 色婷婷色99国产综合精品| 天天爽天天爽天天爽天天爽天天爽| 日本天天色| 第一区久久网站| 亚洲精级| 激情五月天小说网| 久色婷婷200| 日本美女上人| 超碰在线资源| 久久99网| 五月婷婷激情久久| 一起草无码视频| 国外亚洲成AV人片在线观看| 99热碰碰| 爱婷婷久久视频| 97黑人精品区| 色欲色欲久久宗合网| www.五月天| 国产99热| 色色五月激情| 强辱丰满人妻HD中文字幕| 亚洲精品午夜国产va久久成人| 婷婷在线综合| 久久久99精品免费观看| 婷婷97| 日本熟女一区二区| 在线国产精品色| 色情成人五月天| 日本99视频| 色五月丁香六月婷婷| 久久婷婷婷| 国产3p露脸普通话对白| 五月婷婷五月| 婷婷五月综合网| 亚洲五月天伊人| 婷婷天堂视频| 九九99九九精品视频| 超碰人妻在线| 99精品网| 天堂草在线看www| 思思99精品视频| 99久久.www| 九九热精品视频在线观看| 欧美3AaAa大片| 日韩免费乱轮网站| 99热大香蕉| 在线综合啪| 思思热视频在线| 日本色五月| 婷婷丁香亚洲五月天| aa久久| 亚洲亚洲人成综合网络| 久久九九综合| 99热在线播放| 久久久久er热| 日本欧美在线| 婷婷综合色图| 九九热10| 九久9精品| 五月婷婷六月丁香色| 九九综合精品| 激情深爱婷婷网| 亚洲小电影在线观看黄999| 丁香情色五月| 久久丁香综合香蕉| 亚洲第一成人AV| 九九色色| 久久精品99国产精品日本| 在线日韩视频| 婷婷香五月天| 五月综合久久| 婷婷五月天色网久| 五月丁香在线婷婷蜜桃| 99久久国产宗和精品1上映| 97操操操| 九九九这里只有精品| 在线观看欧美| 久久久久久激情| 久久激情五月网| 99在线视频喷水| 91热久| 色婷婷yy久| 五月丁香本色在线观看| 激情综合视频| 色婷婷久久7777| 婷婷综合在线网| 九日日夜夜69| www.综合久久.com| 色婷婷免费观看| 91精品国产日韩91久久久久久国模| av在线中文| 色女伊人| 婷婷五月天激情小说| 婷婷色av| 丁香婷婷色色| 99热在线观看| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 99热精品在线| 极品精品一区二区三区在线| 婷婷九月丁香中文| 色噜噜五月天| 天天干,天天舔| 亚洲色婷婷激情| 狠狠狠狠狠狠草| 翔田千里aV中文字幕| 亚洲 在线 性爱 | 久久伦乱| 五月丁香六月婷婷不卡免费无码| 丁香五月冃欧美| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 亚洲激情五月| 天天草天天爽| 婷婷五月天综合久久日美女| 99精品久久久久| 99日韩| 色狠狠激情五月| 五月天激情网图片 - 百度| 日批在线看| 日韩精品无码99| 丁香五月六月综合激情| 久操b网| 六月婷婷七月丁香| 色99色| 午夜大香蕉| 9久久精品| 九九XX视频| 综合亚洲AV| 色婷婷综合网站| 色五月天天| 日日爱激情| 五月丁香婷婷中文| 665566 无码| 丁香五月婷婷Av| 激情婷婷色色| 婷婷丁香五月天中文字幕| 九九婷婷综合| 婷婷视频在线| 大香蕉伊人久久| 99色播| 欧美性爱五月天| 99久视频| 国产激情在线观看| 五月婷婷狠狠干| 亚洲成人av在线播放| 九九在线精点品| 人操综合| 亚洲婷婷丁香五月在线| 日本狠狠色| 久久伊人五月天| 人妻中文av| 久久永久网址| 九九综合| 欧美一级a| 色综合色五月| 狠狠做婷婷| 操碰97| 丁香婷婷浪潮AV久久综合| 国产激情综合| 五月丁香婷婷综合| 久久婷婷九月国产精品| 性爱AV天堂| 九九视频这里只有精品| 97人碰人操| 9色在线| 激情五月婷婷丁香| 韩日另类| 欧美丁香婷婷天天操| 丁香五月婷婷色情综合| 97婷婷五月| 丁香五月色网| AV人人操| 狠狠爱丁香婷| 大香伊人婷婷影院| 无码激情精品色婷婷久久久久| 9久热在线视频精品| 610018岁成人视频| 91热er| PORNY九色9l自拍视频成人| 123日本不卡在线| 婷五月天在线草| 亚洲五月婷婷| 欧美五月婷婷| 激情 婷婷| www久久久久久久| 成人久久天天x资源站| 五月丁香啪啪啪| 91九色成人原创视频| 色狠狠六月| 五月婷婷无码| 日韩啪啪视频| 91精品久久久久| 五月天婷婷激情在线色图| 婷婷十月丁香| 久久久aaa| 日日干夜夜撸夜夜骑| 色婷五月天| 五月天丁香网| 99免费在线| 婷婷色偷拍| 激情五月天无人视频在线| 亚洲色就是色色色| 丁香五月激情性色郤| 欧美色综合天天久久综合精品| 亚洲激情四射| 综合色99| 婷婷综合成人五月天| 久操婷婷| 激情久久天天| 黑人巨粗进入警花疼哭A片| 亚洲精品乱码久久久久久按摩观| 狠狠干在线| 色婷婷小说| 玖玖婷婷五月天| 成人片在线播放| 91seav| 久久9视频| 亚洲操逼网| 丁香色综合| 九九av| 色婷婷九月| 婷婷五月亚洲激情| 国产欧美日韩综合精品一区二区| 亚洲综合色丁香五月天| 97色婷婷| 色色无码| 亚洲午夜精品久久久久久人妖| 久久性视频| 日本五月婷婷久久久六月丁香| 国自产拍偷拍精品啪啪一区二区| www。狠狠干。com| 中文字幕婷婷在线| 9色在线视频| 激情文学 综合 色| 亚洲偷| 五月天激情啪啪| 超碰97在线观看免费| 五月天com| 一本久道综合99| www久久久| 天天激情视频| 成人片在线免费看| 超碰免费在线| www.亭亭五月天| 97热久久| 97自拍视频在线| 久久人人人人妻| 五月丁香A∨在线| 五月综合丁香婷婷| 婷婷五月丁香婷婷| 日本人人草草| 欧美日韩成人| 日韩AAAAAAAAAAA片| 亚洲综合婷婷五月| 激情丁香五月| 色婷婷丁香五月天在线观看| 99re热视频这里只有综合亚洲| 色婷婷五月天| 五月狠狠| 色视五月天婷婷| 色九九七七| 天天综合精品| 五月色影院| 99久久久| 99热很操老逼| 五月天激情视频| 九九热这里只有精品6| 婷婷五月天成人导航| 五月天色色无码| 91丨九色丨熟女丰满| 日韩99色| 激情熟女网| 无码人妻AV久久久一区二区三区| 色婷婷久久综合中文久久一本| 综合五月婷婷| 另类丁香综合| 亚洲日本韩国| 九九热视频首页/这里只有精品| 91久久网站| 色综合色综合网| VA婷婷亚洲| 久热99| 五月天伊人久久| 中文字幕丰满孑伦无码专区| 五月婷啪| 99精品视频网站| 久久精品爱爱| 影视av久久久噜噜噜噜噜三级| 丁香五月天堂亚洲社区| WWW.桔色成人.COM| 久久九九综合| 91久久电影| Va另类视频| 欧美超级视频97| 日本婷婷色| 超碰在线人妻| 伊人久久婷婷| 涩综合网| 这里只有精品视频免费在线观看| 欧美色五月天| 色狠狠图片| 99色在线观看免费| 91色久| 99碰碰中文| 色涩视频久久| 屁股翘好撅高迎合跪趴| 99热这里有精品| 五月婷婷深深爱| 五月天色婷婷激情| 五月丁香六月婷婷在线观看| 亚洲色vA| 九九热这里只有精品一| 日日干夜夜撸夜夜骑| 丁香五月激情宗合网| 六月丁香婷婷大香蕉| 91人妻人人操| 91久女| 韩日另类| 五月天婷婷综合色| 亚洲1区| 狠狠狠狠狠| 97天堂| 五月婷婷欧美| 久久98| 中文字幕不卡+婷婷五月| 五月丁香婷婷婷激情爱爱| 9色小视频在线观看| 欧美 色婷婷| 亚洲中文字幕在线观看| 免费看成人AA片无码视频吃奶| 内射干少妇亚洲69XXX| 91精品久久久久久77777| 91碰碰碰| 五月天成人在线视频网站| 五月色网| 欧美内射AA| 97色婷婷成人综合在线观看| 五月丁香香蕉| 26uuu日韩| a久久免费视频| 五月天色导航| 丁香五月深爱五月婷婷| 久99久热只有精品国产99| 天天爱天天做综合| 天天综合亚洲综合| 色人久久| 久久伊人大香蕉| 91精品久久久久| 夜夜爽天天爽| 激情久久四色| 熟妇人妻中文字幕无码老熟妇| 丁香五月性| 白度黄视频| 热久久这里只有三级视频| 国内精品免费一区二区2009| 色色影院黄大片| 五月天婷婷激情综合| 无码橾| 99热综合色图| 91一起操| 免费观看欧美成人AA片爱我多深| site:feetmall.com| 91趴趴| 91肏| 婷婷久久久久久久| 九九热视频精品999| 亚洲99热| 97av在线视频| 日本一级淫| 99精在线| 99视频内射三四| 中文字幕日产A片在线看| 丁香婷婷在线| 激情丁香六月| 欧美 日韩 人妻 高清 中文| 激情五月天99色| 五月婷婷中文字幕| 婷婷五月欧美综合| 丁香香蕉婷婷| 久久久精品人妻| 手机AVAV天堂看网| 4438成人电影| 国产成人精品亚洲线观看| 久久性爱视频久久性爱视频| 欧美五月婷婷| 成人亚洲精品久久久久| 亚洲综合激情五月| 亚洲人妻AV| 五月天久久色| 色婷天天| 丁香五月成人在线| 99爱爱| 精品香蕉99久久久久网站| 夜夜干夜夜操| 五月天色播网| 五月天婷婷久草丁香| 玖玖在线视频| 丁香五月天堂网| 激情五月婷婷免费视频| 欧美婷婷丁香五月| 97五月天| 丁香五月欧美激情| 天天橾夜夜爽| 五月天色婷婷激情综合| 久99久视频精选| 99噜噜噜在线播放| 99精品在线观看视频| 青青草蜜臀| 色婷婷88| 中文幕无线码中文字蜜桃| 操97免费超级视频| 综合深爱五月| 激情图片亚洲| 久久综合网桃花| 久久久国产精品黄毛片| 人妻激情综合| 五月丁香婷婷激情视频| 日本的α片xxxwww| 七七色综合| 极品人妻VIDEOSSS人妻| 男女99免费视频| www.五月天激情| bbwcuckold精品熟妇| 欧美碰碰碰| 搡BBBB搡BBB搡18| 日韩av在线免费观看| 国产精品久久久丁香五月八戒视频| 99色视频在线观看最新| 原琪琪色影院| 91婷婷五月天嫩女| 久久机热这里只有 | 色婷| 五月天色色色色色| 五月丁小婷婷激情四射| 97色色视频| 影音先锋一区二区三区| 婷婷五月激情网| 五月激情综合深爱| 狠狠色激情综合| 97色色-99久久| 国内一级精品| 婷五月天六| 无码激情AAAAA片-区区| 五月天色区| www.五月天色色.com| 五月婷婷免费看| 操逼在线视频| 欧美猛片| 婷婷一本和五月丁香| 人人草公开操| 婷婷五月天色色| av在线观看网站| 五月婷婷综合社区| 色五月天丁香婷婷色| 人人艹艹艹| 五月天激情网站| 五月天激情小说| 思思热视频在线| www99热| 久久久999精品| 人人干av| 国产裸舞表演WWWW| 亚洲欧美另类在线23p| 五月噜噜| 丁香五月 六月婷婷首页| 五月天婷婷在线观看精品男人| 婷婷五月花免费视频在线| 亚洲激情网| 久热九九| 激情五月天在线观看婷婷| 久久激情综合| 五月丁香六月在线欧美| 99re99热| 激情精品久久| 婷婷丁香人妻| 色色亚卅| 99色色网站| 综合狠狠五月婷婷| 色婷婷影音| 99色.com| 五月婷久久草| 久热这里只精品| 天天插天天狠| 97丁香五月天| 亚洲色欲AAAAAA| 99思思| 欧美丁香五月夫妻天| 91视频综合网| 97人妻碰碰中文无码久热丝袜| 99久久久| 丁香五月婷婷五月| 伊人丁香五月天丁香在线婷| ztEJj| 狠狠色九月| 日本九九视频| 99热18| 婷婷一本和五月丁香| 狠狠狠狠狠草| 五月花免费视频| 开心激情五月天网| 操人妻视频91| 婷婷五月天伊人网| 日韩乱轮AV| 色五月,婷婷大香蕉| 综合色五月| 精品成人无码A片观看香草视频 | 九月av| 九九色色| 婷婷色六月| 婷婷五月天色色| 玖玖资源网站最新站| 五月丁六月婷| 色色丁香激情五月| 久久久ww| 97高清国语自产拍| 五月婷婷丁香网| 日韩操人| 深爱激情av| 91碰在线| 91久久精品国产91性色TV| 人人干人人操外国| 激情五月丁香婷婷夜夜操| 开心五月色婷婷综合开心网| 日本一级一片免费视频| 五月婷婷色| 综合激情四射一theav| 99色在线| 五月丁香六月婷婷的女人| 97色永久免费视频| 欧美69久成人做爰视频| 日韩操逼大片| 婷婷丁香亚洲五月天| 婷婷五月天成人| 色播五月婷婷| 丁香花婷婷五月天| 亚洲人人96@| 直接看的AV| 亚洲日韩一页精品发布| 亚州婷婷五月激情综合| 日本本土色网第一区| 久久这里有| 91操碰| 五月亭亭欧美女人| 婷婷五月天天| 成人电影在线免费试看| 亚洲9久久精品| 可以免费观看的av网址| 五月丁香激情综合六月涩涩爱| 最新激情五月天| 国产亚洲精品久久一区二区三区| 风流少妇A片一区二区蜜桃| 第四色大香蕉| 激情婷婷五月色| 久久9视频欧美| 国产av第一专区| 婷婷六月激情小说网| 亚洲另类视频| 免费看欧美成人A片无码| 久久与婷婷| 婷婷久久五月天| 曰日爽日日操| 啪啪综合网| 亚洲色图五月丁香| 激情综合网五月激情| 国外亚洲成AV人片在线观看| 成人版视频在线观看| 97五月天婷婷| 国产精产国品一二三在观看| 操人91| 99综合视频| 丁香,开心成人,久久| 日本综合色图| www.9797国产| 黄色高清无码| 五月丁香天堂网婷婷| 99久久婷婷国产综合| 99视频在线看| 中文字幕 久久9999| 六月激情综合| 97人人操在线| 亚洲婷婷激情综合激情999精品| 东北熟女高潮99综合99| 中文字幕簧片| 九九99久久| 天天综合五月| 操逼巨乳91| 爱狠射| 五月天色网站| 国产又色又爽又黄又免费| 六月丁香婷婷视频综合在线观看| 五月婷婷久久大香蕉| 五月色亭丁香| WWW.99热| 两性婷婷丁香五月| 草婷婷在线| 国产毛片精品一区二区色欲黄A片 99国产在线精品视频 | 农村熟妇高潮精品A片| 丁香九月激情| 丁香六月啪| 99色视频在线观看最新| 日日日日日| 婷婷第一页| 婷婷五月天欧美| 午夜在线成人网站免费观看| 99思思热只有在这里看| 99re欧美精品| 九九视频在线免费视频| 激情小说五月天| 六月婷婷狠狠| 日本乱子人伦在线视频| 欧美激情五月天婷婷| 九九热在线观看视频| 99国产精品久久久久久久久久久| 小色小蛇伊人婷婷色香五月| 影音先锋人妻出差| 免费视频WWW在线观看网站| 婷婷五六月丁香| 亚洲人妻av| 五月丁香啪啪网| 99精品在线播放| 久久久久9| 午夜成人综合| 午夜激情综合| 五月天婷婷在线AN| 九九国产精视频| 涩五月婷婷| 五月天婷婷在线啪啪视频| 日本欧美成人片AAAA| 天天干天天日天天插| 性做爰A片免费视频A片直播| 啪啪激情网站| 婷婷黄色网| 婷婷九月丁香| 99riAv1国产在线观看| 婷婷的99视频网站| 26uuu淫色| A片试看120分钟做受图片| 久久久五月婷婷| 欧美毛卡| 久久久久久久97| 丁香六月婷婷激情综合| 婷婷久久综合| 天天操天爱综合| 月丁香久久久| 久久五月天婷婷| 中文资源在线a| 五月丁香六月婷婷网| 丁香婷婷偷拍| 欧美日本97| 免费啪啪亚州视频| 五月天亚洲图片婷婷| 成人视频网| 俺去啦综合网| 97超碰色| 九色自拍| 狠狠色性| 色站9/| 日日天天干| 欧美成人网婷婷综合在线| 婷婷综合在线网| 美女五月天| av色婷婷| 亚洲欧洲中文日韩久久AV乱码| 九九99一区| 亚洲AV无码成人精品区电影网| 99在线观看视频| 九九色婷婷| 97精品人人A片免费看| 欧美成人A片AAA片在线播放| 日本在线视频播放91| 嫩草AV久久伊人妇女超级A| 久久99免费视频| 99色视频在线观看最新| 色爱五月天| 婷婷五月天天aV| 综合性爱网| 久久婷婷影院| 婷婷丁香五月高清| 香蕉综合在线| 久草丁香婷婷1024| 玖玖在线资源视频| 色色色色色日韩午夜激情| 五月天婷婷成人| 第2色五月婷| 亚洲成人综合网在线免费观看| 99ri国产| 久久思思热视频| 五月婷婷欧美| 淫视馆av三区| 久久婷婷综合五月天| 亚洲夜夜操| 婷婷激情五月综合| 精品一区二区三区三区| 九九热九九| 九九久久五月天综合伊人| 非洲一级AV| av网站不卡在线| 色婷婷久久| 五月天激情中文字幕| 伊人久久大香蕉网| 五月开心播播网| 婷婷精品免费久久| 天天综合网网欲色| 激情五月天婷婷久久久久久久久久久| 久久色午夜在线导航| 伊人激情| 国产裸舞表演WWWW| 婷婷丁香六月五月天| 久人人操| 国产在线aaa片一区二区99| 91视频一起草| 9999热精品在线免费播放| 中文字幕av亚洲| 91 影音先锋| 99热亚洲精品| 天天天添天天操| 在线成人网站| 色色综合热| www.婷婷| 亚洲成人网在线观看| 99av视频| 五月丁香婷中文字幕| 色五婷婷| 成人va在线| 五月婷A V在线| 我爱大香蕉| 久久99久久99精品免观看粉嫩| 色婷婷五月天天天干天天操天天爽| 日韩色色小视频| 色婷婷香蕉丁丁网| 潮汕成人AV片在线| 99热网精品| 久久99热这里只频精品6学生| 久草大| 色五月综合婷婷| 99热国产这里只有| 日本99视频| 欧美色色色色色色色色色色| 激情五月成年| 少妇高潮A片无套内谢麻豆传| 色综合com| 天天夜夜六月丁香五月婷婷老师| 天干天天干天天天天天| 婷婷五月天激情四射| 日本黄色精品| 丁香五月婷婷操逼| 不卡在线视频| 91操人人操| 嫩草AV久久伊人妇女超级A| 色色色图| 久色视频| 色色色综合色| 天天插天天插天天日| 国产1区2区3区| 都市激情亚洲| 五月天激情啪啪| 日本三日本三级少妇三级66| 就爱日五月天| www.金莲av| 久久全意婷婷| 天天插天天插| 色色五月天婷婷| 91久久久久久久| 五月婷啪| 丁香色婷婷五月天| WWW,五月| 久9视频| 色色色999| 黄网在线免费观看| 丁香桃色网| 激情网五月| A在线观看| 99操碰| 五月亭亭直播| EEUSS鲁片一区二区三区| 99久久国产宗和精品1上映| 国产精品美女久久久久AV超清| 麻豆AV一区二区三区| 精品国产AV色一区二区深夜久久| 综合色色五月| 任你干aa| 性爱五月婷| 色婷婷色九月| 婷婷精品在线| 久热黄色| 五月婷网| 99er免费在线观看| 米奇激情婷婷| 久久人妻在线| 欧美成人性爱网| 欧美性色视频| 超碰狠狠操| 亚洲高清在线| 成人中文网| 97午夜一区二区| XX色综合| 先锋男人91资源| 超级碰碰碰97免费| 铁牛TV人妻| 色五月丁香六月资源站| 丁香五月婷婷色五月| 激情婷婷五月天在线观看| 丁香五月婷婷激情蜜桃| 丁香五月天视频| 五月天久久婷婷| 欧美内射AAAAAAXXXXX| 国产干逼片| 婷婷狠狠97| 亚洲超碰在线| 五月婷婷无码专区| 婷婷丁香人妻天天爽| 色情久久久| 99久在线精品99re8| 久久综合九九| 亚洲中文AV网站| 五月天综合激情网| 综合激情五月丁香9999久久精| 思思re视频在线| 色色com| 婷婷金品综合视频| 国产偷人爽久久久久久老妇APP| 91丨九色丨首页| 9l视频自拍9l视频自拍九色学生| 九九九这里只有精品| 五月丁香成人| 五月天亭亭俺也| 色色色色网站| 日本婷婷激情四射中文字幕在线观看| 9久久网| 久久天天天| 天天xxxxxx天天日| 99综合| 婷婷五月激情基地| 美腿丝袜AV天堂网| 熟女乱论网| 婷婷色正月| 99久re热视频精品98| 99精品偷自拍| 97人人做| 少妇口诉沐足视频播放器网址| 色婷婷五月天偷拍| 国产精产国品一二三在观看| 怡红院91a√| 丁香亭亭久久| 五月天综合在线观看| 色五月婷婷91| 亚洲精品又粗又大又爽A片 | 五月婷婷九九久久| 亚洲精品欧洲精品| 久久这里有精品| 婷婷涩五月天综合| 欧洲一区二区| 人人色人人弄人人操| 婷婷五月丁香久久| 婷婷五月六月丁香综合| 99热这里有精品| 91传媒无码人妻精| 色五月成人| 五月激情六月综合| 久99热| 一区二区免费看| 99色色最新视频| 婷婷久久久久| 香蕉视频性爱BB做爱| 性生活视频98791| 伊人午夜综合色啪| 五月婷婷六月丁香在线| 久久亚洲天堂| 啪啪啪五月天| 99久久综合网| 4399伦理午夜| 五月激情视频网| 五月婷色色| 天天日天天久久青青| 激情五月深爱五月观看| 99热8| 综合AV网| www.主妇. com| 色婷婷www| 人人操91色| 欧美美女国产日韩一区二区久| 97色女人在线| 久久性都花花世界成人免费视频| 久久99热免费| 久久五月网| 激情av网| 丁香婷婷五月综合影院| 大学生高潮无套内谢视频| 激情五婷网| 欧美色97| 久久亭亭电影| 东北婷婷五月天| 五月婷免费视频久久久| 99热啪啪| 99玖玖在线视频| 丁香五月天在线| 无码碰碰| 性爱电影科技贸易有限公司| 亚洲天堂热| 婷婷久久网| 日本婷久久| 五月丁香人妻| www.五月婷婷久久.com| 五月丁香激情综合网| 久久激情综合| 99热这里只有精品1025| 人人叉久| 婷婷六月天激情| wuyuedingxiang| 五月丁香六月婷婷a v| 九九热精品视频在线观看| 深爱五月婷婷开心中文字幕| 天天射美女| 色综合网址| 婷婷五月综合社区| 五月婷婷综合社区| 久久久天天啊| 久久桃花网色婷婷| 国产美女精品| 欧美性生交XXXXX无码小说| 丁香婷婷丁香五月欧美人| 色婷婷五月天偷拍| 五月婷婷高清| 五月激情影视| 丁香婷婷色色| 久久视频婷婷| 啪啪99| 久99久热| BT综合在线视频观看| 亚洲av日韩无码| 五月丁香无码| 天天色图| 97久久超视频| 天天干天天干天天干| 婷婷伊人75| 99热爱爱干干日| 久久综合综合久久| 久久婷婷色| 激情视频网址| 99人人干| 婷婷五月天无码熟女| 黄色中文字目| 欧美性爱5月天天天看| 视频一区二区在线| 十月色综合| 成人Av在线大片| 亚洲综合五月天婷婷丁香| www.五月婷婷| 久久五月天婷婷| 天天色五月| 激情综合丁香六| 亚州色色色| 天天综合久久| 九九热10| 五月天狠狠网站| 精品亚洲国产成AV人片传媒| 久久性爱网站| 五月丁香综缴情性爱| 国产午夜一区二区三区| 中文字幕AV网址| 五月天婷婷在线AN| 思思热精品免费视频| 久久久亚洲成人无码A片| 丁香婷婷久久综合在线| 九九精品碰| 激情另类综合| 五月天五月色婷婷综合| 无码人妻丰满熟妇奶水区码| 婷婷五月天美女视频| 99久久网站| 激情五月丁香综合蜜桃| 亚洲岛国电影| 婷婷色综合av| 熟女色专区| 日韩无码AV电影网站| 天天日夜夜拍| 天天做天天爱天天爽| 思思久久99热| 91欧美| 色高清无码视频| 性生生活大片又黄又| 婷婷成人五月天成人文学小说| 五月天婷婷丁香人人操91| 久久99精品九九久久久婷婷| 久久伊人大香蕉| 666555。COm毛片| 婷婷爱五月天人人爱| 久热69| 六月婷婷色综合| 日日夜夜噜噜爽爽| 人妻激情网| 色色色色五月| 九月丁香五月婷婷| 欧美色色色色色色色| 久久久GOGO无码啪啪艺术| 午夜色丁香| 五月色在线| 天堂美国久久| 激情久久五月天| 丁香久久五月天视频在线观看| 亚洲AV无码影院| 99在线视频播放| 甈你aaaaa| 97操碰碰无码视频| 乱乱av| 色色色婷婷五月| 亚洲人妻一区二区| 91九色在线视频| 亚洲深喉aV| 日韩欧美一级大黄网站| 五月丁香手机在线| 大香蕉太香蕉视频97| 丁香五月电影| 五月天,激情四射,婷婷频道| 五月婷在线观看| 9色小视频在线观看| 亚洲天天| 婷婷五月天综合在线| 激情五月图| 色欲影香| 韩国中文字幕91| 99色综合| 久久久天天啊| 五月www| 丁香婷婷五月六月久久| 色婷婷在线电影| 色偷偷五月天| 婷婷五月丁香综合激情| peg 2区三区四区的| 99人人操| 色综合99无码 | 五月色亚洲| 久久小说网| 色综合激情| 五月丁香黄色视频| 久久精品噜噜噜成人A∨色欲 | 99热这里| 97精品在线| 五月天婷婷丁香社区| 精品乱码视频| 国产综合婷婷| 久久精品人妻| 丁香五月av| 五月天社区狠狠| 99热99日…..| 久久九九玖玖| 欧美激情-区二区三区| 久久久亚洲精品一区二区三区浴池| 五月丁香啪啪网| 色五月婷婷啪啪五月| 99re这里只有精品视频6| 99热碰碰热| 黄色一级影片| 另类图片五月天激情|