字符设备驱动程序框架

via:http://blog.chinaunix.net/uid-20672257-id-3142809.html

1、写出open、write函数

2、告诉内核

  1)、定义一个struct file_operations结构并填充好

static struct file_operations first_drv_fops = {.owner  =   THIS_MODULE,    /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */.open   =   first_drv_open,     .write  = first_drv_write,    }; 

 

2)、把struct file_operations结构体告诉内核
major = register_chrdev(0, "first_drv", &first_drv_fops); // 注册, 告诉内核 
//相关参数:
//第一个,设备号,0自动分配主设备号,否则为主设备号0-255 
//第二个:设备名
//第三个:struct file_operations结构体

 


  4)、register_chrdev由谁调用(入口函数调用) static int first_drv_init(void)

5)、入口函数须使用内核宏来修饰 module_init(first_drv_init); module_init会定义一个结构体,这个结构体里面有一个函数指针指向first_drv_init这个函数,当我们加载或安装一个驱动时,内核会自动找到这个结构体,然后调用里面的函数指针,这个函数指针指向first_drv_init这个函数,first_drv_init这个函数就是把struct file_operations结构体告诉内核
6)、有入口函数就有出口函数
module_exit(first_drv_exit);
最后加上协议
MODULE_LICENSE("GPL");
3、mdev根据系统信息自动创建设备节点:
每次写驱动都要手动创建设备文件过于麻烦,使用设备管理文件系统则方便很多。在2.6的内核以前一直使用的是devfs,但是它存在许多缺陷。它创建了大量的设备文件,其实这些设备更本不存在。而且设备与设备文件的映射具有不确定性,比如U盘即可能对应sda,又可能对应sdb。没有足够的主/辅设备号。2.6之后的内核引入了sysfs文件系统,它挂载在/sys上,配合udev使用,可以很好的完成devfs的功能,并弥补了那些缺点。(这里说一下,当今内核已经使用netlink了)。
udev是用户空间的一个应用程序,在嵌入式中用的是mdev,mdev在busybox中。mdev是udev的精简版。
首先在busybox中添加支持mdev的选项:
Linux System Utilities --->   
[*] mdev   
[*]   Support /etc/mdev.conf   
[*]     Support subdirs/symlinks   
[*]       Support regular expressions substitutions when renaming device   
[*]     Support command execution at device addition/removal  
然后修改/etc/init.d/rcS:
echo /sbin/mdev > /proc/sys/kernel/hotplug  
/sbin/mdev -s  
执行mdev -s :以‘-s’为参数调用位于 /sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描 /sys/class 和 /sys/block 中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev 下创建设备节点文件。一般只在启动时才执行一次 “mdev -s”。
热插拔事件:由于启动时运行了命 令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于 /sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否“dev”的属性文件,如果有就利用这些信息为 这个设备在/dev 下创建设备节点文件
重新打包文件系统,这样/sys目录,/dev目录就有东西了

转载于:https://www.cnblogs.com/izhangzhne/p/4493923.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为鸿蒙与magic,如果荣耀Magic3搭载了屏下镜头和鸿蒙系统,你会做第一批吗?...

华为荣耀在目前的手机市场中,荣耀手机的人气还是蛮高的,从高端旗舰市场到中低端市场,我们都能够看到荣耀手机的踪影,这已经可以代表荣耀手机的优势了。要知道华为荣耀这两年的发展速度非常快,产品的布局速度也是如此&a…

第十九章 我国农村资金筹集

农村改革解说(专著)第十九章 第十九章 我国农村资金筹集 1、农村公共事业统筹经费怎样确定? 总的原则是:制止对农民的不合理摊派,减轻农民的额外负担,保证农村合理的公共事业经费。具体要求如下&#xff1a…

两个Python web框架:Django Tornado比较

就是说它作为 web 框架比 Django 简单,又支援异步 IO,且更不需要前端的 webserver ? 我已经混乱了, Tornado是 Nginx、Django、Node.js 的结合体?又或是 Nginx * 20% Django * 40% Node.js * 40% ?你需要搞清楚几个…

广义动量定理之速度V的应用分析

广义动量定理之速度V的应用分析 从广义动量定理FαtnmV的角度说,改变速度V,就可以改变成果nmV。速度派以改变速度V作为其主要目的。 速度V应用于兵贵神速 理论简介:三国时期曹操的谋士郭嘉说:“兵贵神速”。 孙子在九地篇中说“兵…

云安全联盟发布更新版安全应用指南

本文讲的是云安全联盟发布更新版安全应用指南【IT168 资讯】云安全联盟(CSA)本周四发布了云计算服务的第二版安全应用指南。这一非营利性质的联盟正式成立于四月份,其目的是推进云计算安全的最佳实践。他们在2009 RSA会议(全球信息安全领域最具权威的年度峰会)上发布…

