日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 内核定时器实验————复习到这

發布時間:2023/12/10 linux 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 内核定时器实验————复习到这 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • Linux 時間管理和內核定時器簡介
    • 內核時間管理簡介
    • 內核定時器簡介
    • Linux 內核短延時函數
  • 硬件原理圖分析
  • 實驗程序編寫
    • 修改設備樹文件
    • 定時器驅動程序編寫
    • 編寫測試APP
  • 運行測試
    • 編譯驅動程序和測試APP
    • 運行測試

定時器是我們最常用到的功能,一般用來完成定時功能,本章我們就來學習一下Linux 內核提供的定時器API 函數,通過這些定時器API 函數我們可以完成很多要求定時的應用。Linux內核也提供了短延時函數,比如微秒、納秒、毫秒延時函數,本章我們就來學習一下這些和時間有關的功能。

Linux 時間管理和內核定時器簡介

內核時間管理簡介

學習過UCOS 或FreeRTOS 的同學應該知道,UCOS 或FreeRTOS 是需要一個硬件定時器提供系統時鐘,一般使用Systick 作為系統時鐘源。同理,Linux 要運行,也是需要一個系統時鐘的,至于這個系統時鐘是由哪個定時器提供的,筆者沒有去研究過Linux 內核,但是在Cortex-A7 內核中有個通用定時器,在《Cortex-A7 Technical ReferenceManua.pdf》的“9:Generic Timer”
章節有簡單的講解,關于這個通用定時器的詳細內容,可以參考《ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf》的“chapter B8 The Generic Timer”章節。這個通用定時器是可選的,按照筆者學習FreeRTOS 和STM32 的經驗,猜測Linux 會將這個通用定時器作為Linux 系統時鐘源(前提是SOC 得選配這個通用定時器)。具體是怎么做的筆者沒有深入研究過,這里僅僅是猜測!不過對于我們Linux 驅動編寫者來說,不需要深入研究這些具體的實現,只需要掌握相應的API 函數即可,除非你是內核編寫者或者內核愛好者。

Linux 內核中有大量的函數需要時間管理,比如周期性的調度程序、延時程序、對于我們驅動編寫者來說最常用的定時器。硬件定時器提供時鐘源,時鐘源的頻率可以設置,設置好以后就周期性的產生定時中斷,系統使用定時中斷來計時。中斷周期性產生的頻率就是系統頻率,也叫做節拍率(tick rate)(有的資料也叫系統頻率),比如1000Hz,100Hz 等等說的就是系統節拍
率。系統節拍率是可以設置的,單位是Hz,我們在編譯Linux 內核的時候可以通過圖形化界面設置系統節拍率,按照如下路徑打開配置界面:

-> Kernel Features-> Timer frequency (<choice> [=y])

選中“Timer frequency”,打開以后如圖50.1.1.1 所示:

從圖50.1.1.1 可以看出,可選的系統節拍率為100Hz、200Hz、250Hz、300Hz、500Hz 和1000Hz,默認情況下選擇100Hz。設置好以后打開Linux 內核源碼根目錄下的.config 文件,在此文件中有如圖50.1.1.2 所示定義:


圖50.1.1.2 中的CONFIG_HZ 為100,Linux 內核會使用CONFIG_HZ 來設置自己的系統時鐘。打開文件include/asm-generic/param.h,有如下內容:

6 # undef HZ 7 # define HZ CONFIG_HZ 8 # define USER_HZ 100 9 # define CLOCKS_PER_SEC (USER_HZ)

第7 行定義了一個宏HZ,宏HZ 就是CONFIG_HZ,因此HZ=100,我們后面編寫Linux驅動的時候會常常用到HZ,因為HZ 表示一秒的節拍數,也就是頻率。

大多數初學者看到系統節拍率默認為100Hz 的時候都會有疑問,怎么這么小?100Hz 是可選的節拍率里面最小的。為什么不選擇大一點的呢?這里就引出了一個問題:高節拍率和低節拍率的優缺點:
①、高節拍率會提高系統時間精度,如果采用100Hz 的節拍率,時間精度就是10ms,采用1000Hz 的話時間精度就是1ms,精度提高了10 倍。高精度時鐘的好處有很多,對于那些對時間要求嚴格的函數來說,能夠以更高的精度運行,時間測量也更加準確。
②、高節拍率會導致中斷的產生更加頻繁,頻繁的中斷會加劇系統的負擔,1000Hz 和100Hz的系統節拍率相比,系統要花費10 倍的“精力”去處理中斷。中斷服務函數占用處理器的時間增加,但是現在的處理器性能都很強大,所以采用1000Hz 的系統節拍率并不會增加太大的負載壓力。根據自己的實際情況,選擇合適的系統節拍率,本教程我們全部采用默認的100Hz 系統節拍率。

Linux 內核使用全局變量jiffies 來記錄系統從啟動以來的系統節拍數,系統啟動的時候會將jiffies 初始化為0,jiffies 定義在文件include/linux/jiffies.h 中,定義如下:

76 extern u64 __jiffy_data jiffies_64; 77 extern unsigned long volatile __jiffy_data jiffies;

第76 行,定義了一個64 位的jiffies_64。
第77 行,定義了一個unsigned long 類型的32 位的jiffies。jiffies_64 和jiffies 其實是同一個東西,jiffies_64 用于64 位系統,而jiffies 用于32 位系統。

為了兼容不同的硬件,jiffies 其實就是jiffies_64 的低32 位,jiffies_64 和jiffies 的結構如圖50.1.1.3 所示:

當我們訪問jiffies 的時候其實訪問的是jiffies_64 的低32 位,使用get_jiffies_64 這個函數可以獲取jiffies_64 的值。在32 位的系統上讀取jiffies 的值,在64 位的系統上jiffes 和jiffies_64表示同一個變量,因此也可以直接讀取jiffies 的值。所以不管是32 位的系統還是64 位系統,都可以使用jiffies。

前面說了HZ 表示每秒的節拍數,jiffies 表示系統運行的jiffies 節拍數,所以jiffies/HZ 就是系統運行時間,單位為秒。不管是32 位還是64 位的jiffies,都有溢出的風險,溢出以后會重新從0 開始計數,相當于繞回來了,因此有些資料也將這個現象也叫做繞回。假如HZ 為最大值1000 的時候,32 位的jiffies 只需要49.7 天就發生了繞回,對于64 位的jiffies 來說大概需要5.8 億年才能繞回,因此jiffies_64 的繞回忽略不計。處理32 位jiffies 的繞回顯得尤為重要,Linux 內核提供了如表50.1.1.1 所示的幾個API 函數來處理繞回。

如果unkown 超過known 的話,time_after 函數返回真,否則返回假。如果unkown 沒有超過known 的話time_before 函數返回真,否則返回假。time_after_eq 函數和time_after 函數類似,只是多了判斷等于這個條件。同理,time_before_eq 函數和time_before 函數也類似。比如我們要判斷某段代碼執行時間有沒有超時,此時就可以使用如下所示代碼:

1 unsigned long timeout; 2 timeout = jiffies + (2 * HZ); /* 超時的時間點*/ 3 4 /************************************* 5 具體的代碼 6 ************************************/ 7 8 /* 判斷有沒有超時*/ 9 if(time_before(jiffies, timeout)) { 10 /* 超時未發生*/ 11 } else { 12 /* 超時發生*/ 13 }

