Linux驅動之poll機制

2021-09-23 23:27:33 字數 2284 閱讀 8419

驅動程式:

#include /*模組有關的*/

#include /*核心有關的*/

#include /*檔案系統有關的*/

#include

#include

#include

#include

#include

#include /*linux中斷*/

#include

#include

#include

#include //copy_to_user

#include /*暫存器設定s3c2410_gpf0等的定義*/

#include //s3c2410_gpio_getpin等的定義

#include //irq_eint0等的定義

#include

#include

/**  休眠用的佇列的乙個巨集

*/static declare_wait_queue_head(button_waitq);

/* 中斷事件標誌, 中斷服務程式將它置1,fifth_drv_read將它清0 */

static volatile int ev_press = 0;

#define device_name  "poll"

static struct class *poll_class;

struct pin_desc;

static unsigned char keyval;//jianzhi

/* 鍵值: 按下時, 0x01, 0x02, 0x03, 0x04 */

/* 鍵值: 鬆開時, 0x81, 0x82, 0x83, 0x84 */

struct pin_desc pins_desc[4] = ,,,

,};static irqreturn_t buttons_irq(int irq, void *dev_id)

else

ev_press = 1;                  /* 表示中斷發生了 */

wake_up_interruptible(&button_waitq);   /* 喚醒休眠的程序 */

return irq_handled;

}static int fifth_drv_open(struct inode *inode, struct file *file)      /* 應用程式呼叫open時候就呼叫這裡,這時候在註冊中斷函式 */

ssize_t fifth_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)

static unsigned fifth_drv_poll(struct file *file, poll_table *wait)

int fifth_drv_close(struct inode *inode, struct file *file)

static struct file_operations fifth_drv_fops = ;

static  int major;             /* 自動分配主裝置號 */

static int fifth_drv_init(void)

static void fifth_drv_exit(void)

module_init(fifth_drv_init);   /* 入口函式 */

module_exit(fifth_drv_exit);

module_license("gpl");   /* 協議 */

測試程式:

#include

#include

#include

#include

#include

int main(int argc, char **ar**)

fds[0].fd     = fd;

fds[0].events = pollin;

while (1)

else

}return 0;}

makefile其他的部分是不變的,只需要修改檔案名字就可以了。

obj-m :=pollt.o

kerneldir ?= /home/work/linux/linux-2.6.28.7

pwd := $(shell pwd)

default:

$(make) -c $(kerneldir) m=$(pwd) modules

clean:

rm -f  *o  *.mod.o  *mod.c  *.symvers *.order

linux驅動編寫之poll機制

1.poll情景描述 以按鍵驅動為例進行說明,用阻塞的方式開啟按鍵驅動檔案 dev buttons,應用程式使用read 函式來讀取按鍵的鍵值。這樣做的效果是 如果有按鍵按下 了,呼叫該read 函式的程序,就成功讀取到資料,應用程式得到繼續執行 倘 若沒有按鍵按下,則要一直處於休眠狀態,等待這有按...

linux驅動編寫之poll機制

一 概念 1 poll情景描述 以按鍵驅動為例進行說明,用阻塞的方式開啟按鍵驅動檔案 dev buttons,應用程式使用read 函式來讀取按鍵的鍵值。這樣做的效果是 如果有按鍵按下了,呼叫該read 函式的程序,就成功讀取到資料,應用程式得到繼續執行 倘若沒有按鍵按下,則要一直處於休眠狀態,等待...

Linux驅動程式之poll機制

使用非阻塞i o的應用程式通常會使用select 和poll 系統呼叫查詢是否可對裝置進行無阻塞的訪問,這兩個系統呼叫最終又會引發裝置驅動中的poll 函式被執行 所以我們的問題就集中到了如何編寫裝置驅動中的poll 函式就可以了。先來看看裝置驅動中的poll 函式原型 這個函式要進行下面兩項工作 ...