• 大小: 4M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-16
  • 语言: 其他
  • 标签: 其他  

资源简介

操作系统课程设计.zip

资源截图

代码片段和文件信息

#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(messageusersizeof(message)))
{
return -EFAULT;
}
return sizeof(message);
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-28 12:26  操作系统课程设计\
     目录           0  2016-12-25 20:47  操作系统课程设计\DeviceDriver\
     文件        2703  2016-12-04 23:14  操作系统课程设计\DeviceDriver\devDrv.c
     文件         739  2012-02-19 08:58  操作系统课程设计\DeviceDriver\Makefile
     文件         839  2016-12-24 23:23  操作系统课程设计\DeviceDriver\test.c
     文件     3341802  2016-10-08 10:51  操作系统课程设计\Linux设备驱动程序(中文版第三版).pdf
     目录           0  2016-12-25 20:47  操作系统课程设计\test\
     文件        3187  2016-11-06 17:12  操作系统课程设计\test.sh
     文件         109  2016-12-22 23:00  操作系统课程设计\test\.testdev.ko.cmd
     文件         250  2016-12-22 23:00  操作系统课程设计\test\.testdev.ko.unsigned.cmd
     文件       22312  2016-12-22 23:00  操作系统课程设计\test\.testdev.mod.o.cmd
     文件       28889  2016-12-22 23:00  操作系统课程设计\test\.testdev.o.cmd
     目录           0  2016-12-25 20:47  操作系统课程设计\test\.tmp_versions\
     文件          59  2016-12-22 23:31  操作系统课程设计\test\.tmp_versions\testdev.mod
     文件         441  2016-12-21 09:17  操作系统课程设计\test\Makefile
     文件         740  2016-12-22 22:30  操作系统课程设计\test\Makefile~
     文件           0  2016-12-22 22:54  操作系统课程设计\test\Module.symvers
     文件          37  2016-12-22 23:31  操作系统课程设计\test\modules.order
     文件         834  2016-12-21 09:17  操作系统课程设计\test\test.c
     文件        4240  2016-12-22 22:54  操作系统课程设计\test\testdev.c
     文件        4240  2016-12-22 22:54  操作系统课程设计\test\testdev.c~
     文件         367  2016-12-22 22:59  操作系统课程设计\test\testdev.h
     文件         367  2016-12-22 22:59  操作系统课程设计\test\testdev.h~
     文件      205205  2016-12-22 23:00  操作系统课程设计\test\testdev.ko
     文件      205205  2016-12-22 23:00  操作系统课程设计\test\testdev.ko.unsigned
     文件        1271  2016-12-22 23:00  操作系统课程设计\test\testdev.mod.c
     文件       55576  2016-12-22 23:00  操作系统课程设计\test\testdev.mod.o
     文件      151308  2016-12-22 23:00  操作系统课程设计\test\testdev.o
     文件        2109  2016-11-06 19:32  操作系统课程设计\work.sh
     文件      727689  2016-09-21 21:36  操作系统课程设计\操作系统课程设计-2016-09.pdf
     文件      930816  2016-09-21 21:36  操作系统课程设计\操作系统课程设计讲稿-201609.ppt
............此处省略7个文件信息

评论

共有 条评论