timeout 就是超時時間點,比如我們要判斷代碼執行時間是不是超過了2 秒,那么超時時間點就是jiffies+(2*HZ),如果jiffies 大于timeout 那就表示超時了,否則就是沒有超時。第4~6 行就是具體的代碼段。第9 行通過函數time_before 來判斷jiffies 是否小于timeout,如果小于的話就表示沒有超時。

為了方便開發,Linux 內核提供了幾個jiffies 和ms、us、ns 之間的轉換函數,如表50.1.1.2所示:

內核定時器簡介

定時器是一個很常用的功能,需要周期性處理的工作都要用到定時器。Linux 內核定時器采用系統時鐘來實現,并不是我們在裸機篇中講解的PIT 等硬件定時器。Linux 內核定時器使用很簡單,只需要提供超時時間(相當于定時值)和定時處理函數即可,當超時時間到了以后設置的定時處理函數就會執行,和我們使用硬件定時器的套路一樣,只是使用內核定時器不需要做一大堆的寄存器初始化工作。在使用內核定時器的時候要注意一點,內核定時器并不是周期性運行的,超時以后就會自動關閉,因此如果想要實現周期性定時,那么就需要在定時處理函數中重新開啟定時器。Linux 內核使用timer_list 結構體表示內核定時器,timer_list 定義在文件include/linux/timer.h 中,定義如下(省略掉條件編譯):

struct timer_list { struct list_head entry; unsigned long expires; /* 定時器超時時間,單位是節拍數*/ struct tvec_base *base; void (*function)(unsigned long); /* 定時處理函數*/ unsigned long data; /* 要傳遞給function函數的參數*/ int slack; };

要使用內核定時器首先要先定義一個timer_list 變量,表示定時器,tiemr_list 結構體的expires 成員變量表示超時時間,單位為節拍數。比如我們現在需要定義一個周期為2 秒的定時器,那么這個定時器的超時時間就是jiffies+(2HZ),因此expires=jiffies+(2HZ)。function 就是定時器超時以后的定時處理函數,我們要做的工作就放到這個函數里面,需要我們編寫這個定時處理函數。

定義好定時器以后還需要通過一系列的API 函數來初始化此定時器,這些函數如下:
1、init_timer 函數
init_timer 函數負責初始化timer_list 類型變量,當我們定義了一個timer_list 變量以后一定要先用init_timer 初始化一下。init_timer 函數原型如下:

void init_timer(struct timer_list *timer)

函數參數和返回值含義如下:
timer:要初始化定時器。
返回值:沒有返回值。

2、add_timer 函數
add_timer 函數用于向Linux 內核注冊定時器,使用add_timer 函數向內核注冊定時器以后,定時器就會開始運行,函數原型如下:

void add_timer(struct timer_list *timer)

函數參數和返回值含義如下:
timer:要注冊的定時器。
返回值:沒有返回值。
3、del_timer 函數
del_timer 函數用于刪除一個定時器,不管定時器有沒有被激活,都可以使用此函數刪除。
在多處理器系統上,定時器可能會在其他的處理器上運行,因此在調用del_timer 函數刪除定時器之前要先等待其他處理器的定時處理器函數退出。del_timer 函數原型如下:

int del_timer(struct timer_list * timer)

函數參數和返回值含義如下:
timer:要刪除的定時器。
返回值:0,定時器還沒被激活;1,定時器已經激活。
4、del_timer_sync 函數
del_timer_sync 函數是del_timer 函數的同步版,會等待其他處理器使用完定時器再刪除,del_timer_sync 不能使用在中斷上下文中。del_timer_sync 函數原型如下所示:

int del_timer_sync(struct timer_list *timer)

函數參數和返回值含義如下:
timer:要刪除的定時器。
返回值:0,定時器還沒被激活;1,定時器已經激活。
5、mod_timer 函數
mod_timer 函數用于修改定時值,如果定時器還沒有激活的話,mod_timer 函數會激活定時器!函數原型如下:

int mod_timer(struct timer_list *timer, unsigned long expires)

函數參數和返回值含義如下:
timer:要修改超時時間(定時值)的定時器。
expires:修改后的超時時間。
返回值:0,調用mod_timer 函數前定時器未被激活;1,調用mod_timer 函數前定時器已被激活。
關于內核定時器常用的API 函數就講這些,內核定時器一般的使用流程如下所示:

1 struct timer_list timer; /* 定義定時器*/ 2 3 /* 定時器回調函數*/ 4 void function(unsigned long arg) 5 { 6 /* 7 * 定時器處理代碼 8 */ 9 10 /* 如果需要定時器周期性運行的話就使用mod_timer 11 * 函數重新設置超時值并且啟動定時器。 12 */ 13 mod_timer(&dev->timertest, jiffies + msecs_to_jiffies(2000)); 14 } 15 16 /* 初始化函數*/ 17 void init(void) 18 { 19 init_timer(&timer); /* 初始化定時器*/ 20 21 timer.function = function; /* 設置定時處理函數*/ 22 timer.expires=jffies + msecs_to_jiffies(2000);/* 超時時間2秒*/ 23 timer.data = (unsigned long)&dev; /* 將設備結構體作為參數*/ 24 25 add_timer(&timer); /* 啟動定時器*/ 26 } 27 28 /* 退出函數*/ 29 void exit(void) 30 { 31 del_timer(&timer); /* 刪除定時器*/ 32 /* 或者使用*/ 33 del_timer_sync(&timer); 34 }

Linux 內核短延時函數

有時候我們需要在內核中實現短延時,尤其是在Linux 驅動中。Linux 內核提供了毫秒、微秒和納秒延時函數,這三個函數如表50.1.3.1 所示:

硬件原理圖分析

本章使用通過設置一個定時器來實現周期性的閃爍LED 燈,因此本章例程就使用到了一個LED 燈,關于LED 燈的硬件原理圖參考參考8.3 小節即可。

實驗程序編寫

本實驗對應的例程路徑為:開發板光盤-> 2、Linux 驅動例程-> 12_timer。
本章實驗我們使用內核定時器周期性的點亮和熄滅開發板上的LED 燈,LED 燈的閃爍周期由內核定時器來設置,測試應用程序可以控制內核定時器周期。

修改設備樹文件

本章實驗使用到了LED 燈,LED 燈的設備樹節點信息使用45.4.1 小節創建的即可。

定時器驅動程序編寫

新建名為“12_timer”的文件夾,然后在12_timer 文件夾里面創建vscode 工程,工作區命名為“timer”。工程創建好以后新建timer.c 文件,在timer.c 里面輸入如下內容:

