应用介绍
此项目是Linux内核驱动的示例。
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/fcntl.h>
#include <linux/cdev.h>
#include <linux/version.h>
#include <linux/vmalloc.h>
#include <linux/ctype.h>
#include <linux/pagemap.h>
#include "demo.h"
MODULE_AUTHOR("fgj");
MODULE_LICENSE("Dual BSD/GPL");
static unsigned char simple_inc=0;
static unsigned char demoBuffer[256];
int simple_open(struct inode *inode, struct file *filp)
{
if(simple_inc>0)return -ERESTARTSYS;
simple_inc++;
return 0;
}
int simple_release(struct inode *inode, struct file *filp)
{
simple_inc--;
return 0;
}
ssize_t simple_read(struct file *filp, char __user *buf, size_t count,loff_t *f_pos)
{
/* 把数据拷贝到应用程序空间 */
if (copy_to_user(buf,demoBuffer,count))
{
count=-EFAULT;
}
return count;
}
ssize_t simple_write(struct file *filp, const char __user *buf, size_t count,loff_t *f_pos)
{
/* 把数据拷贝到内核空间 */
if (copy_from_user(demoBuffer+*f_pos, buf, count))
{
count = -EFAULT;
}
return count;
}
struct file_operations simple_fops = {
.owner = THIS_MODULE,
.read = simple_read,
.write = simple_write,
.open = simple_open,
.release = simple_release,
};
/*******************************************************
MODULE ROUTINE
*******************************************************/
void simple_cleanup_module(void)
{
unregister_chrdev(simple_MAJOR, "simple");
printk("simple_cleanup_module!\n");
}
int simple_init_module(void)
{
int ret;
//注册字符设备
ret = register_chrdev(simple_MAJOR, "simple", &simple_fops);
if (ret < 0)
{
printk("Unable to register character device %d!\n",simple_MAJOR);
return ret;
}
return 0;
}
module_init(simple_init_module);
module_exit(simple_cleanup_module);
想了解详情请下载附件。
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: [email protected] 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » Linux内核驱动的示例
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
check.sh | 0.07 KB | 2019-06-13 |
demo.c | 0.75 KB | 2019-06-13 |
demo.h | 0.55 KB | 2019-06-13 |
Makefile | 0.15 KB | 2019-06-13 |
load | 0.43 KB | 2019-06-13 |
Makefile | 0.17 KB | 2019-06-13 |
scullc.c | 2.12 KB | 2019-06-13 |
scullc.h | 0.46 KB | 2019-06-13 |
test.c | 0.15 KB | 2019-06-13 |
unload | 0.14 KB | 2019-06-13 |
load | 0.43 KB | 2019-06-13 |
Makefile | 0.16 KB | 2019-06-13 |
output.sh | 0.16 KB | 2019-06-13 |
scullpipe.c | 1.53 KB | 2019-06-13 |
scullpipe.h | 0.55 KB | 2019-06-13 |
unload | 0.14 KB | 2019-06-13 |
Makefile | 0.17 KB | 2019-06-13 |
short.c | 0.24 KB | 2019-06-13 |
demo | 0.00 KB | 2019-06-13 |
scull | 0.00 KB | 2019-06-13 |
scullpipe | 0.00 KB | 2019-06-13 |
short | 0.00 KB | 2019-06-13 |
mydriver | 0.00 KB | 2020-08-02 |
发表评论 取消回复