典型的Linux设备驱动程序的代码

2018-02-14 22:24:38编辑:什么鱼 关键字:Linux  设备驱动

    为了增跟内核的灵活性和为了方便,设各驱动程序应被设计为一个可动态安装的内核模块。

    于是,一个典型的Linux设备驱动程序应包含如下几部分代码:

    ·驱动程序模块的注册与注销函数;

    ·设各的打开、关闭、读、写及需要的其他操作函数;


    ·设备的中断服务程序。

    下面用伪代码给出一个从键盘上输入一个字符的例子,以使读者对设备驱动程序的构成有一个基本的概念。

    (1)定义读操作函数

    ssize mydev_read(……)

    {

    获取本设备的信号量以确倮没有其他进程访闷本设备;

    申请中断标志,允许中断;

    对设备发出读命令;

    将进EH于等待队列,等待中断到来:

    }

    (2)定义中断服务程序

    void mydev_ihterpt(……)

    {

    处理器读入字符;

    设置中断标志:

    唤醒等侍的进程:

    }

    (3)定义模块初始化函数

    int init_module(void)

    向系统注册设各;

    其他初始化代码;

    (4)定义模块析构函数

    void cleMup_modtLle(void)

    {

    取消注册的设备;

    其他析构代码;

    }


关键字:Linux  设备驱动

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/article_2018021437804.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于实时操作系统μC/OS-II远程终端硬件和软件的设计与实现
下一篇:嵌入式系统的调试方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作

这篇文档算上期末复习这段时间其实拖了有好久了,因为从一开始接触linux的i2c驱动体系我就各种凌乱,因为起初脑海中既没有整体框架也不熟悉相关体系下的结构,所以四处乱看,经常性的在看内核代码时看着看着就把自己看飞了。结果就总是无功而返。现在我决定当前阶段把结构熟悉,知道大致的驱动体系框架。日后真正做到此类项目时再来深入理解、巩固、总结。因为我所要操作的EEPROM使用的是I2C接口。那么自然要先了解一下I2C总线协议。对于I2C总线协议我的理解:两条线“SCL和SDA”,一个数据信号一个时钟脉冲信号。俩线都是高电平时,SDA从高到低发出一个跳变,便是开始信号;然后就是发送数据。若SDA从低到高再跳变一次就是结束信号。这期间,SCL
发表于 2018-07-15 22:30:09

浅析linux权限管理

“一切皆是文件”是Unix/Linux的基本哲学之一,目录、字符设备、块设备、套接字等在Unix/Linux都是以文件的形式存在。面对众多的文件,如何理解和管理他们的读、写、执行权限呢?在Windows下,可以通过鼠标右击文件,在属性栏查看文件的权限。Linux下的文件“哲学”是否与Windows相同呢?我们从以下几点分析。文件权限设定的作用文件权限的设定是为了保护系统及用户数据的安全性。对于用户来说,最重要的事情就是数据、文件的私密性及安全性。从系统管理员到普通用户,从文件属性到文件特殊加密 ,无不围绕着一个主题:权限管理。若一个关键文件被意外写入,轻则数据丢失,重则系统崩溃。以根目录下的/proc目录文件为例,该文
发表于 2018-06-28 10:44:51
浅析linux权限管理

康佳特与OSADL携手优化 Real-Time Linux 的支持

提供标准和定制化嵌入式计算机板卡与模块的领先供应商—德国康佳特科技,宣布与开源自动化开发实验室(OSADL, Open Source Automation Development Lab) 合作优化对实时Linux的板级支持,并且该板已在OSADL测试机架中展示。首先,OSADL对基于嵌入式服务器等级英特尔® 至强®处理器(E3-1578L v5 @ 2.00 GHz) conga-TS170模块上安装的康佳特最新实时Linux(Linux kernel 4.9.47-rt37)进行认证。该安装在conga-TEVAL评估板上的COM Express Type6 模块在测试中表现非常优异,其中实时性能测试的表现更是出类拔萃,令人
发表于 2018-06-26 09:22:36
康佳特与OSADL携手优化 Real-Time Linux 的支持

linux中S3C2440的物理地址映射到虚拟地址详解

linux-2.6.30.4\arch\arm\plat-s3c\include\plat\ map-base.h    #defineS3C_ADDR_BASE (0xF4000000)  #ifndef __ASSEMBLY__  #define S3C_ADDR(x)  ((void__iomem __force *)S3C_ADDR_BASE+ (x))  #else  #defineS3C_ADDR(x) 
发表于 2018-06-05 20:42:08

基于linux2.6.30.4的s3c2440寄存器的虚拟地址和物理地址的关系

1 想一次修改某个目录下所有文件的权限,包括子目录中的文件权限也要修改,要使用参数-R表示启动递归处理。刚开始学字符设备驱动,感觉最难的是驱动和底层硬件的连接。linux上的驱动程序,是基于操作系统之上的,他并不直接和底层的硬件打交道,但是我们写的驱动必须能使硬件“跑”起来,即与硬件紧密相连。就拿最简单的LED驱动来说,我们的驱动程序是在虚拟的内存上面跑的,但是最终,LED的点亮还是必须靠GPIO管脚的高低电平来控制。那么,我们的虚拟的内存怎么才能和实际的硬件上面的寄存器对应起来呢?这篇要写的就是ioremap这个映射函数,他可以将我们硬件上面的寄存器,映射为虚拟的内存,从而使驱动程序在我们的虚拟的内存中运行
发表于 2018-06-05 20:41:25

可以,这很Linux!第三个Ubuntu版本上架Windows 10商店

在微软打开Linux进入Windows 10的大门后,我们看到了大量的Linux发行版已经上架Windows商店。最新上架的Linux版本是Ubuntu的第三个版本,此前较早的Ubuntu 18.04和16.04 LTS版本已经推出。虽然后来的操作系统安装了它们的特定版本,但新版本简称为Ubuntu,安装最新的操作系统稳定版本。描述如下:此应用程序在Windows上安装最新的Ubuntu LTS稳定版本,第一版本的LTS版本。如果你想要使用特定的LTS版本(例如18.04),该情况下请在Windows上安装特定版本的Ubuntu 18.04应用程序。请注意,该应用程序会更新Ubuntu安装。请升级到新版本。
发表于 2018-06-04 20:18:03
可以,这很Linux!第三个Ubuntu版本上架Windows 10商店

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved