华 中 科 技 大 学 课 程 设 计 报 告
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);
char message[MAX_SIZE] = \static int device_num = 0;//设备号 static int counter = 0;//计数用 static int mutex = 0;//互斥用
static char* devName = \设备名 //added by wuyao int mes_num=0; char tmp; //////////////////
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(\return -1;
华 中 科 技 大 学 课 程 设 计 报 告
}
/* 注销模块,函数名很特殊 */ void cleanup_module() { }
static int my_open(struct inode *inode, struct file *file) {
if(mutex)
return -EBUSY; mutex = 1;//上锁
printk(\ device : %d\\n\printk(\
} else {
printk(\device_num = ret;
printk(\printk(\printk(\
printk(\
printk(\printk(\
}
return 0;
unregister_chrdev(device_num, devName); printk(\
华 中 科 技 大 学 课 程 设 计 报 告
}
/* 每次使用完后会release */
static int my_release(struct inode *inode, struct file *file) {
printk(\module_put(THIS_MODULE);
printk(\try_module_get(THIS_MODULE); return 0;
mutex = 0;//开锁 }
static ssize_t my_read(struct file *file, char __user *user, size_t t, loff_t *f) { }
return 0;
for(mes_num=0;mes_num if(copy_to_user(user,message,sizeof(message))) {  }   return sizeof(message);  return -EFAULT; tmp=message[mes_num];  message[mes_num]=message[strlen(message)-mes_num-1]; message[strlen(message)-mes_num-1]=tmp;    华 中 科 技 大 学 课 程 设 计 报 告  static ssize_t my_write(struct file *file, const char __user *user, size_t t, loff_t *f) {              }   ③ 实验过程     sudo su  在控制台下进入文件所在目录   1.编译驱动程序 make   2.装载模块  装载前,我们可以先看看系统中的模块:lsmod 装载,输入命令:   insmod mydev.ko  可以用命令 cat  /proc/devices      copy_from_user(message,user,sizeof(message)); /*while(mes_num /*if(copy_from_user(message,user,sizeof(message))) {  }*/  return sizeof(message);  return -EFAULT; tmp=message[mes_num];  message[mes_num]=message[MAX_SIZE-mes_num]; message[MAX_SIZE-mes_num]=tmp; mes_num++; 
相关推荐: