資源簡介
Linux增加字符設備驅動實驗,可以打印出一個hello world

代碼片段和文件信息
/*?
?*??devDrv.c?
?*??threeProcess?
?*??Created?on:?2012-2-24?
?*??????Author:?zhushengben?
?*/??
??
#include?“linux/kernel.h“??
#include?“linux/module.h“??
#include?“linux/fs.h“??
#include?“linux/init.h“??
#include?“linux/types.h“??
#include?“linux/errno.h“??
#include?“linux/uaccess.h“??
#include?“linux/kdev_t.h“??
#define?MAX_SIZE?1024??
??
static?int?my_open(struct?inode?*inode?struct?file?*file);??
static?int?my_release(struct?inode?*inode?struct?file?*file);??
static?ssize_t?my_read(struct?file?*file?char?__user?*user?size_t?t?loff_t?*f);??
static?ssize_t?my_write(struct?file?*file?const?char?__user?*user?size_t?t?loff_t?*f);??
??
static?char?message[MAX_SIZE]?=?“-------congratulations--------!“;??
static?int?device_num?=?0;//設備號??
static?int?counter?=?0;//計數用??
static?int?mutex?=?0;//互斥用??
static?char*?devName?=?“myDevice“;//設備名??
??
struct?file_operations?pStruct?=??
{?open:my_open?release:my_release?read:my_read?write:my_write?};??
??
/*?注冊模塊?*/??
int?init_module()??
{??
????int?ret;??
????/*?函數中第一個參數是告訴系統,新注冊的設備的主設備號由系統分配,?
?????*?第二個參數是新設備注冊時的設備名字,?
?????*?第三個參數是指向file_operations的指針,?
?????*?當用設備號為0創建時,系統一個可以用的設備號創建模塊?*/??
????ret?=?register_chrdev(0?devName?&pStruct);??
????if?(ret?0)??
????{??
????????printk(“regist?failure!\n“);??
????????return?-1;??
????}??
????else??
????{??
????????printk(“the?device?has?been?registered!\n“);??
????????device_num?=?ret;??
????????printk(“<1>the?virtual?device‘s?major?number?%d.\n“?device_num);??
????????printk(“<1>Or?you?can?see?it?by?using\n“);??
????????printk(“<1>------more?/proc/devices-------\n“);??
????????printk(“<1>To?talk?to?the?drivercreate?a?dev?file?with\n“);??
????????printk(“<1>------‘mknod?/dev/myDevice?c?%d?0‘-------\n“?device_num);??
????????printk(“<1>Use?\“rmmode\“?to?remove?the?module\n“);??
??
????????return?0;??
????}??
}??
/*?注銷模塊,函數名很特殊?*/??
void?cleanup_module()??
{??
????unregister_chrdev(device_num?devName);??
????printk(“unregister?it?success!\n“);??
}??
??
static?int?my_open(struct?inode?*inode?struct?file?*file)??
{??
????if?(mutex)??
????????return?-EBUSY;??
????mutex?=?1;//上鎖??
????printk(“<1>main??device?:?%d\n“?MAJOR(inode->i_rdev));??
????printk(“<1>slave?device?:?%d\n“?MINOR(inode->i_rdev));??
????printk(“<1>%d?times?to?call?the?device\n“?++counter);??
????try_module_get(THIS_MODULE);??
????return?0;??
}??
/*?每次使用完后會release?*/??
static?int?my_release(struct?inode?*inode?struct?file?*file)??
{??
????printk(“Device?released!\n“);??
????module_put(THIS_MODULE);??
????mutex?=?0;//開鎖??
????return?0;??
}??
??
static?ssize_t?my_read(struct?file?*file?char?__user?*user?size_t?t?loff_t?*f)??
{??
????if(copy_to_user(usermessagesizeof(message)))??
????{??
????????return?-EFAULT;??
????}??
????return?sizeof(message);??
}??
??
static?ssize_t?my_write(struct?file?*file?const?char?__user?*user?size_t?t?loff_t?*f)??
{??
????if(copy_from_user(message
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3230??2017-05-09?19:42??Linux增加字符設備驅動實驗\devDrv.c
?????文件????????803??2017-05-09?19:43??Linux增加字符設備驅動實驗\Makefile
?????文件???????1211??2017-05-09?19:44??Linux增加字符設備驅動實驗\test.c
?????目錄??????????0??2017-05-09?19:44??Linux增加字符設備驅動實驗
-----------?---------??----------?-----??----
?????????????????5244????????????????????4
- 上一篇:燕山大學軟件工程編譯原理實驗報告
- 下一篇:計算機體系結構論文作業
評論
共有 條評論