关闭

字符设备驱动编写方法

256人阅读 评论(0) 收藏 举报
分类:

字符设备驱动编写方法


1.标准字符设备驱动
  a.注册设备号 如   
if(key_major) /*静态注册*/
        err = register_chrdev_region(devno, 1, DEVICE_NAME);
    else
    {    /*动态注册*/
        err = alloc_chrdev_region(&devno, 0, 1, DEVICE_NAME);
        key_major = MAJOR(devno);
    }
 

 b.内存申请给cdev(当cdev定义为指针时)然后调用以下函数进行设备初始化并添加该设备

void cdev_init(struct cdev *cdev, const struct file_operations *fops)
int cdev_add(struct cdev *p, dev_t dev, unsigned count)

 

c.如需在/dev下自动创建设备,需调用如下函数

struct class *key_class = class_create(THIS_MODULE, name);
struct device *device_create(struct class *class, struct device *parent,dev_t devt, void *drvdata, const char *fmt, ...)
 

*classs 就是class_create返回的key_class;parent如没有就设为NULL;devt设备号;drvdata 如无就为NULL,后面的就是设备名称。也可调用mknod 手动创建设备节点。

自此设备已经成功添加,一下的工作就时完成file_operations中相应函数就好了。

2.混杂模式设备驱动

只需在模块初始化和退出时调用以下函数即可完成设备的注册,设备节点创建等一系列工作,此模式下的主设备号为10

int misc_register(struct miscdevice * misc)
int misc_deregister(struct miscdevice *misc)
struct miscdevice {
 int minor;   /*次设备号*/
 const char *name; /*设备名称 */
 const struct file_operations *fops;
 struct list_head list;
 struct device *parent;
 struct device *this_device;
};
 

剩下的工作就是完成file_operations中的相应函数功能。

3.plat_form平台下的驱动
  利用platform机制开发设备驱动的流程 :定义platform_device--注册platform_device--定义platform_driver--注册platform_device。对于系统已经注册过的设备就只需实现后两步就可以了,但是在注册的设备名字 和注册的驱动名字一定要相同,否则不会注册成功。当platform总线匹配到总线上注册的设备和驱动后,就会调用platform_driver 上的probe函数(此时总线的probe函数为NULL)。在probe中可以获取设备的内存资源和中断资源。所有这些操作完成后 就是完成其一些file_operations的操作,然后将其定义为字符设备或混在设备等,在/dev创建其对应的设备文件。(为什么这么做还没有搞懂)应用程序就可以通过open对其操作了。


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

字符设备驱动编写流程以及大概框架

本文主要是针对Linux的字符设备驱动,Linux设备驱动中字符设备驱动的注册类型与注册方式 字符设备是Linux驱动中最简单的驱动,也是最常的驱动! 字符设备驱动除了注册为字符设备类还可以注册为混杂设备类 字符设备可以动态注册也可以静态注册
  • softwoker
  • softwoker
  • 2015-04-18 14:40
  • 2647

练习1-19 编写函数 reverse(s),将字符串s 中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。

练习1-19 编写函数 reverse(s),将字符串s 中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。自己的:思路最开始的思路是在函数里新建一个字符数组,将输入的数组反过来存进这个新的数组里,再将新数组里的值赋到原数组中。源代码#include<stdi...
  • u013289703
  • u013289703
  • 2016-09-23 17:58
  • 719

Linux 字符设备驱动开发--内存读写操作

学习Linux的累计时间已经有两年多了,工作关系,学习的过程总是断断续续的,现在整理一下,下面要分享的是一个简单的linux驱动程序,没有什么实际的用处,像hello wold!程序一样,我们简单体会一下linux驱动程序的特点,Linux设备驱动程序开发第三版是一本不错的参考书,讲的比较详细,值得...
  • jc70100322
  • jc70100322
  • 2015-11-08 22:20
  • 1482

请编写一个函数,它在一个字符串中进行搜索,查找所有 在一个给定字符集合中出现的字符。

/**************************************** * File Name : find_char.c * Creat Data : 2015.1.20 * Author : ZY *******************************...
  • qaz3171210
  • qaz3171210
  • 2015-01-20 23:19
  • 1429

linux设备驱动第三篇:写一个简单的字符设备驱动

在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存。 下面就开始学习如何写一个简单的字符设备驱动。首先我们来分解一下字符设备驱动都有那些结构或者方法组...
  • HAOMCU
  • HAOMCU
  • 2015-03-28 19:05
  • 23962

一个简单的字符设备驱动程序和测试程序

------------------------字符设备驱动程序------------------------------ #include  #include  #include  #include  #include  #i...
  • howhot2008
  • howhot2008
  • 2015-11-09 13:48
  • 1100

算法--字符串压缩

问题:字符串压缩算法:利用字符重复出现的次数,实现基本的字符串压 缩算法,比如aabbbccceeee变为a2b3c3e4,压缩后的字符串没有变短,则返回原来的字符串(这里指的是abcdef,这样就会变为a1b1c1d1e1f1。 思路: 1,先比较压缩后字符串的长度。 ...
  • young_so_nice
  • young_so_nice
  • 2016-04-01 16:46
  • 1751

驱动程序-字符驱动

参考http://www.kerneltravel.net/?p=334 一、编写内核文件chardev.c /*chardev.c*/ #include #include /*for file-f_op*/ #include #include ...
  • gjq246
  • gjq246
  • 2016-06-30 22:42
  • 482

字符设备驱动开发流程详解

字符驱动相关概念解析 一、驱动初始化 1.1分配设备描述结构 1.2初始化设备描述结构 1.3.注册设备描述结构 1.4.硬件初始化 二、实现设备操作 2.1open 2.2read 2.3.write 2.4.lseek 2.5cl...
  • liu0808
  • liu0808
  • 2016-11-15 09:37
  • 1087

字符串中字符移动的题目

一、题目要求 编写一个函数,根据用户定义字符串和需要移动字符的位数n,将该字符串从右边起n个字符顺序不变的放在该字符串的前面。例如:将 helloworld 右移两位为 ldhellowor  . 二、问题分析 首先这个函数是有两个参数,字符串str和移动位数n。我在这里的思路是:先计算出...
  • chenx_IU
  • chenx_IU
  • 2016-07-28 18:56
  • 766
    个人资料
    • 访问:113621次
    • 积分:2048
    • 等级:
    • 排名:千里之外
    • 原创:91篇
    • 转载:52篇
    • 译文:0篇
    • 评论:10条
    最新评论