资源简介
操作系统课程设计.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个文件信息
相关资源
- 价值2k的H漫画小说系统
- Pythonamp;课堂amp;笔记(高淇amp;400;集第
- ddos压力测试工具99657
- UML建模大全
- 开源1A锂电池充电板TP4056原理图+PCB
- m1卡 ic卡可选择扇区初始化加密软件
- TSCC.exe
- FTP课程设计(服务端+客户端)
- 计算机图形学 边填充算法实现代码
- 电力系统潮流计算程序集合
- oracle数据迁移项目实施方案
- Web Api 通过文件流 文件到本地
- Visio图标-最新最全的网络通信图标库
- Spire API文档
- OpenGL参考手册
- Python中Numpy库最新教程
- SPD博士V5.3.exe
- 直流无刷电机方波驱动 stm32 例程代码
- layui后台管理模板
- 仿知乎界面小程序源代码
- 云平台-阿里云详细介绍
- photoshop经典1000例
- scratch垃圾分类源码(最终版本).sb
- IAR ARM 7.8破解
- TI CCS V5.4 安装步骤及破解文件
- 松下plc FP-XH的驱动
- 局域网硬件信息收集工具
- 加快Windows XP操作系统开机速度
- 联想启天M4350 BIOS升级文件
- 操作系统教程课后答案华中科技大学
评论
共有 条评论