驅動程式:
#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 函式原型 這個函式要進行下面兩項工作 ...