#include <linux/types.h> #include <linux/kernel.h> #include <linux/delay.h> #include <linux/ide.h> #include <linux/init.h> #include <linux/module.h> #include <linux/errno.h> #include <linux/gpio.h> #include <linux/cdev.h> #include <linux/device.h> #include <linux/of.h> #include <linux/of_address.h> #include <linux/of_gpio.h> #include <linux/semaphore.h> #include <linux/timer.h> #include <asm/mach/map.h> #include <asm/uaccess.h> #include <asm/io.h> /*************************************************************** Copyright ? ALIENTEK Co., Ltd. 1998-2029. All rights reserved. 文件名 : timer.c 作者 : 左忠凱 版本 : V1.0 描述 : Linux內核定時器實驗 其他 : 無 論壇 : www.openedv.com 日志 : 初版V1.0 2019/7/24 左忠凱創建 ***************************************************************/ #define TIMER_CNT 1 /* 設備號個數 */ #define TIMER_NAME "timer" /* 名字 */ #define CLOSE_CMD (_IO(0XEF, 0x1)) /* 關閉定時器 */ #define OPEN_CMD (_IO(0XEF, 0x2)) /* 打開定時器 */ #define SETPERIOD_CMD (_IO(0XEF, 0x3)) /* 設置定時器周期命令 */ #define LEDON 1 /* 開燈 */ #define LEDOFF 0 /* 關燈 *//* timer設備結構體 */ struct timer_dev{dev_t devid; /* 設備號 */struct cdev cdev; /* cdev */struct class *class; /* 類 */struct device *device; /* 設備 */int major; /* 主設備號 */int minor; /* 次設備號 */struct device_node *nd; /* 設備節點 */int led_gpio; /* key所使用的GPIO編號 */int timeperiod; /* 定時周期,單位為ms */struct timer_list timer;/* 定義一個定時器*/spinlock_t lock; /* 定義自旋鎖 */ };struct timer_dev timerdev; /* timer設備 *//** @description : 初始化LED燈IO,open函數打開驅動的時候* 初始化LED燈所使用的GPIO引腳。* @param : 無* @return : 無*/ static int led_init(void) {int ret = 0;timerdev.nd = of_find_node_by_path("/gpioled");if (timerdev.nd== NULL) {return -EINVAL;}timerdev.led_gpio = of_get_named_gpio(timerdev.nd ,"led-gpio", 0);if (timerdev.led_gpio < 0) {printk("can't get led\r\n");return -EINVAL;}/* 初始化led所使用的IO */gpio_request(timerdev.led_gpio, "led"); /* 請求IO */ret = gpio_direction_output(timerdev.led_gpio, 1);if(ret < 0) {printk("can't set gpio!\r\n");}return 0; }/** @description : 打開設備* @param - inode : 傳遞給驅動的inode* @param - filp : 設備文件,file結構體有個叫做private_data的成員變量* 一般在open的時候將private_data指向設備結構體。* @return : 0 成功;其他 失敗*/ static int timer_open(struct inode *inode, struct file *filp) {int ret = 0;filp->private_data = &timerdev; /* 設置私有數據 */timerdev.timeperiod = 1000; /* 默認周期為1s */ret = led_init(); /* 初始化LED IO */if (ret < 0) {return ret;}return 0; }/** @description : ioctl函數,* @param - filp : 要打開的設備文件(文件描述符)* @param - cmd : 應用程序發送過來的命令* @param - arg : 參數* @return : 0 成功;其他 失敗*/ static long timer_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) {struct timer_dev *dev = (struct timer_dev *)filp->private_data;int timerperiod;unsigned long flags;switch (cmd) {case CLOSE_CMD: /* 關閉定時器 */del_timer_sync(&dev->timer);break;case OPEN_CMD: /* 打開定時器 */spin_lock_irqsave(&dev->lock, flags);timerperiod = dev->timeperiod;spin_unlock_irqrestore(&dev->lock, flags);mod_timer(&dev->timer, jiffies + msecs_to_jiffies(timerperiod));break;case SETPERIOD_CMD: /* 設置定時器周期 */spin_lock_irqsave(&dev->lock, flags);dev->timeperiod = arg;spin_unlock_irqrestore(&dev->lock, flags);mod_timer(&dev->timer, jiffies + msecs_to_jiffies(arg));break;default:break;}return 0; }/* 設備操作函數 */ static struct file_operations timer_fops = {.owner = THIS_MODULE,.open = timer_open,.unlocked_ioctl = timer_unlocked_ioctl, };/* 定時器回調函數 */ void timer_function(unsigned long arg) {struct timer_dev *dev = (struct timer_dev *)arg;static int sta = 1;int timerperiod;unsigned long flags;sta = !sta; /* 每次都取反,實現LED燈反轉 */gpio_set_value(dev->led_gpio, sta);/* 重啟定時器 */spin_lock_irqsave(&dev->lock, flags);timerperiod = dev->timeperiod;spin_unlock_irqrestore(&dev->lock, flags);mod_timer(&dev->timer, jiffies + msecs_to_jiffies(dev->timeperiod)); }/** @description : 驅動入口函數* @param : 無* @return : 無*/ static int __init timer_init(void) {/* 初始化自旋鎖 */spin_lock_init(&timerdev.lock);/* 注冊字符設備驅動 *//* 1、創建設備號 */if (timerdev.major) { /* 定義了設備號 */timerdev.devid = MKDEV(timerdev.major, 0);register_chrdev_region(timerdev.devid, TIMER_CNT, TIMER_NAME);} else { /* 沒有定義設備號 */alloc_chrdev_region(&timerdev.devid, 0, TIMER_CNT, TIMER_NAME); /* 申請設備號 */timerdev.major = MAJOR(timerdev.devid); /* 獲取分配號的主設備號 */timerdev.minor = MINOR(timerdev.devid); /* 獲取分配號的次設備號 */}/* 2、初始化cdev */timerdev.cdev.owner = THIS_MODULE;cdev_init(&timerdev.cdev, &timer_fops);/* 3、添加一個cdev */cdev_add(&timerdev.cdev, timerdev.devid, TIMER_CNT);/* 4、創建類 */timerdev.class = class_create(THIS_MODULE, TIMER_NAME);if (IS_ERR(timerdev.class)) {return PTR_ERR(timerdev.class);}/* 5、創建設備 */timerdev.device = device_create(timerdev.class, NULL, timerdev.devid, NULL, TIMER_NAME);if (IS_ERR(timerdev.device)) {return PTR_ERR(timerdev.device);}/* 6、初始化timer,設置定時器處理函數,還未設置周期,所有不會激活定時器 */init_timer(&timerdev.timer);timerdev.timer.function = timer_function;timerdev.timer.data = (unsigned long)&timerdev;return 0; }/** @description : 驅動出口函數* @param : 無* @return : 無*/ static void __exit timer_exit(void) {gpio_set_value(timerdev.led_gpio, 1); /* 卸載驅動的時候關閉LED */del_timer_sync(&timerdev.timer); /* 刪除timer */ #if 0del_timer(&timerdev.tiemr); #endif/* 注銷字符設備驅動 */cdev_del(&timerdev.cdev);/* 刪除cdev */unregister_chrdev_region(timerdev.devid, TIMER_CNT); /* 注銷設備號 */device_destroy(timerdev.class, timerdev.devid);class_destroy(timerdev.class); }module_init(timer_init); module_exit(timer_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("zuozhongkai");

