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中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存 ...
随机推荐
- rowspan && colspan
> 跨行 <html> <body> <table width="> <tr> <th>col1</th> &l ...
- 编写和运行简单的"Hello World"操作系统内核
通常编写一个操作系统内核是一项浩大的工程.但我今天的目标是制作一个简单的内核,用比较方便的方法在虚拟机上验证它能够被grub装载和运行,并且可通过gdb进行调试,为接下去的工作创造一个基础环境. 首先 ...
- Python面试题之回调函数
0x00 概述 编程分为两类:系统编程(system programming)和应用编程(application programming).所谓系统编程,简单来说,就是编写库:而应用编程就是利用写好的 ...
- SQL学习笔记之MySQL索引知识点
0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...
- Topic与Queue
总结自:https://blog.csdn.net/qq_21033663/article/details/52458305 队列(Queue)和主题(Topic)是JMS支持的两种消息传递模型: 1 ...
- kali安装机场v2ray客户端
为了方便查找资料,之前安装的ssr在kali上面,感觉速度不怎么快,相比windows和android上慢很多,所以打算在kali上面装个机场试试,看官方介绍说机场比ssr速度更快,下面是安装步骤: ...
- Duilib + wke 设置wke背景透明
WkeWebKit.cpp 新增 wkeSetTransparent(m_pWebView, true); void CWkeWebkitUI::DoInit() { CControlUI::DoIn ...
- kali2016.2安装后配置
接触kali有几个月了,总是有一种浅尝辄止的感觉.因为不常用,一些常用操作时常想不起来了.为日后查找方便,特通过写博客方式来记录. 新建虚拟机,和安装其它操作系统差别不大,按提示一步一步安装.第1次安 ...
- CORE MVC 自定义认证
微软的认证体系,集成了EF,和它的表结构,对于我们已有的系统,或者想高度自定义的人,该怎么办呢? 答案在: https://docs.microsoft.com/en-us/aspnet/core/s ...
- js 日期 处理 加减时分秒
1.日期处理 var _d = new Date("2018/01/01 12:00:00"); _d = new Date(_d.valueOf() + 60 * 1000);/ ...