![](https://img-blog.csdnimg.cn/20181127232029372.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux设备驱动模型
linux驱动的基本模型中最核心的部分分析,kobject、kset、ktype、urvent、atrribute、device、driver、bus、class
奔跑的小刺猬
欲速则不达
展开
-
linux设备模型十四(hotplug和mdev使用)
mdev有两个主要的用途:初始化常用设备和动态更新。这两个用途都要需要内核的sysfs的支持并且需要把sysfs挂载到/sys。对于动态更新来说,你也需要开启内核的热插拔功能。以下是几个典型的代码段,从初始化脚本摘录:[0] mount -t proc proc /proc[1] mount -t sysfs sysfs /sys[2] echo /sbin/mdev &...原创 2019-04-20 14:15:05 · 1781 阅读 · 0 评论 -
linux设备模型十三(mdev原理)
udev 和mdev 是两个使用uevent 机制处理热插拔问题的用户空间程序,两者的实现机理不同。udev 是基于netlink 机制的,它在系统启动时运行了一个deamon 程序udevd,通过监听内核发送的uevent 来执行相应的热拔插动作,包括创建/删除设备节点,加载/卸载驱动模块等等。mdev 是基于uevent_helper 机制的,它在系统启动时修改了内核中的uevnet_...原创 2019-04-18 23:02:56 · 2643 阅读 · 0 评论 -
linux设备模型十二(热拔插hotplug)
我们知道,一个最简单的字符设备驱动应该是下面这个形式。#include <linux/fs.h> #include <linux/init.h> /* 定义一个open函数 */static int first_drv_open(struct inode *inodep, struct file *filep){ return 0;}...原创 2019-04-15 00:24:58 · 2964 阅读 · 0 评论 -
linux设备模型十一(device resource management)
注:本文参考蜗窝大神的文章,采用4.18版本的内核代码来分析http://www.wowotech.net/device_model/device_resource_management.html1. 前言相信每一个写过Linux driver的工程师,都在probe函数中遇到过下面的困惑:要顺序申请多种资源(IRQ、Clock、memory、regions、ioremap、dm...原创 2019-03-09 18:37:57 · 1636 阅读 · 0 评论 -
linux设备模型十(bus_device_driver总结)
前面九章分别对linux驱动模型中的细节部分进行了分析,本节作为小节,使用一个简单的例子,分别使用前面分析的内容,实现一个简单的总线,设备,驱动之间的关系。 实现一条总线#include <linux/device.h>#include <linux/module.h>#include <linux/kernel.h>#include <...原创 2018-11-27 23:10:53 · 2067 阅读 · 0 评论 -
linux设备模型九(class)
1. 概述在设备模型中,bus、device、device driver等等,都比较好理解,因为它们对应了实实在在的东西,所有的逻辑都是围绕着这些实体展开的。而本文所要描述的class就有些不同了,因为它是虚拟出来的,只是为了抽象设备的共性。举个例子,一些年龄相仿、需要获取的知识相似的人,聚在一起学习,就构成了一个班级(Class)。这个班级可以有自己的名称(如295),但如果离开构成它的...原创 2018-08-07 23:37:19 · 2323 阅读 · 0 评论 -
linux设备模型八(bus)
1. 概述在Linux设备模型中,bus(总线)是一类特殊的设备,它是连接处理器和其它设备之间的通道(channel)。为了方便设备模型的实现,内核规定,系统中的每个设备都要连接在一个Bus上,这个Bus可以是一个内部Bus、虚拟Bus或者Platform Bus。内核通过struct bus_type结构,抽象bus,它是在include/linux/device.h中定义的。本文会围绕...原创 2018-08-07 21:59:35 · 4225 阅读 · 0 评论 -
linux设备模型七(device_driver细节)
阅读这篇之前,建议先阅读我的下面这篇博客了解device_driver的数据结构和大概作用。https://blog.csdn.net/qq_16777851/article/details/81429257了解我的下面这篇博客可以对device部分了解清晰。同时,下面用到了device中相同的接口分析,也会略过。https://blog.csdn.net/qq_16777851/ar...原创 2018-08-06 23:04:41 · 5503 阅读 · 0 评论 -
linux设备模型六(device细节)
device相关的操作接口:struct device *device_create(struct class *class, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...);struct device *device_create_vargs(struct class *cl...原创 2018-08-06 00:19:01 · 8189 阅读 · 3 评论 -
linux设备模型五(device和device_driver)
1. 前言device和device driver是Linux驱动开发的基本概念。Linux kernel的思路很简单:驱动开发,就是要开发指定的软件(driver)以驱动指定的设备(device),所以kernel就为设备和驱动它的driver定义了两个数据结构,分别是device和device_driver。因此本文将会围绕这两个数据结构,介绍Linux设备模型的核心逻辑,包括:设备及...原创 2018-08-05 15:50:40 · 8017 阅读 · 1 评论 -
linux设备模型四(attribute)
本博文参考学习自这位博主,其中例子和代码由我添加http://www.wowotech.net/device_model/dm_sysfs.html 1. 前言sysfs是一个基于RAM的文件系统,它和kobject一起,可以将kernel的数据结构导出到用户空间,以文件目录结构的形式,提供对这些数据结构(以及数据结构的属性)的访问支持。sysfs具备文件系统的所有属性,而本文...原创 2018-08-05 03:06:53 · 5523 阅读 · 0 评论 -
linux设备模型三(uevnet)
1. Uevent的功能Uevent是Kobject的一部分,用于在Kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到这样的事件后,会做相应的处理。该机制通常是用来支持热拔插设备的,例如U盘插入后,USB相关的驱动软件会动态创建用于表示该U盘的device结构(相应的也包括其中的kobject),并告知用户空间程序,为该U盘动态的创建/dev/目录下的设备节...原创 2018-08-03 23:42:49 · 4659 阅读 · 0 评论 -
linux设备模型一(基础知识)
1. 前言在上一节中,蜗蜗大神有提到,由于Linux支持世界上几乎所有的、不同功能的硬件设备(这是Linux的优点),导致Linux内核中有一半的代码是设备驱动,而且随着硬件的快速升级换代,设备驱动的代码量也在快速增长。个人意见,这种现象打破了“简洁就是美”的理念,是丑陋的。它导致Linux内核看上去非常臃肿、杂乱、不易维护。但蜗蜗也知道,这不是Linux的错,Linux是一个宏内核,它必须面...原创 2018-08-02 22:02:40 · 9220 阅读 · 2 评论 -
linux内核整体架构
1.前言本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。2.linux内核的核心功能如下图所示,Linux内核只是Linux操作系统一部分。对下,它管理系统的所有硬件设备;对上,它通过系统调用,向Library Routine(例如C...原创 2018-08-02 21:23:54 · 6617 阅读 · 4 评论