第38~50 行,定時器設備結構體,在48 行定義了一個定時器成員變量timer。
第60~82 行,LED 燈初始化函數,從設備樹中獲取LED 燈信息,然后初始化相應的IO。
第91~102 行,函數timer_open,對應應用程序的open 函數,應用程序調用open 函數打開/dev/timer 驅動文件的時候此函數就會執行。此函數設置文件私有數據為timerdev,并且初始化定時周期默認為1 秒,最后調用led_init 函數初始化LED 所使用的IO。
第111~137 行,函數timer_unlocked_ioctl,對應應用程序的ioctl 函數,應用程序調用ioctl函數向驅動發送控制信息,此函數響應并執行。此函數有三個參數:filp,cmd 和arg,其中filp是對應的設備文件,cmd 是應用程序發送過來的命令信息,arg 是應用程序發送過來的參數,在本章例程中arg 參數表示定時周期。
一共有三種命令CLOSE_CMD,OPEN_CMD 和SETPERIOD_CMD,這三個命令分別為關閉定時器、打開定時器、設置定時周期。這三個命令的左右如下:
CLOSE_CMD:關閉定時器命令,調用del_timer_sync 函數關閉定時器。
OPEN_CMD:打開定時器命令,調用mod_timer 函數打開定時器,定時周期為timerdev 的timeperiod 成員變量,定時周期默認是1 秒。
SETPERIOD_CMD:設置定時器周期命令,參數arg 就是新的定時周期,設置timerdev 的timeperiod 成員變量為arg 所表示定時周期指。并且使用mod_timer 重新打開定時器,使定時器以新的周期運行。
第140~144 行,定時器驅動操作函數集timer_fops。
第147~162 行,函數timer_function,定時器服務函數,此函有一個參數arg,在本例程中arg 參數就是timerdev 的地址,這樣通過arg 參數就可以訪問到設備結構體。當定時周期到了以后此函數就會被調用。在此函數中將LED 燈的狀態取反,實現LED 燈閃爍的效果。因為內核定時器不是循環的定時器,執行一次以后就結束了,因此在161 行又調用了mod_timer 函數重
新開啟定時器。
第169~ 209 行,函數timer_init,驅動入口函數。在第205~207 行初始化定時器,設置定時器的定時處理函數為timer_function,另外設置要傳遞給timer_function 函數的參數為timerdev的地址。在此函數中并沒有調用timer_add 函數來開啟定時器,因此定時器默認是關閉的,除非應用程序發送打開命令。
第216~231 行,驅動出口函數,在219 行關閉LED,也就是卸載驅動以后LED 處于熄滅狀態。第220 行調用del_timer_sync 函數刪除定時器,也可以使用del_timer 函數。

編寫測試APP

測試APP 我們要實現的內容如下:
①、運行APP 以后提示我們輸入要測試的命令,輸入1 表示關閉定時器、輸入2 表示打開定時器,輸入3 設置定時器周期。
②、如果要設置定時器周期的話,需要讓用戶輸入要設置的周期值,單位為毫秒。
新建名為timerApp.c 的文件,然后輸入如下所示內容:

#include "stdio.h" #include "unistd.h" #include "sys/types.h" #include "sys/stat.h" #include "fcntl.h" #include "stdlib.h" #include "string.h" #include "linux/ioctl.h" /*************************************************************** Copyright ? ALIENTEK Co., Ltd. 1998-2029. All rights reserved. 文件名 : timerApp.c 作者 : 左忠凱 版本 : V1.0 描述 : 定時器測試應用程序 其他 : 無 使用方法 :./timertest /dev/timer 打開測試App 論壇 : www.openedv.com 日志 : 初版V1.0 2019/7/24 左忠凱創建 ***************************************************************//* 命令值 */ #define CLOSE_CMD (_IO(0XEF, 0x1)) /* 關閉定時器 */ #define OPEN_CMD (_IO(0XEF, 0x2)) /* 打開定時器 */ #define SETPERIOD_CMD (_IO(0XEF, 0x3)) /* 設置定時器周期命令 *//** @description : main主程序* @param - argc : argv數組元素個數* @param - argv : 具體參數* @return : 0 成功;其他 失敗*/ int main(int argc, char *argv[]) {int fd, ret;char *filename;unsigned int cmd;unsigned int arg;unsigned char str[100];if (argc != 2) {printf("Error Usage!\r\n");return -1;}filename = argv[1];fd = open(filename, O_RDWR);if (fd < 0) {printf("Can't open file %s\r\n", filename);return -1;}while (1) {printf("Input CMD:");ret = scanf("%d", &cmd);if (ret != 1) { /* 參數輸入錯誤 */gets(str); /* 防止卡死 */}if(cmd == 1) /* 關閉LED燈 */cmd = CLOSE_CMD;else if(cmd == 2) /* 打開LED燈 */cmd = OPEN_CMD;else if(cmd == 3) {cmd = SETPERIOD_CMD; /* 設置周期值 */printf("Input Timer Period:");ret = scanf("%d", &arg);if (ret != 1) { /* 參數輸入錯誤 */gets(str); /* 防止卡死 */}}ioctl(fd, cmd, arg); /* 控制定時器的打開和關閉 */ }close(fd); }

第22~24 行,命令值。
第53~73 行,while(1)循環,讓用戶輸入要測試的命令,然后通過第72 行的ioctl 函數發送給驅動程序。如果是設置定時器周期命令SETPERIOD_CMD,那么ioctl 函數的arg 參數就是用戶輸入的周期值。

運行測試

編譯驅動程序和測試APP

1、編譯驅動程序
編寫Makefile 文件,本章實驗的Makefile 文件和第四十章實驗基本一樣,只是將obj-m 變量的值改為timer.o,Makefile 內容如下所示:

KERNELDIR := /home/zuozhongkai/linux/IMX6ULL/linux/temp/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek CURRENT_PATH := $(shell pwd)obj-m := timer.obuild: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modulesclean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

第4 行,設置obj-m 變量的值為timer.o。
輸入如下命令編譯出驅動模塊文件:

make -j32

編譯成功以后就會生成一個名為“timer.ko”的驅動模塊文件。

2、編譯測試APP
輸入如下命令編譯測試timerApp.c 這個測試程序:

arm-linux-gnueabihf-gcc timerApp.c -o timerApp

編譯成功以后就會生成timerApp 這個應用程序。

運行測試

將上一小節編譯出來的timer.ko 和timerApp 這兩個文件拷貝到rootfs/lib/modules/4.1.15 目錄中,重啟開發板,進入到目錄lib/modules/4.1.15 中,輸入如下命令加載timer.ko 驅動模塊:

depmod //第一次加載驅動的時候需要運行此命令 modprobe timer.ko //加載驅動

驅動加載成功以后如下命令來測試:

./timerApp /dev/timer

輸入上述命令以后終端提示輸入命令,如圖50.4.2.1 所示:

輸入“2”,打開定時器,此時LED 燈就會以默認的1 秒周期開始閃爍。在輸入“3”來設置定時周期,根據提示輸入要設置的周期值,如圖50.4.2.2 所示:

輸入“500”,表示設置定時器周期值為500ms,設置好以后LED 燈就會以500ms 為間隔,開始閃爍。最后可以通過輸入“1”來關閉定時器,如果要卸載驅動的話輸入如下命令即可:

