核心驅動 阻塞型驅動

2021-08-18 00:11:15 字數 2138 閱讀 2970

1、定義「等待佇列頭部」

wait_queue_head_t key_q;

2、初始化「等待佇列頭部」

init_waitqueue_head(&key_q);

3、等待事件發生

wait_event(key_q, key_num);

4、喚醒等待事件

wake_up(&key_q);

查詢按鍵狀態

key.c

#include #include #include #include #include #include #include #include #include #include #include #define	gph0con 0xe0200c00

#define gph0dat 0xe0200c04

#define device_name "tqkey"

#define ledcon 0xe0200060

#define leddat 0xe0200064

volatile unsigned int *led_config;

volatile unsigned int *led_data;

volatile unsigned int *key_data;

unsigned int key_num;

//等待佇列

wait_queue_head_t key_q;

//1、定義工作

struct work_struct *work;

//(定時器)1、定義定時器結構體

struct timer_list buttons_timer;

void work_func(struct work_struct *work)

//(定時器)5、函式

static void buttons_timer_function(unsigned long data)

else if(key_val == 1) //按鍵按下為低電平

writel(leddata, led_data);

//喚醒等待佇列

wake_up(&key_q);

}void timer_init(void)

static irqreturn_t key_int(int irq, void *dev_id)

void key_hw_init(void)

/*static long key_ioctl(struct file *file, unsigned int cmd, unsigned long arg)

*/static int key_open(struct inode *inode, struct file *file)

static int key_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)

else }

static struct file_operations key_fops =

;struct miscdevice key_miscdev =

;//註冊函式

static int __init button_init(void)

//登出函式

static void __exit button_exit(void)

module_init(button_init);

module_exit(button_exit);

module_license("gpl");

module_author("jerry.gou");

module_description("tq210 button driver");/*********************************************

*author :jerrygou

*date :2017/10/23

*function :通過read函式,獲取核心中是那個按鍵按下

*********************************************/

#include #include #include #include #include #include #include int main()

阻塞型驅動設計

阻塞型驅動設計 1.阻塞的必要性 當乙個裝置無法立刻滿足使用者的讀寫請 求時應當如何處理?例如 呼叫read 時,裝置沒有資料提供,但以後可能會 有 或者乙個程序試圖向裝置寫入資料,但是裝置暫時沒有準備好接收資料。當 上述情況發生的時候,驅動程式應當 預設地 阻塞程序,使它進入等待 睡 眠 狀態,直...

linux裝置驅動(8)阻塞型IO

當驅動程式無法立即滿足請求,該如何響應?如當我們想要寫入的時候,裝置對應的緩衝區已滿,或者是當我們想要讀的時候當前緩衝區是空的。為了提高cpu的效率,我們的驅動程式應該阻塞等待該程序,將其置於休眠狀態直到請求可繼續。休眠 sleep 對於程序來講意味著什麼?當乙個程序被置入休眠時,他會被標記為一種特...

核心驅動驅動物件 Driver OBJECT

目錄在核心中.每乙個驅動模組都是乙個驅動物件.都有乙個driver object結構體代表.可以想象成驅動物件是乙個程序容器.容納百川.下面針對驅動物件做一下簡單的成員輸出.以熟悉驅動物件.驅動物件結構如下 typedef struct driver object driver object typ...