字符驱动

2018-04-21  本文已影响0人  飒风灬

//////////////前边主要是说的是杂项设备驱动的注册,下边是字符驱动/////////////////

2018.2.26

申请字符类设备号。

设备号有好多种,今天学的是字符类设备号的申请,字符类设备号分为主设备号,和从设备号,下边的连接里边的东西可以参考一下。

http://blog.sina.com.cn/s/blog_707dde150102wp10.html

设备号申请有两个常用的函数,一个是静态申请register_chrdev_region(),一个是动态申请alloc_chrdev_region(),下边是简单的介绍。

1.头文件

#include 设备函数所在的头文件

#include       MKDEV转义数据设备号类型宏定义

#include 定义字符类设备

2.注册函数说明

静态注册int register_chrdev_region(dev_t from, unsigned count, const char *name)

Form  :要分配设备编号范围的初始值。

Count:连续编号范围 。

*Name:编号关联设备名称

Form用的是  dev_t类型定义,MKDEV(dev_magor, dev_minior);这个函数获得,这个函数有两个参数,一个是主设备号,一个是从设备号。

常见的用法

通过外部传参将参数主从设备号传进去。

打印主从设备号,或得form这个参数,进行设备注册。

动态注册int alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name);

*dev: 返回的设备编号,需要通过MMOR()获取主设备号。

Firstminor: 请求最小的次编号

Count:    请求连续设备编号的总和

*name:    设备名称

简单用法

不写了。

当然还有个行数,设备号卸载函数

unregister_chrdev_region(MKDEV(dev_magor, dev_minior), dev_minor_num);

这个是注销静态申请的,第一个主设备号,第二个连续设备号和。

unregister_chrdev_region(dev_magor,dev_minor_num);

这个是注销动态申请的,第一个主设备号,第二个连续设备号和。

2018.3.2

设备节点已经注册完了,下边写的是字符类设备的注册,在杂项设备中没有涉及到一个class这个类,因为系统已经打包好了,不用我们去管了,但是字符驱动就需要自己去写了。

上边图片就是杂项设备的设备,但是char的都是自己定义了,下边是介绍。

这个是class的结构体

Class类的创建函数   class_create()

第一个参数是owner,一般是 THIS_MODULE

第二个参数苏是name,要定义的class的名称。

下便是使用方式:

struct class *myclass;

myclass = class_create(THIS_MODULE, CLASS_NAME);

开始内存分配void *kmalloc(size_t size, int flags);

头文件#include

Size内存大小

Flags一般常用 GFP_KERNEL

上一篇下一篇

猜你喜欢

热点阅读