
Linux驱动程序开发之字符设备驱动
dongzi12
choose the one you love and love the one you choose!
展开
-
文件结构体struct file(Linux 2.6.23内核)
struct file结构体定义在/linux/include/linux/fs.h(Linux 2.6.11内核)中,其原型是: struct file { /* * fu_list becomes invalid after file_free is called and queued via * fu_rcuhead for RCU freein转载 2013-04-16 10:18:42 · 920 阅读 · 0 评论 -
Linux字符设备驱动之cdev_init()系列
字符设备驱动之cdev_init()系列函数 1.内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct cdev { 13 struct kobject kobj; 14 struct module *owner; 15 const s转载 2013-04-16 10:57:40 · 622 阅读 · 0 评论 -
Linux字符设备编程(五)之struct class
Linux字符设备编程(五)之struct class 在前面我们已经介绍了两种方法来实现在编写设备驱动程序时由系统自动给我们创建设备文件的方法。现在我们接着讲解第三种方法. 一.前言 内核中定义了struct class结构体,一个struct class 结构体类型变量对应一个类,内核同时提供了class_create()函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创转载 2013-04-16 11:03:46 · 601 阅读 · 0 评论 -
Linux字符设备驱动(一)
Linux字符设备驱动之概述篇 一.概述: 1.在Linux中有一句哲学“Linux下皆文件”。 设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。 但是设备文件和普通文件还是又差别的。 那么设备和普通文件之间又有什么区分呢? 先看看两个图: 普通文件: -rw-r--r-- 1 stell转载 2013-04-16 10:52:43 · 535 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的转载 2013-04-16 16:49:12 · 581 阅读 · 0 评论 -
Linux字符设备驱动(二)
字符设备驱动之结构体 二.字符设备驱动的数据结构 大部分驱动程序操作都涉及到三个重要的内核数据结构,分别是file_operations、file和inode,它们的定义都在 1.file_operations:是一个函数指针的集合 1>应用程序和VFS之间的接口是系统调用,而VFS与磁盘文件系统以及普通设备之间的接口是file_operations结构体成员函数;file_opera转载 2013-04-16 10:54:56 · 706 阅读 · 0 评论 -
字符设备编程(四)之可爱的 misc
字符设备编程(四)之可爱的 misc 在我们前面所学的字符设备编程中,当我们写好字符设备驱动并加载成功后;要使我们所写的驱动层程序和应用层程序之间搭建起通信桥梁,要通过设备节点。 很多时候,我们都是利用 mknod 命令手动创建设备节点;应用层程序通过设备节点 (open(“/dev/globalmem”,O_RDWR)) 和驱动层程序之间进行通话。 注:此处的转载 2013-04-16 11:01:31 · 532 阅读 · 0 评论 -
Linux字符设备驱动(三)
字符设备驱动之体验篇 三.字符设备之编程 通过程序来体验字符设备驱动编程的过程 在Linux系统中,字符设备驱动由如下几个部分组成: (1)字符设备驱动模块加载与卸载函数 (2)字符设备驱动的file_operations结构体中成员函数 file_operations结构体中成员函数是字符设备驱动与内核的接口,是用户空间对Linux进行系统调用最终的实现着。 (3)在字符转载 2013-04-16 10:56:39 · 608 阅读 · 0 评论 -
Linux字符设备驱动之register_chrdev_region()系列
Linux字符设备驱动之 register_chrdev_region()函数系列 1.内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char_device_struct { struct char_device_struct *next; //转载 2013-04-16 10:59:13 · 634 阅读 · 0 评论