rmmod timer.ko 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Linux 内核定时器实验————复习到这的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品99久久久 | 夜夜躁日日躁狠狠躁 | 久久99国产精品免费 | 99久久久久国产精品免费 | 黄色av播放 | 一区免费视频 | 久久在线免费观看 | 精品99视频 | 2019免费中文字幕 | 色播六月天 | 最近中文字幕在线播放 | 成人午夜电影免费在线观看 | 久久久久久美女 | 91成人看片| www色,com | 精品成人a区在线观看 | 国产特级毛片aaaaaaa高清 | 日韩免费在线 | 欧美日韩午夜在线 | 日本成人免费在线观看 | 日韩激情片在线观看 | 国产成人精品综合 | 国产精品久久久久av | 亚洲国产精品成人精品 | 91麻豆网| 国产97免费 | 在线国产视频观看 | 亚洲a网 | 久久久精品久久日韩一区综合 | 91x色| 日韩欧美高清免费 | 国产男女免费完整视频 | 五月婷婷一区二区三区 | 色国产精品一区在线观看 | 国产一区二区在线免费播放 | 国产色资源 | 日韩精品在线一区 | 国产精品久久久久久久久搜平片 | 伊人色播 | 一区二区三区在线影院 | 成年人在线 | 国产在线观看av | 国产精品自产拍在线观看中文 | 国产高清永久免费 | 国内精品久久久久影院日本资源 | 久久久999精品视频 国产美女免费观看 | 久久久精品影视 | 在线91观看 | 欧美日韩高清一区 | 久久久久成人精品免费播放动漫 | 狠狠操天天操 | 国产精品3区| 91传媒在线看 | 中文字幕视频免费观看 | 国产中文字幕在线看 | 69精品视频在线观看 | 国产黄色在线观看 | 在线免费观看av网站 | 香蕉久草在线 | 香蕉在线观看 | 日韩精品高清不卡 | 免费av电影网站 | 免费观看www视频 | 久久免费久久 | 国产精品自产拍 | 夜夜看av| 99久久久久成人国产免费 | 友田真希av| 天天超碰 | 欧美一级片免费观看 | 久久成人综合视频 | 亚洲在线观看av | 蜜臀久久99精品久久久酒店新书 | 国产精品久久久久久久久久东京 | 国内成人精品2018免费看 | 黄色国产高清 | 欧洲性视频 | 免费看污网站 | 青春草视频在线播放 | 亚洲精品国产电影 | 国产在线美女 | 午夜精品视频在线 | 中文字幕免费 | 色视频网址 | 国产成人一区二区三区久久精品 | 热re99久久精品国产66热 | 欧美日韩在线视频观看 | 国产日韩精品一区二区在线观看播放 | 国产精品毛片久久久 | 99九九99九九九视频精品 | 亚洲成av人片一区二区梦乃 | 成 人 黄 色 视频 免费观看 | 在线免费观看av网站 | 中文字幕亚洲精品日韩 | 久久99国产精品久久99 | 人人澡人人爽欧一区 | 国产免费av一区二区三区 | 国产免费国产 | 久久综合免费视频 | 久久久久麻豆v国产 | 免费在线国产 | 91精品视频免费看 | 精品国产自| av免费看av| 日韩乱码中文字幕 | 91精品蜜桃| 91亚洲在线观看 | 成年人在线观看网站 | 成人在线观看网址 | 欧美久草网 | 天堂中文在线播放 | 日韩欧美久久 | 久久高清毛片 | 中文字幕亚洲国产 | 久久综合久久综合九色 | 黄色av电影在线观看 | 久久99精品国产一区二区三区 | 波多野结衣理论片 | 91精品视屏 | 99久久夜色精品国产亚洲 | av免费观看网址 | av中文天堂在线 | 亚洲精品国产第一综合99久久 | 久久系列| 日韩一区二区三免费高清在线观看 | 九色视频网址 | 999国内精品永久免费视频 | 国产福利精品一区二区 | 午夜精品av在线 | 久久免费电影网 | 黄色视屏在线免费观看 | 国产福利免费在线观看 | 99精品久久只有精品 | 久久免费视频观看 | 日日躁天天躁 | 亚洲女在线 | 处女av在线 | 国产99久久99热这里精品5 | 17videosex性欧美 | 日韩最新在线 | www激情网 | 精品久久久久国产免费第一页 | 国产在线探花 | 成人久久18免费网站 | 日本午夜免费福利视频 | 成人h在线 | av在线观 | 中文字幕视频免费观看 | 毛片一区二区 | 国产精品一区二区久久精品爱微奶 | 日日操天天射 | www.五月天激情 | 国产夫妻性生活自拍 | 久久电影日韩 | 国产亚州av | 国产在线专区 | 色婷婷激婷婷情综天天 | 久久激情视频 久久 | 色综合在| 大型av综合网站 | 日本黄色大片免费看 | 日韩在线小视频 | 99热这里只有精品国产首页 | 国产97av| 激情www| 亚洲理论在线观看电影 | 91看片在线免费观看 | 日本三级久久 | 久草a在线| 91精品久久久久久综合乱菊 | 五月综合久久 | www.黄色片网站 | 在线免费亚洲 | 在线观看国产区 | 久久九九精品久久 | 色资源二区在线视频 | 精品久久久久国产 | 国产一卡二卡四卡国 | 久99久精品| 又色又爽又黄 | 日本精品xxxx | 美腿丝袜一区二区三区 | 麻豆精品国产传媒 | 国产一区二区电影在线观看 | 国产va饥渴难耐女保洁员在线观看 | 日本一区二区不卡高清 | 中文字幕在线专区 | 最近中文字幕国语免费高清6 | 日韩av高清在线观看 | 激情文学综合丁香 | 婷婷在线视频观看 | 免费视频网| 久久国产精品免费 | 午夜精品一区二区国产 | 成人在线播放免费观看 | 三级黄色大片在线观看 | 91视频3p | 操操操人人人 | 久久精品福利视频 | 国产自在线 | 日日摸日日爽 | 成人av网站在线播放 | 国内精品在线一区 | 久久婷婷色综合 | 亚洲一级久久 | 大胆欧美gogo免费视频一二区 | 中国精品一区二区 | 五月婷婷视频在线观看 | 在线免费观看一区二区三区 | 日韩三级精品 | 成人av影视在线 | 中文字幕在线播出 | 国产精品theporn | 四虎在线永久免费观看 | 国产色视频网站2 | 成人在线视频网 | aaa日本高清在线播放免费观看 | 五月婷亚洲 | 在线免费观看国产 | 特级毛片网站 | 亚洲一片黄 | 免费在线一区二区三区 | 玖玖视频精品 | 欧美另类xxx | 成人av片免费观看app下载 | 亚洲伦理一区 | 日韩网站在线观看 | 黄色a大片| 久久久久久免费网 | 97色噜噜| se视频网址 | 中文字幕亚洲精品在线观看 | 综合久久精品 | 成人一区影院 | 青青草国产精品视频 | 三日本三级少妇三级99 | 特级西西www44高清大胆图片 | 91在线视频网址 | 亚洲国产黄色片 | 欧美日韩精品免费观看视频 | www国产亚洲| 91精品国产自产在线观看 | 波多野结衣电影一区二区 | 在线观看成人 | 国产亚洲视频在线 | 免费观看黄色12片一级视频 | 亚洲日本va在线观看 | 国产精品正在播放 | 久久99国产综合精品 | 国产精品99久久久精品免费观看 | 久久一久久 | 久久艹艹 | 亚洲影院一区 | 精品视频免费播放 | 免费在线看成人av | 最新日本中文字幕 | 99久热在线精品 | 国产亚洲欧美精品久久久久久 | 免费网站看v片在线a | 99久久夜色精品国产亚洲 | 婷婷av电影 | 99久久久久国产精品免费 | 人人视频网站 | 亚州国产精品视频 | 国产精品成人一区 | 成人免费在线播放 | 久久久久久国产一区二区三区 | 亚州精品天堂中文字幕 | 999成人国产| 日本公妇在线观看高清 | 婷婷色网 | 亚洲另类xxxx | 日韩高清激情 | 91人人干 | 色资源在线 | 999久久国精品免费观看网站 | 亚洲精品美女 | 中文字幕在线播放视频 | 在线观看av的网站 | 一区三区视频 | 国产一二三四在线视频 | 99r在线播放 | 久久视精品 | 97视频在线看 | 亚洲精品中文在线观看 | 日韩字幕 | 97国产在线播放 | 99精品系列| 久久99在线视频 | 97av在线视频 | 欧美性大战 | 在线观看mv的中文字幕网站 | 黄色毛片一级片 | 欧美一区二区三区在线看 | 精品国产一区二区久久 | 久久国产色 | aaa日本高清在线播放免费观看 | 青青草在久久免费久久免费 | 婷婷色综合色 | 欧美激情视频三区 | 一级黄色在线免费观看 | 五月天色中色 | 91亚洲网| 尤物一区二区三区 | 91成人欧美 | 国产福利免费在线观看 | 国产精品一区二区果冻传媒 | 中文字幕有码在线播放 | 91成人免费视频 | 欧美激情精品久久久久久变态 | 欧美最猛性xxx | 天天爱天天干天天爽 | 操处女逼 | 日韩精品影视 | 天天曰天天干 | 亚洲每日更新 | 午夜骚影 | 国产精品免费在线视频 | 99在线精品视频观看 | 欧美精品国产综合久久 | 日韩在线观看中文 | 亚洲精品久久久蜜桃直播 | 亚洲免费精彩视频 | 一区二区三区四区精品视频 | 麻豆影视在线播放 | 正在播放国产一区二区 | 国产精品a成v人在线播放 | 最近中文字幕完整视频高清1 | 69av网| 国产精品久久久久久久久久不蜜月 | 天天操天天干天天爽 | 久久久色 | 人人爱人人爽 | 久久久色 | 成人午夜精品福利免费 | 国产a级精品 | 在线视频福利 | 国产午夜麻豆影院在线观看 | 色综合激情网 | 欧美淫aaa免费观看 日韩激情免费视频 | 91精品视频在线播放 | 91精品国产三级a在线观看 | 91亚洲精品久久久蜜桃借种 | 欧美大片第1页 | 免费看一级特黄a大片 | 日本精品一二区 | 欧美做受高潮电影o | 日韩在线免费视频 | 一区二区三区在线看 | 国产视频精品久久 | av在线免费播放网站 | 在线只有精品 | 国产精品久久久久9999 | 中文字幕久久精品一区 | 500部大龄熟乱视频 欧美日本三级 | 福利视频在线看 | www.大网伊人 | 在线观看一区二区视频 | 久久综合一本 | 粉嫩av一区二区三区四区在线观看 | 亚洲色图av | 精品免费视频123区 午夜久久成人 | av播放在线 | 中文字幕最新精品 | 亚洲无人区小视频 | 国产手机视频 | 国产露脸91国语对白 | 欧美大片在线看免费观看 | 国产精彩在线视频 | 免费三级a | 欧美另类一二三四区 | 日韩国产在线观看 | 国产免费观看久久 | 麻豆久久久久 | 日韩欧美电影网 | 黄色免费在线看 | 激情视频区 | 久久伦理影院 | 国产精品久久久亚洲 | 日韩毛片久久久 | www日日夜夜 | 日韩在线一区二区免费 | 日日夜夜91 | 91一区在线观看 | 在线导航福利 | 波多野结衣视频一区 | 最近中文字幕第一页 | 亚洲精品免费看 | 国产黄a三级三级三级三级三级 | 九九热免费视频在线观看 | 69xxxx欧美 | 麻豆91精品| 最近能播放的中文字幕 | 中文字幕 国产视频 | 日本三级香港三级人妇99 | 久久夜视频 | 91高清在线 | 免费高清在线观看电视网站 | 在线视频 你懂得 | 久久久久久久久久久影院 | 亚洲免费成人 | www五月| 五月婷在线播放 | 国产精品一区电影 | 九七视频在线 | 国产精品av在线 | 久久伊人操 | 国产精品成人一区二区 | 日韩亚洲欧美中文字幕 | 日韩av看片 | 青草视频在线免费 | 久草视频在线新免费 | 91最新地址永久入口 | 久久香蕉国产 | 视频一区二区在线 | 成人资源在线播放 | 国产精品久久 | 亚洲精品一区中文字幕乱码 | 2018精品视频 | 欧美一级黄色片 | 欧美日韩在线观看视频 | 亚洲视屏 | 免费av电影网站 | 中文区中文字幕免费看 | 亚洲第一中文网 | 99在线观看视频网站 | 国产高清中文字幕 | 精品国产乱码久久久久久1区二区 | 视频成人永久免费视频 | 欧美另类v | 欧美在线观看视频一区二区 | 色七七亚洲影院 | 92精品国产成人观看免费 | 青青看片 | 国产精品成人自拍 | 国产破处在线视频 | 午夜精品福利一区二区三区蜜桃 | 亚洲精品看片 | 免费观看9x视频网站在线观看 | 2019中文字幕第一页 | 激情综合网五月 | 国产手机视频在线播放 | 国产专区一| 蜜臀av在线一区二区三区 | 99热在线网站 | 免费看片色 | 懂色av一区二区在线播放 | 最近2019中文免费高清视频观看www99 | 国产在线一卡 | 久久精品亚洲精品国产欧美 | 一区二区三区四区免费视频 | 亚洲精品在 | 国产成人精品一区二区在线 | 国产精品白浆 | 亚洲日韩欧美一区二区在线 | 国产午夜视频在线观看 | 国产九色在线播放九色 | 国产一区二区手机在线观看 | 国产亚洲综合性久久久影院 | 综合网成人| 91免费国产在线观看 | 亚洲永久精品国产 | 精品一区二区三区香蕉蜜桃 | 国产精品精品 | 国产综合在线视频 | 精品国产一区二区久久 | 欧美另类v | 麻豆91视频 | 一区中文字幕在线观看 | 天天躁日日躁狠狠躁av麻豆 | 福利视频一二区 | 国产在线观看国语版免费 | 国产色综合天天综合网 | 黄色在线网站噜噜噜 | 国产原创在线 | 中文字幕三区 | 久草在线高清视频 | www.香蕉 | 精品国产一区二区三区久久久蜜月 | 精品久久久久一区二区国产 | 国产精品原创视频 | 涩涩成人在线 | 日本在线中文 | av网址在线播放 | 国产精品99久久久久久人免费 | 日韩有码第一页 | 精品国产伦一区二区三区 | 亚洲另类视频在线观看 | 黄色1级毛片 | 日韩高清在线一区 | 精品国产一区二区三区日日嗨 | 国产精品电影在线 | 国产黄 | 一区二区三区免费在线观看视频 | 日韩中文久久 | 国产高清区 | 久久精品牌麻豆国产大山 | 欧美九九九 | 国产视频在线观看一区二区 | 午夜91在线 | 国产高清视频 | 国产黄色高清 | 精品成人免费 | 久久国语露脸国产精品电影 | 97超碰资源网 | 天天干,天天射,天天操,天天摸 | 国产最新视频在线观看 | 成人资源在线播放 | 99久久精品国产亚洲 | 国产精品99久久久久人中文网介绍 | 人人舔人人爽 | 伊人五月天婷婷 | 中文欧美字幕免费 | 久久久福利 | 日本久久综合网 | 国产伦精品一区二区三区在线 | 日韩欧美国产成人 | 96国产在线 | 西西444www大胆无视频 | 欧美日韩在线看 | 人人射人人爽 | 一区二区三区视频在线 | 久精品在线 | 91丨九色丨蝌蚪丰满 | 天天射天天操天天 | 99视频精品免费观看, | 久久久精华网 | 国产拍揄自揄精品视频麻豆 | 亚洲成人免费 | 黄色av电影在线观看 | 日本久久综合网 | 久久精品99国产精品日本 | 在线久草视频 | 91福利在线导航 | 欧美一级片免费在线观看 | 国产福利小视频在线 | 最新免费av在线 | 天天爽天天搞 | 99久久这里只有精品 | 懂色av一区二区在线播放 | 免费情缘 | 久久成人综合视频 | 欧美一级裸体视频 | 免费观看mv大片高清 | 国产黄免费在线观看 | 黄色的视频 | 日日夜夜爱 | 欧美精品一区在线 | 色综合五月 | 亚洲区另类春色综合小说校园片 | 色婷婷久久久 | 成人免费在线视频观看 | 狠狠干激情 | 国产成人一级 | 狠狠狠色丁香婷婷综合激情 | 成人av在线直播 | 免费91麻豆精品国产自产在线观看 | 亚洲精品黄色在线观看 | 又黄又刺激 | 精品久久久免费视频 | 日本久久成人 | 国产视频一区二区在线 | 国产一级一片免费播放放 | 91亚洲精品久久久久图片蜜桃 | 97成人在线观看视频 | 国产黄色在线看 | 国产亚洲精品av | 亚洲国产精品999 | 又黄又刺激视频 | 中文视频在线播放 | 精品久久久久久国产偷窥 | 日韩电影在线看 | 日韩精品一区二区三区中文字幕 | 成年人在线看视频 | 亚洲最新合集 | 香蕉在线视频播放网站 | 成人中心免费视频 | 久久综合狠狠综合久久激情 | 亚洲国产剧情 | 国产免费成人av | 五月婷婷六月丁香 | 久久免费国产精品 | 国产原厂视频在线观看 | 97超碰中文字幕 | av在线免费在线观看 | 天天插日日操 | 国产精品一区二区在线免费观看 | 91久久久久久久 | 夜夜操天天操 | 亚洲综合日韩在线 | 亚洲激精日韩激精欧美精品 | 超碰97在线资源站 | 成人中文字幕在线 | av色影院| av网址最新 | 91成人免费| 91污污| 国产一级在线看 | 日韩视频一区二区在线观看 | 91色偷偷 | 91麻豆网 | 色综合久久久久久久久五月 | 天天爱综合 | 国产精品欧美在线 | 在线观看成人毛片 | 日韩av一区在线观看 | 亚洲精品在线观看av | 日韩在线三级 | 久久久久99精品国产片 | 日韩欧美视频一区二区三区 | 中文字幕资源网 国产 | 91高清视频在线 | 天天摸天天操天天爽 | 玖玖玖在线| 正在播放一区 | 天堂在线一区二区 | av片在线观看免费 | 天堂av在线免费观看 | 国产不卡一二三区 | 国产精品一区二区三区在线看 | 欧美影院久久 | 中文字幕有码在线播放 | 久久久久久片 | 国产一级电影在线 | 91av电影在线 | 国产97碰免费视频 | 韩国三级在线一区 | 国产亚洲免费的视频看 | av电影亚洲 | 九九久久免费 | 高潮久久久久久久久 | 中文字幕欧美日韩va免费视频 | 视频一区在线播放 | 欧美日韩国产一区二区三区 | 国产精品高清一区二区三区 | 欧美动漫一区二区三区 | 成人理论在线观看 | 天天操夜夜逼 | 成人欧美一区二区三区在线观看 | 高清不卡毛片 | 成人宗合网 | 在线亚洲欧美日韩 | 综合国产视频 | 高潮久久久久久 | 97在线观看免费观看 | 精品国产伦一区二区三区观看说明 | 激情小说 五月 | 日本3级在线观看 | 在线免费试看 | 黄色网中文字幕 | 在线观看中文字幕一区二区 | 麻豆播放| 国内精品久久久久久久久久清纯 | 久久久免费观看 | av免费在线网站 | 色姑娘综合 | 国产精品嫩草在线 | 最近中文字幕完整高清 | 国产一级免费观看 | 天天操狠狠操网站 | 欧美另类高清 | 成人av资源 | 一级一级一片免费 | 久久久久亚洲精品成人网小说 | 黄色小说在线免费观看 | 麻豆网站免费观看 | av亚洲产国偷v产偷v自拍小说 | 亚洲欧美国产精品va在线观看 | 日日摸日日添日日躁av | www久久久| 国产999精品久久久影片官网 | 国产在线视频导航 | 丁香婷婷电影 | 国产一区在线观看视频 | 国产精品午夜在线观看 | 香蕉视频在线免费 | 色播五月激情五月 | 黄av免费在线观看 | av解说在线 | 91最新在线 | 久久综合久久综合久久综合 | 国内一级片在线观看 | 久久网站最新地址 | 在线看一级片 | 在线观看成人毛片 | 久草在线免费资源站 | 国产视频 亚洲精品 | 91精品久久久久久久久久入口 | 色欲综合视频天天天 | 区一区二在线 | 不卡中文字幕在线 | 视频国产在线观看18 | 久久超级碰 | 色无五月 | 超碰com| 国产黄免费在线观看 | 国产护士hd高朝护士1 | 午夜av免费观看 | 日本黄色免费观看 | 手机色站 | 日日操日日 | www好男人| 久久涩涩网站 | 国内丰满少妇猛烈精品播 | 免费国产视频 | 国产在线资源 | 97成人精品视频在线观看 | 国产一二区视频 | 国产在线播放一区 | 黄色一级影院 | 国产福利一区二区在线 | 亚洲精品白浆高清久久久久久 | 高清视频一区二区三区 | 五月丁色| 最近日本字幕mv免费观看在线 | 最近中文国产在线视频 | 亚洲国产三级在线观看 | 中文区中文字幕免费看 | 亚洲一级片免费观看 | 九九色网| 国产精品免费视频一区二区 | 91免费视频国产 | 97成人精品区在线播放 | 亚洲国产精品小视频 | 九九视频一区 | 97超碰人人模人人人爽人人爱 | 五月天六月婷婷 | 亚洲每日更新 | 人人超碰在线 | 久久亚洲欧美日韩精品专区 | 亚洲日本精品视频 | 中文字幕日韩国产 | 在线视频日韩欧美 | 亚洲成熟女人毛片在线 | 99久久精品国产一区二区成人 | 黄色小说在线免费观看 | 国产视频在线观看免费 | 国产做aⅴ在线视频播放 | 久久久久成人精品 | 五月婷婷在线视频观看 | 亚洲 欧洲 国产 日本 综合 | av免费电影网站 | 91在线麻豆| 国产在线观看午夜 | 亚洲六月丁香色婷婷综合久久 | 久久精品波多野结衣 | 久草在线精品观看 | 91成年人视频 | 五月天亚洲综合小说网 | 国产激情电影综合在线看 | 天天干天天操天天入 | 久久免费国产视频 | 人人爽人人插 | 免费久久视频 | 国产精品18p | 欧美不卡视频在线 | 精品久久国产一区 | 久久99国产一区二区三区 | 日韩精品免费在线视频 | 国产在线观看中文字幕 | 日韩高清一区在线 | 日本最大色倩网站www | 伊人色综合久久天天网 | 久久99精品视频 | 九九热1 | 亚欧洲精品视频在线观看 | 一区二区不卡在线观看 | 国产精品永久在线 | 亚洲美女精品视频 | 蜜桃视频精品 | 黄毛片在线观看 | www.久久成人 | 日韩av资源站 | 国产日韩欧美在线播放 | 久久久国产毛片 | 午夜精品视频一区二区三区在线看 | 在线a视频免费观看 | 欧美日韩国产色综合一二三四 | 99精品欧美一区二区三区 | 成人四虎影院 | 亚洲网站在线看 | 热久久视久久精品18亚洲精品 | 欧美乱码精品一区 | 波多野结衣一区 | 国产高清在线 | 97福利视频 | 超碰在线97观看 | 97超碰人人澡人人 | 超碰官网 | 久久久男人的天堂 | 国产不卡免费 | 亚洲精品动漫成人3d无尽在线 | 日韩精品中文字幕有码 | 美女视频又黄又免费 | 美腿丝袜一区二区三区 | 精品夜夜嗨av一区二区三区 | 日本中文字幕电影在线免费观看 | 草久草久 | 六月激情丁香 | 日韩一区二区免费在线观看 | 国产伦理久久精品久久久久_ | 久久久久久久久电影 | 91精品免费在线观看 | 免费在线观看成人av | 一区二区三区在线观看免费 | 国产一及片 | 久久国产高清视频 | 国产精品美女久久久久久免费 | 99麻豆久久久国产精品免费 | 四虎欧美| 亚洲国产三级 | 国产精品久久久久久影院 | 国产在线 一区二区三区 | 久免费 | 又黄又爽的视频在线观看网站 | 国产黄在线 | 最近最新中文字幕视频 | 欧美日韩免费视频 | 久久久亚洲影院 | 久久综合九色 | 人人澡人人添人人爽一区二区 | av高清一区二区三区 | 超碰97久久 | 狠狠干天天操 | 成年人黄色免费看 | 在线观看资源 | 在线视频 日韩 | 在线观看91精品国产网站 | 91看片成人 | 午夜18视频在线观看 | 免费在线观看不卡av | 久久欧美在线电影 | 97成人在线 | 久久免费视频国产 | 亚洲一区 影院 | 国精产品一二三线999 | 国产精品一区二区三区在线看 | 免费av试看 | 国产精品视频观看 | 人人爽爽人人 | 国产xxxx| 成人a免费 | 婷婷色吧| 国产精品免费高清 | 久久人操 | 综合国产在线观看 | 亚洲国产精品电影 | 99九九99九九九视频精品 | 国产精品11 | 麻豆精品在线 | 国产在线永久 | 久久免费看毛片 | 日韩免费高清 | 国产精品女同一区二区三区久久夜 | 国产成人av一区二区三区在线观看 | 99国产精品一区 | av在线亚洲天堂 | av成人免费 | 欧美一级片在线免费观看 | 三级在线视频观看 | 久久国产精彩视频 | 国产精品免费视频网站 | 欧美激情视频一二三区 | 日韩欧美高清一区二区三区 | 日韩高清免费在线 | 国产精品大片 | 久久人人爽人人人人片 | 国产一区久久 | 中国一级特黄毛片大片久久 | 亚洲精品字幕在线观看 | 日韩亚洲欧美中文字幕 | 91精品国产一区二区在线观看 | 一级一片免费观看 | 国内成人av | 午夜av在线播放 | 亚洲永久av | 免费黄色在线 | 国产精品久久久久久麻豆一区 | 欧美日韩亚洲在线观看 | 国产乱对白刺激视频不卡 | 91精品国产99久久久久久久 | 亚洲jizzjizz日本少妇 | 中文字幕亚洲五码 | 久久久久久网站 | 久久视频国产 | 九色福利视频 | 999视频网站| 国产精品日韩在线播放 | 九九99靖品| 在线观看黄色大片 | 色偷偷888欧美精品久久久 | 日韩在线无 | 91一区在线观看 | 日韩 国产 | 91视视频在线直接观看在线看网页在线看 | 成人影视免费看 | 欧美日韩国产在线精品 | 国产一级性生活视频 | 二区三区中文字幕 | 久热色超碰 | 中文字幕乱在线伦视频中文字幕乱码在线 | 在线视频婷婷 | 久久神马影院 | 国产精品久久亚洲 | 久久嗨 | 欧美精品在线观看免费 | 成人少妇影院yyyy | www.日日操.com| 午夜狠狠干 | 91丨九色丨国产丨porny精品 | 中文字幕丝袜制服 | 激情导航 | 亚洲精品视频免费在线观看 | 国产一级免费视频 | 天天综合色网 | 1000部18岁以下禁看视频 | 天无日天天操天天干 | 国产999精品久久久久久绿帽 | 国产色婷婷在线 | 婷五月激情 | 正在播放国产一区二区 | 久久99亚洲精品 | 欧美国产精品久久久久久免费 | 久久久久久久久久久精 | 激情图片qvod | 高清国产一区 | 欧美日韩不卡在线 | 91精品国产乱码在线观看 | 精品国产91亚洲一区二区三区www | 日韩欧美黄色网址 | 91九色porn在线资源 | 久草在线最新视频 | 久久伊人色综合 | 国产一区二区精品91 | 国产人成在线视频 | 欧美三级高清 | 国产亚洲一区二区在线观看 | 国产白浆视频 | 夜夜爽夜夜操 | 国产一级特黄毛片在线毛片 | 伊人超碰在线 | 六月丁香在线视频 | 在线观看成人毛片 | 草草草影院 | 久久久久久久久久久久久国产精品 | 国产老妇av| 深爱激情五月婷婷 | 热久久免费视频精品 | 国产精品成人av久久 | 中文字幕频道 | 国产黄在线观看 | 韩国av电影在线观看 | 久久理论片 | 精品免费视频123区 午夜久久成人 | av在线专区 | 亚洲蜜桃在线 | 国产福利91精品 | 国产美女无遮挡永久免费 | 在线观看亚洲国产精品 | 视频91在线 | 99久久精品免费看国产四区 | 日本中文乱码卡一卡二新区 | 久久久久久久久久久成人 | 91九色国产视频 | 国产精品久久久久久模特 | 久久免费福利 | 久久成人高清视频 | 射射射av | 91插插插网站 | 成年人视频免费在线 | 亚洲爱av | 国产日韩av在线 | 免费观看一级一片 | 99这里都是精品 | 青草视频在线看 | 最近日本mv字幕免费观看 | 美女免费黄视频网站 | 久久久久9999亚洲精品 | 国产精品av久久久久久无 | 日韩在线三级 | www.亚洲视频 | 午夜三级影院 | 五月激情综合婷婷 | av黄色在线播放 | 在线欧美日韩 | 天天干一干 | 精品久久久久久久久久岛国gif | 中文字幕在线播出 | 日韩午夜大片 | 久草电影免费在线观看 | 亚洲激情影院 | 久久精品爱爱视频 | 成人 国产 在线 | 狠狠网站 | 成人网页在线免费观看 | 在线91视频 | 日韩在线观看一区二区三区 | 日韩www在线 |