[BZOJ1026] [SCOI2009] windy数 (数位dp)

Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B。 Output 一个整数 Sample Input…

JQuery ajax()实例

前端页面&#xff1a; <!doctype html><html><head><meta charset"utf-8"><title>搜索</title></head> <body><div class"zgz">请输入(A-Z):<input type"text" value"GET"&…

黑马数据库html阶段考试,黑马web阶段web试题学生版.docx

Web 阶段 Web 试题1. 动态网站的开发技术有 (A)JSPHTMLCSSJavaScript 下面哪个请求头信息可以实现防盗链 (C)LocationRefreshRefererIf-Modified-Since在Web应用程序的文件与目录结构中&#xff0c;是放置在(A )WEB-INF 目录conf 目录lib 目录classes 目录下面哪一个指明向客户…

学生信息管理系统中遇到的问题解析

项目概述&#xff1a;做一个简单的学生信息管理系统 要求&#xff1a;学生信息的增删查改&#xff0c;成绩的增删。自动生成的编号。 工具&#xff1a;微软企业库与MiniUI 遇到的问题与解决方法&#xff1a;&#xff08;前面的博文也有类似的问题和解决方法&#xff0c;这里不再…

简单地使用线程之一:使用异步编程模型

.NetFramework的异步编程模型从本质上来说是使用线程池来完成异步的任务&#xff0c;异步委托、HttpWebRequest等都使用了异步模型。 这里我们使用异步委托来说明异步编程模型。 首先&#xff0c;我们来明确一下&#xff0c;对于多线程来说&#xff0c;我们需要关注哪些问题。 …

ShowType=0,交换机命令showinterfacestype0/port_#switchport|trunk用于显 - 信管网

交换机命令show interfaces type0/port_# switchport|trunk用于显示中继连接的配置情况&#xff0c;下面是显示例子&#xff1a;2950#show interface fastEthernet0/1 switchportName: fa0/1Switchport: EnabledAdministrative mode: trunkOperational Mode: trunkAdministrati…

SQL SERVER学习笔记(二)数据库管理

第二部分&#xff1a;数据库管理 单词记忆&#xff1a;transact&#xff1a;处理 create&#xff1a;创建 execute&#xff1a;执行、完成 一、 SQL Server的特性 1、 安装简便&#xff1a;为了便于安装、使用和管理&#xff0c;SQL Server2000提供了一组管理和开发工具。 …

SQL——快速定位相关的外键表

转载于:https://www.cnblogs.com/mingle/p/4506422.html

Linux安装glibc(升级版本)

2019独角兽企业重金招聘Python工程师标准>>> glibc下载地址&#xff1a;http://ftp.gnu.org/gnu/glibc/ 这里下载 glibc-2.15&#xff1a; http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz glibc-ports-2.15&#xff1a; http://ftp.gnu.org/gnu/glibc/glibc-ports…

定义列表的特点html,HTML的列表表格表单知识点

无序列表格式 有序列表格式第一项 …

Javascript 获取url参数,hash值 ,cookie

/*** 获取请求参数* param key* returns {*}*/ function getRequestParameter(key){var params getRequestParameters();return params[key]; }/*** 获取请求参数列表* returns {{}}*/ function getRequestParameters(){var arr (location.search || "").replace(/…

C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码

本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码。网上文章大多只是简单介绍内置参数的设置&#xff0c;根据我的使用目的&#xff0c;增加了自定义目标二维码图片尺寸和白边边框。有需要的朋友们可以试一下&#xff0c;如有bug欢迎指正。 首先&…

html设置百度协议,网站HTML结构SEO要求说明(含移动站)

网页结构一、网页中主体结构标签一一对应。网页头部区域网页底部区域网页边框区域网页导航区域网页章节、页眉、页脚详情页文章区域详情页作者信息详情页中文章的发布日期列表页中文章列表区域二、其他说明1、首页head中标注Meta标签协议&#xff0c;标识对应的网页浏览&#x…

【Fanvas技术解密】HTML5 canvas实现脏区重绘

先说明一下&#xff0c;fanvas是笔者在企鹅公司开发的&#xff0c;即将开源的flash转canvas工具。 脏区重绘(dirty rectangle)并不是一门新鲜的技术了&#xff0c;这在最早2D游戏诞生的时候就已经存在。 复杂的术语或概念就不多说&#xff0c;简单说&#xff0c;脏区重绘就是每…

javascript 学习教程

1&#xff0c;JavaScript 是一种轻量级的编程语言&#xff0c;是可插入 HTML 页面的编程代码。 2,以<script>标签开始&#xff0c;以</script>标签结束。 3,引用放在外部文件的扩展名为.js的脚本文件 <script src"myScript.js"></script> 4&…