這是別人的乙個例子,我在我的板子上試過是可以用的,其實只是用它的乙個簡單驅動的架構而已
c/c++ code#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lednkey_major 251
#define keypad_name "x-hyper250 keypad"
#define keypad_version "version 0.1"
#define ext_key_cs ext_port2
#define ext_led_cs ext_port3
#define led_show 10
void led_off_on()
ext_led_cs = 0xff;
}int lednkey_open(struct inode *inode, struct file *filp)
int lednkey_release(struct inode *inode, struct file *filp)
ssize_t lednkey_read(struct file *filp, char *putbuf, size_t length, loff_t *f_pos)
copy_to_user( putbuf, &bottontmp, length);
return length;
}ssize_t lednkey_write(struct file *filp, const char *getbuf, size_t length, loff_t *f_pos)
int lednkey_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,unsigned long arg)
}return 0;
}struct file_operations lednkey_fops = ;
static int __init xhyper250_keypad_init(void)
static void __exit xhyper250_keypad_exit(void)
module_init(xhyper250_keypad_init);
module_exit(xhyper250_keypad_exit);
將該驅動編譯到核心中 [*] 時自動呼叫 xhyper250_keypad_init 函式註冊裝置,或者 insmod ***.o 時呼叫
在應用層面呼叫 open("/dev/***", ***) 是自動呼叫註冊的 lednkey_fops 指向的 open 函式,也就是 lednkey_open 函式了
一般驅動編寫習慣:
***_init 註冊裝置,申請記憶體(如果需要)、dma(如果需要),做必要的初始化工作
***_open 函式一般開啟中斷以及註冊中斷函式
***_release 函式被應用層面的 close(xx) 呼叫
***_ioctl 函式是改變裝置設定呼叫的函式(應用層面 ioctl 呼叫)
無聊的帖子
1.人只能被自己安慰,別人說什麼也是無用功,只有自己覺得是正確的,才是正確的 2.趨利避害的能力比其他動物更弱,雖然人有說話和感情這種高階感官,但是貌似卻比其他動物更遲鈍 3.真心傷心的時候大概會想躲起來吧 4.無論男女都是視覺動物 5.時常覺得自己活著是件痛苦的事情,無欲無求,最想做的事情就是找個...
來自EYGLE的帖子。
這幾天沒怎麼上網,於是偶爾接到一些朋友的求助 問及一些技術問題,不過這都是小事情,這幾天關注的是這樣幾件事。1.安徽阜陽的兒童感染腸道病毒ev71事件 昨天周筠老師發簡訊告訴我要警惕小兒腸道疾病 可能沒有baby的朋友不太會關注這類新聞 今天看報紙才知道這一事件。轉引一點新華網的官方報道 4月27日...
乙個關於clear 吸收快取區的帖子引發的思考
cin.ignore a,b 表示 一直從cin中讀取,一直讀取到a個資料或者遇到字元b的時候結束。c cin.clear 到底是什麼意思呢 int i for i 0 i temp if cin 擴充套件資料 c 中的cin函式語法 c 中的cin函式和c語言的scanf函式同理,均為從鍵盤中接收...