资源简介
配合我写的两篇关于简单字符设备和块设备驱动使用,这里是两个驱动程序的完整文件,使用的是 Ubuntu 16.0 的系统环境
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
struct cdev chrdev;
unsigned int major=0;
unsigned int minor=0;
dev_t dev_no;
int ret;
int my_open(struct inode *istruct file *f){
printk(“cdev init\n“);
return 0;
}
int my_release(struct inode *istruct file *f){
printk(“cdev release\n“);
return 0;
}
static ssize_t my_write(struct file *fconst char __user *usize_t lloff_t *o){
char buf[100];
copy_from_user(buful);
printk(KERN_EMERG“write string:%s“buf);
return l;
}
static ssize_t my_read(struct file *fchar __user *usize_t lloff_t *o){
char *buf=“hellouser!“;
copy_to_user(ubufstrlen(buf));
printk(KERN_EMERG“read string:%s“buf);
return l;
}
struct file_operations fops={
.owner=THIS_MODULE
.open=my_open
.release=my_release
.write=my_write
.read=my_read
};
static int my_init(void){
dev_no=MKDEV(majorminor);
if(dev_no>0){
ret=register_chrdev_region(dev_no1“demo1“);
}else{
ret=alloc_chrdev_region(&dev_no01“demo1“);
}
if(ret<0){
return ret;
}
cdev_init(&chrdev&fops);
chrdev.owner=THIS_MODULE;
cdev_add(&chrdevdev_no1);
return 0;
}
static void my_exit(void){
unregister_chrdev_region(dev_no1);
cdev_del(&chrdev);
}
module_init(my_init);
module_exit(my_exit);
MODULE_AUTHOR(“guoz“);
MODULE_DEscriptION(“this ostest demo1“);
MODULE_LICENSE(“GPL“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-01-30 12:58 2016112135_李汇远(os)\
文件 303150 2019-01-30 12:51 2016112135_李汇远(os)\2016112135_李汇远(os).doc
目录 0 2019-01-30 12:56 2016112135_李汇远(os)\demo1_chardevice\
文件 1470 2019-01-29 11:53 2016112135_李汇远(os)\demo1_chardevice\demo1.c
文件 251 2019-01-29 10:15 2016112135_李汇远(os)\demo1_chardevice\Makefile
文件 323 2019-01-30 10:42 2016112135_李汇远(os)\demo1_chardevice\test.c
目录 0 2019-01-30 12:57 2016112135_李汇远(os)\demo2_blockdevice\
文件 2684 2019-01-30 11:41 2016112135_李汇远(os)\demo2_blockdevice\demo2.c
文件 251 2019-01-29 16:31 2016112135_李汇远(os)\demo2_blockdevice\Makefile
评论
共有 条评论