已经无法再精简,适合入门。

 #include<linux/module.h>
#include<linux/init.h> #include<asm/uaccess.h>
#include <linux/types.h>
#include<linux/fs.h>
#include<linux/cdev.h>
struct mengc_dev{
char data[];
struct cdev cdev;
};
int mengmajor;
struct mengc_dev meng_device; void exit_mengc_dev(void)
{
dev_t devno = MKDEV(mengmajor,);
cdev_del(&meng_device.cdev);
unregister_chrdev_region(devno,);
}
int meng_open(struct inode*inode,struct file *filep)
{
return ;
}
int meng_release(struct inode*inode,struct file *filep)
{
return ;
} ssize_t meng_read(struct file*filep,char __user*buf,size_t count,loff_t*f_ops)
{
if(*f_ops>=strlen(meng_device.data))
return ;
if(copy_to_user(buf,meng_device.data,strlen(meng_device.data)))
{
return -;
}
*f_ops+=strlen(meng_device.data);
return strlen(meng_device.data);
} ssize_t meng_write(struct file*filep,const char __user*buf,size_t count,loff_t*f_ops)
{
if(count>)
count=;
if(copy_from_user(meng_device.data,buf,count))
{
return -EFAULT;
}
return count;
} struct file_operations meng_fops=
{
.read=meng_read,
.write=meng_write,
.open=meng_open,
.release=meng_release
};
int init_mengc_dev(void)
{
int re;
dev_t dev=;
re=alloc_chrdev_region(&dev,,,"mengcdev");
if(re<)
{
printk("meng_devc register failed.\n");
return re;
}
mengmajor=MAJOR(dev);
memset(&meng_device,,sizeof(meng_device));
cdev_init(&meng_device.cdev,&meng_fops);
meng_device.cdev.owner=THIS_MODULE;
meng_device.cdev.ops=&meng_fops;
re=cdev_add(&meng_device.cdev,dev,);
if(re)
{
printk("mengdevc add faild.\n");
}
return ;
}
module_init(init_mengc_dev);
module_exit(exit_mengc_dev);

将上面的文件保存成mengcdev.c

然后在相同目录下建立一个Makefile文件,文件内容如下(只需这一行):

obj-m :=mengcdev.o

然后在此目录下执行 make -C /lib/modules/`uname -r`/build/ M=`pwd` 这条命令执行成功的前天是安装了源代码包,具体可以参阅其他资料,Ubuntu只需apt-get install 几个包,Redhat系列只需yuminstall 几个。当然需要有开发环境了,即gcc之类的。

一旦编译完成即可生成mengcdev.ko 这个模块

用root插入这个模块 insmod mengcdev.ko

然后去/proc/device中找相应的设备号

cat /proc/devices |grep meng

如果输出如下:

248 mengcdev

则执行

mknod /dev/mengcdev c 248 1,注意把248换成实际输出的值

然后就可以进行测试了  echo hello >/dev/mengcdev

cat /dev/mengcdev

Linux 设备驱动程序 字符设备的更多相关文章

  1. Linux驱动设计——字符设备驱动(一)

    Linux字符设别驱动结构 cdev结构体 struct cdev { struct kobject kobj; struct module *owner; const struct file_ope ...

  2. 【Linux驱动】字符设备驱动

    一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面 ...

  3. 手把手教Linux驱动3-之字符设备架构详解,有这篇就够了

    一.Linux设备分类 Linux系统为了管理方便,将设备分成三种基本类型: 字符设备 块设备 网络设备 字符设备: 字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程 ...

  4. Linux平台块设备到字符设备(裸设备)的三种映射方式(转载)

    在Linux平台oracle rac的组建过程中,如果使用ASM+RAW的存储方式的话,由于asm不支持块设备,支持持字符访问设备,所以需要配置将Block Device Drive转变成Charac ...

  5. Linux块设备和字符设备

    块设备:系统能够随机无序访问固定大小的数据片的设备,这些数据片称为块.块设备是以固定大小长度来传送资料的,它使用缓冲区暂存数据,时机成熟后从缓存中一次性写入到设备或者从设备中一次性放到缓存区.常见的块 ...

  6. Linux学习 :字符设备框架

    一.系统功能框架: U-boot : 启动内核 linux kernel: 启动应用 应用: open,read,write 都是通过C库实现,汇编就相当于swi val,引发中断,通过系统调用接口在 ...

  7. linux device driver —— 字符设备

    现在对linux设备驱动还没有什么认识,跟着书上敲了一个字符驱动,这里把代码贴一下. 测试环境是 Ubuntu 16.04 64bit 驱动程序: #include <linux/fs.h> ...

  8. 【驱动】linux设备驱动·字符设备驱动开发

    Preface 前面对linux设备驱动的相应知识点进行了总结,现在进入实践阶段! <linux设备驱动入门篇>:http://infohacker.blog.51cto.com/6751 ...

  9. 【转】linux设备驱动程序之简单字符设备驱动

    原文网址:http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用 ...

随机推荐

  1. wkhtmltopdf 安装使用笔记(CentOS6)

    1. 在官网下载安装文件. http://wkhtmltopdf.org/ 安装时如果提示某些库找不到的话,使用yum安装即可. 2. 命令行测试 $ wkhtmltopdf http://news. ...

  2. 《Spring MVC学习指南》怎么样?答:书名具有很大的欺骗性

    2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul D ...

  3. C#中浮点数依IEEE-754标准转二进制串 (MODBUS 浮点数转换)

    因工作需要,把再串口通信中浮点数与字节流的数据转换函数放在这,转发的,谢谢原作者. 今天花了一天的时间搜罗资料,为了解决一个串口编程的进制转化问题.因为串口传送的浮点数据格式与IEEE-754标准(3 ...

  4. Building Websites in ASP.NET

    ASP.NET offers three frameworks for creating web applications: Web Forms, ASP.NET MVC, and ASP.NET W ...

  5. ES6 笔记

    1.箭头函数 箭头函数里的this会引用 定义 箭头函数时,外部作用域 的 this .箭头函数只是 引用 外部作用域的 this ,本身不存在 this.同时因为没有 this ,所以 无法用new ...

  6. 携程Ctrip DAL的学习1

    携程Ctrip DAL的学习 1 本人net开发菜鸟,原理请自行看github的官网源码. 我这里是简单的使用(helloworld的水平). Ctrip DAL是携程框架部开发的数据库访问框架,支持 ...

  7. Openfire Strophe开发中文乱码问题

    网站上有很多Openfire Web方案,之前想用Smack 但是jar包支持客户端版本的,还有JDK版本问题  一直没调试成功  估计成功的方法只能拜读源码进行修改了. SparkWeb 官网代码很 ...

  8. iStylePDF c#集成开发示例

    iStylePDF安装包自带了ActiveX控件,下载安装包安装之后就可以使用,如果没有安装包请到360软件管家或者腾讯软件管家搜索下载.C#的Form中集成ActiveX控件还是非常简单的,选择添加 ...

  9. RESTFUL API 安全设计指南

    RESTFUL API 安全设计指南 xxlegend · 2015/10/18 15:08 0x01 REST API 简介 REST的全称是REpresentational State Trans ...

  10. Windows 更改桌面位置

    运行regedit HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders 找到 ...