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中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存 ...
随机推荐
- 【WPF】修改ComboBox样式
修改WPF默认的ComboBox控件样式 如下图所示: 修改代码如下: <UserControl.Resources> <Style TargetType="ToggleB ...
- Linux简单编程学习心得
在Linux环境下简单编程学习心得 linux编程过程 在上周的<信息安全设计基础>的课程学习中学习到了在虚拟的linux环境下简单的编程.学习过程中接触到了vim.gcc和gcd在实验楼 ...
- 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行用法
前几天在嵌入式linux上用到alsa command,网上查的资料多不给力,只有动手一点点查,终于可以用了,将这个使用方法告诉大家,以免大家少走弯路. 0.先查看系统支持哪几个alsa cmd: l ...
- 重新想,重新看——CSS3变形,过渡与动画④
最后,我们来探讨一下CSS3的动画属性. 之前提到过,实际上过渡也算作动画的一种.但过渡作为动画的缺陷在于,只能使元素属性从一个值“过渡”至另一个值,但如果想要使元素的属性值根据需要在时间轴上不断变化 ...
- MongoDB-与Python交互
与python交互 点击查看官方文档 安装python包 进入虚拟环境 sudo pip install pymongo 或源码安装 python setup.py 引入包pymongo import ...
- Ubuntu 使用root登陆界面
打开终端开启root账户 :sudo passwd -u root 输入当前用户的密码 2.为root账户设置密码:sudo passwd root 设置root密码,输入两次 3.进入到/usr/s ...
- caffe2+cuda+Ubuntu16.04(u盘安装)
安装caffe2 预先准备.安装gflags及autoconf及GLOG https://github.com/caffe2/caffe2/issues/1810 一.下载源代码通过网盘 https: ...
- Python学习札记(四) Basic-1
参考:Python基础 Basic 1.以#开头的是注释. 2.解释器把每一行都当做是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块. 3.请使用4个空格作为缩进,慎用Tab(请把Tab设置为4 ...
- redis 与session
springboot:session集中存储到redis https://www.cnblogs.com/huiy/p/6907164.html springboot处理session生命周期 htt ...
- MySQL-性能优化-优化设计和设计原则
MySQL性能优化目的如何合理的设计数据库?什么样的数据库设计才能给后期DBA优化提供基石? 数据库设计与程序设计的差异? 数据库设计早期优化1. 关系明确(理清表之间的关系,可以通过冗余的方式提高效 ...