Linux设备驱动——简单的字符驱动
//memdev.h
#ifndef _MEMDEV_H_
#define _MEMDEV_H_
#ifndef MEMDEV_MAJOR
#
#endif
#ifndef MEMDEV_NR_DEVS
#
#endif
#ifndef MEMDEV_SIZE
#
#endif
struct mem_dev{
char* data;
unsigned
long size;
};
#endif
# include
< linux / module.h
>
# include
< linux / types.h
>
# include
< linux / fs.h
>
# include
< linux / errno.h
>
# include
< linux / mm.h
>
# include
< linux / sched.h
>
# include
< linux / init.h
>
# include
< linux / cdev.h
>
# include
< asm
/ io.h >
# include
< asm
/ system.h >
# include
< asm
/ uaccess.h >
# include
< linux / wait.h
>
# include
< linux / completion.h
>
# include
"memdev.h"
MODULE_LICENSE( "Dual BSD/GPL" );
static
int mem_major = MEMDEV_MAJOR;
struct mem_dev
* mem_devp; /*设备结构体指针*/
struct cdev cdev;
/*文件打开函数*/
int mem_open(
struct inode * inode,
struct file * filp)
{
printk( "open own file\n" );
;
}
/*文件操作结构体*/
static
const struct file_operations mem_fops=
{
.owner = THIS_MODULE,
.open = mem_open,
};
/*设备驱动模块加载函数*/
static
int memdev_init( void )
{
int result;
int i;
dev_t devno );
/* 静态申请设备号*/
result , "memdev" );
if (result
< )
return result;
/*初始化cdev结构*/
cdev_init( & cdev,
& mem_fops);
/* 注册字符设备 */
cdev_add( ), MEMDEV_NR_DEVS);
return result;
}
/*模块卸载函数*/
static
void memdev_exit( void )
{
cdev_del( & cdev); /*注销设备*/
unregister_chrdev_region(MKDEV(mem_major, ), );
/*释放设备号*/
}
module_init(memdev_init);
module_exit(memdev_exit);
ifneq ($(KERNELRELEASE),)
obj-m := memdev.o
else
KERNELDIR ?=/lib/modules/$(shell uname-r)/build
PWD = $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm memdev.mod* module* memdev.o memdev.ko Module.*
endif
// memusr.c
#include
<stdio.h>
#include
<string.h>
int main()
{
FILE *fp0;
/*打开设备文件*/
fp0 = fopen("/dev/memdev_t","r+");
if (fp0
== NULL) {
printf("Open Memdev0 Error!\n");
return
-;
}
}
Linux设备驱动——简单的字符驱动的更多相关文章
- linux驱动初探之字符驱动
关键字:字符驱动.动态生成设备节点.helloworld linux驱动编程,个人觉得第一件事就是配置好平台文件,这里以字符设备,也就是传说中的helloworld为例~ 此驱动程序基于linux3. ...
- Linux设备驱动程序学习 高级字符驱动程序操作[阻塞型I/O和非阻塞I/O]【转】
转自:http://blog.csdn.net/jacobywu/article/details/7475432 阻塞型I/O和非阻塞I/O 阻塞:休眠 非阻塞:异步通知 一 休眠 安全地进入休眠的两 ...
- linux设备和驱动加载的先后顺序
点击打开链接 Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢. Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有 ...
- MPU6050带字符驱动的i2c从设备驱动1
开干: 1.闲言碎语 这个驱动,越写觉的越简单,入门难,入门之后感觉还好.Linux开发还是比较友好的. 2.编写MPU6050带字符驱动的i2c从设备驱动 要实现的功能就是,将MPU6050作为字符 ...
- 基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl
基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl 0. 导语 在嵌入式的道路上寻寻觅觅很久,进入嵌入式这个行业也有几年的时间了,从2011年后 ...
- linux设备驱动第二篇:构造和运行模块
上一篇介绍了Linux驱动的概念,以及linux下设备驱动的基本分类情况及其各个分类的依据和差异,这一篇我们来描述如何写一个类似hello world的简单测试驱动程序.而这个驱动的唯一功能就是输 ...
- 【转】linux设备驱动程序之简单字符设备驱动
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用 ...
- linux设备驱动第三篇:如何实现一个简单的字符设备驱动
在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存 ...
- linux设备驱动第三篇:如何写一个简单的字符设备驱动?
在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存 ...
随机推荐
- ABP官方文档翻译 1.4 启动配置
启动配置 配置ABP 替换内置服务 配置模块 创建模块配置 ABP提供了基础设施和模型在启动的时候对它及模块进行配置. 配置ABP 在模块的PreInitialize事件中配置ABP.示例配置如下: ...
- CSS Margin(外边距)
CSS Margin(外边距) 一.简介 CSS margin(外边距)属性定义元素周围的空间. margin 清除周围的(外边框)元素区域.margin 没有背景颜色,是完全透明的. margin ...
- 北京电子科技学院(BESTI)实验报告2
北京电子科技学院(BESTI)实验报告2 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名)郑凯杰 .周恩德 学号:(按贡献大小排名)20145314 .20145217 ...
- 20145211 《网络渗透》MS08_067安全漏洞
20145211 <网络渗透>MS08_067安全漏洞 一.实验原理 ms08_067是服务器服务中一个秘密报告的漏洞,于2008年被发现.攻击者利用靶机默认开放的SMB服务的445端口, ...
- uboot向linux传递输出任何log信息的方法
答案:在bootargs中加入loglevel=8即可(在进入linux的过程中会输出任何log信息)
- HTML中的figure和gigcaption标签
参考自:anti-time的博客http://www.cnblogs.com/morning0529/p/4198494.html 在写xhtml.html中常常用到一种图片列表,图片+标题或者图片+ ...
- Elasticsearch之中文分词器
前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch之分词器的工作流程 Elasticsearch之停用词 Elasticsearch的中文分词器 1.单字分词 ...
- hdu1009 - 贪心
2017-07-14 18:18:31 writer:pprp 介绍:hdu1009 题目介绍,详见hdu1009 代码如下 #include <iostream> #include &l ...
- Javascript知识点汇总-初级篇
JavaScript的数据类型都有什么? 基本数据类型:String,Boolean,Number,Undefined, Null 引用数据类型:Object(Array,Date,RegExp,Fu ...
- Springboot依赖注入笔记
结合Autowired和Service注解 public interface IUser { void say(); } @Service public class Student implement ...