资源简介
操作系统课程设计.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个文件信息
相关资源
- httrack_x64-noinst-3.48.22(网站器).zip
- RFID_TEST.zip
- myeclipse2016Stable1.0.rar
- 图像处理标准图像库非常齐全.rar
- 苹果CMSv10模板.zip
- tensorflow指南.pdf
- 如何学习QT-绝对经典.zip
- 鸣鹤房产中介版v1.2.6开源公众号应用
- Pandownload_203.zip
- 先电大数据平台操作手册-XianDian-Big
- 格林财务软件真正永久注册版.exe
- layui-springmvc-imgupload.zip
- 性别检测20151210.ppt
- 考试练习自制软件系统,随机抽题考
- qq_15099569_9208019.zip
- setup-cyowcopy-1.6.0-build-555.rar
- nodejs深入浅出.pdf
- 网络通讯协议关系图[中文珍藏版][P
- optisystem7初级入门中文讲义网络版.p
- CadenceIC617安装全过程.pdf
- QuidwaySVNClient.exe
- Effective.Modern.C.rar
- 一键定时Y自动S预约U座位+重约+后台抢
- GBT+51212-2016+建筑信息模型应用统一标
- VSPD6.9中文破解版.rar
- 百达卡达晶控晶创延期.vmp.exe
- rar(19)
- 220ddc4f0dfcdbc35b693cd005ac3e16.rar
- 林业档案管理.rar
- 隐写工具.zip
评论
共有 条评论