一、字符设备驱动函数接口 1.初始化cdev结构体void cdev_init(struct cdev * cdev, const struct file_operations * fops)功能:初始化cdev结构体参数:@cdev cdev结构体 @fops 操作函数的结构体 2.申请设备号in ...
分类:
其他好文 时间:
2016-11-27 07:49:59
阅读次数:
200
一 动态注册设备号 int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,const char *name)参数:@dev 获得动态设备号 @baseminor 第一个次设备号@count 此设备号的个数@nam ...
分类:
其他好文 时间:
2016-11-25 00:35:08
阅读次数:
146
LCD驱动也是字符设备驱动,也遵循字符设备驱动的流程: a. 分配主设备号 b. 构建file_operations结构体中的open,write,read...等函数 c. 调用register_chrdev()函数注册字符设备 d. 调用class_register()注册类 e. 调用devi ...
分类:
其他好文 时间:
2016-11-19 12:50:08
阅读次数:
335
在内核中,dev_t类型用来保存设备编号——包括主设备号和次设备号。内核内部使用struct cdev结构来表示字符设备。 根据设备编号获取主设备号和次设备号: 根据主设备号和次设备号得到设备编号: 分配和释放设备编号: inode数据结构中有类型为dev_t的i_rdev字段,当inode指向的是 ...
分类:
其他好文 时间:
2016-11-14 17:39:16
阅读次数:
200
首先需要明白的一点是:一个硬件对应一个驱动,对应一个设备文件(/dev/),用来描述这个设备,将来应用程序就是通过这个设备文件来找到这个驱动。1:设备号=主设备号+次设备号主设备号标识的是设备的驱动告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务..
分类:
其他好文 时间:
2016-11-14 02:43:14
阅读次数:
115
一、核心数据结构 串口驱动有3个核心数据结构,它们都定义在1、uart_driver uart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver)。 1: struct uart_driver { ... ...
字符设备注册步骤: 1.分配cdev结构体 2.分配设备号,register_chrdev_region()/alloc_chrdev_region(); 3.添加设备到系统,cdev_add(); 字符设备注销步骤: 1. 从系统中删除设备,cdev_del(); 2. 释放设备号,unregis ...
分类:
其他好文 时间:
2016-11-06 11:49:39
阅读次数:
313
字符设备驱动程序 应用程序是调用C库中的open read write等函数。而为了操作硬件,所以引入了驱动模块。 构建一个简单的驱动,有一下步骤。 1. 创建file_operations 2. 申请设备号 3. 注册字符设备驱动, 4. 驱动入口 5. 驱动出口 检查数据是否到来的方式: 1. ...
分类:
系统相关 时间:
2016-11-05 18:08:19
阅读次数:
287
前一篇对cdev结构体及初始化做了简单介绍。 Linux内核有两个分配设备号的函数 1 /** 2 * register_chrdev_region() - register a range of device numbers 3 * @from: the first in the desired ...
分类:
其他好文 时间:
2016-11-05 11:31:50
阅读次数:
219
在Linux内核中使用cdev结构体来描述字符设备,通过其成员dev_t来定义设备号(分为主、次设备号)以确定字符设备的唯一性。通过其成员file_operations来定义字符设备驱动提供给VFS的接口函数,如常见的open()、read()、write()等。 用户空间访问该设备的程序通过Lin ...
分类:
其他好文 时间:
2016-10-06 22:17:02
阅读次数:
260