我們?cè)趦?nèi)核里面有時(shí)候項(xiàng)紀(jì)錄一些自己的東西,其中有個(gè)好方法就是創(chuàng)建一個(gè)自己的特有的設(shè)備。這樣我們可以在需要記錄東西的地方,就調(diào)用這個(gè)設(shè)備的接口函數(shù),這樣很方便。
這里我們創(chuàng)建一個(gè)很基本的設(shè)備驅(qū)動(dòng),主要是看看一個(gè)設(shè)備驅(qū)動(dòng)的框架,這個(gè)例子重的設(shè)備驅(qū)動(dòng)沒(méi)有任何實(shí)際的功能。:)
#define module
#define __kernel__
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
static int driver_open(struct inode *i, struct file *f)
{
printk(\"<1>open function\\n\");
return 0;
}
static struct file_operations fops = {
null, /* owner */
null, /*lseek*/
null, /*read*/
null, /*write*/
null, /*readdir*/
null, /*poll*/
null, /*ioctl*/
null, /*mmap*/
driver_open, /*open, take a look at my dummy open function*/
null, /*release*/
null, /*fsync...*/
null,
null,
null,
null,
null
};
int init_module(void)
{
if(register_chrdev(30, \"mydriver\", &fops)) return -eio;
return 0;
}
void cleanup_module(void)
{
/*unregister our driver*/
unregister_chrdev(30, \"mydriver\");
}
在上面的代碼中最重要的一個(gè)函數(shù)是:register_chrdev(...),這個(gè)函數(shù)在系統(tǒng)里面注冊(cè)了我們的驅(qū)動(dòng)程序,主設(shè)備號(hào)碼是30。如果我們需要訪問(wèn)這個(gè)設(shè)備,則要這樣做:
# mknod /dev/driver c 30 0
# insmod mydriver.o
然后你就可以在自己的程序里面使用這個(gè)設(shè)備了。
the file_operations 結(jié)構(gòu)體提供了所有的函數(shù),直接使用就可以了。注意,如果需要在設(shè)備里面log一些東西的話(huà),就可以自己處理了。例如在write這個(gè)函數(shù)里面提供一些處理之類(lèi)的
這里我們創(chuàng)建一個(gè)很基本的設(shè)備驅(qū)動(dòng),主要是看看一個(gè)設(shè)備驅(qū)動(dòng)的框架,這個(gè)例子重的設(shè)備驅(qū)動(dòng)沒(méi)有任何實(shí)際的功能。:)
#define module
#define __kernel__
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
static int driver_open(struct inode *i, struct file *f)
{
printk(\"<1>open function\\n\");
return 0;
}
static struct file_operations fops = {
null, /* owner */
null, /*lseek*/
null, /*read*/
null, /*write*/
null, /*readdir*/
null, /*poll*/
null, /*ioctl*/
null, /*mmap*/
driver_open, /*open, take a look at my dummy open function*/
null, /*release*/
null, /*fsync...*/
null,
null,
null,
null,
null
};
int init_module(void)
{
if(register_chrdev(30, \"mydriver\", &fops)) return -eio;
return 0;
}
void cleanup_module(void)
{
/*unregister our driver*/
unregister_chrdev(30, \"mydriver\");
}
在上面的代碼中最重要的一個(gè)函數(shù)是:register_chrdev(...),這個(gè)函數(shù)在系統(tǒng)里面注冊(cè)了我們的驅(qū)動(dòng)程序,主設(shè)備號(hào)碼是30。如果我們需要訪問(wèn)這個(gè)設(shè)備,則要這樣做:
# mknod /dev/driver c 30 0
# insmod mydriver.o
然后你就可以在自己的程序里面使用這個(gè)設(shè)備了。
the file_operations 結(jié)構(gòu)體提供了所有的函數(shù),直接使用就可以了。注意,如果需要在設(shè)備里面log一些東西的話(huà),就可以自己處理了。例如在write這個(gè)函數(shù)里面提供一些處理之類(lèi)的