当前位置:首页 > 华科操作系统实验报告(DOC)
华 中 科 技 大 学 课 程 设 计 报 告
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++;
共分享92篇相关文档