首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核平台总线设备驱动模型浅析

复习总线设备驱动模型,做了一点小笔记,大牛略过。 一、Linux系统的驱动框架的基础很大一部分是围绕着总线设备驱动模型展开的。...二、涉及3个重要结构体: struct bus_type:总线 struct device :设备 struct device_driver:驱动 三、结构体核心代码分析(2.6.38内核) structbus_type...等)    dev_t           devt;            // 设备号  }; 任何建立在平台总线设备驱动模型基础上的驱动代码(如平台驱动,PCI驱动,USB驱动,I2C驱动,SPI...驱动等),它们的设备结构体(如platform_device, pci_dev,usb_device,i2c_device, spi_device等)都包含一个struct device结构体,当这些驱动内核注册各式各样的设备时...p;  }; 同理,任何建立在平台总线设备驱动模型基础上的驱动代码(如平台驱动,PCI驱动,USB驱动,I2C驱动,SPI驱动等),它们的驱动结构体(如platform_driver, pci_driver

1.9K30

Linux 内核之字符设备驱动

本篇介绍 本篇介绍下如何写字符设备驱动程序。...支持阻塞IO的驱动demo Linux 上的设备类型可以大概分为以下几种: 字符设备:以字节为单位传输,传输率低,不支持随机访问,常见的设备有鼠标,键盘,触摸屏等 块设备: 以块位单位传输,常见的就是磁盘...先看下字符设备的结构 struct cdev { struct kobject kobj; // 用于linux设备驱动模型 struct module *owner; // 字符设备驱动所在的内核模块对象指针...再介绍下misc 设备linux 内核将一些不符合预先确定的字符设备划分为杂项设备,使用的数据结构如下; struct miscdevice { int minor; const char...用户态对设备执行poll或select,设备驱动的poll方法就会被调用,poll会执行以下步骤: 在一个或多个等待队列中调用poll_wait, 该函数会把当前进程加到执行的等待列表中(poll_table

4.8K40
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核设备驱动Linux内核基础笔记整理

Linux内核驱动模块机制 静态加载, 把驱动模块编进内核, 在内核启动时加载 动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载 2....编写内核驱动 #include #include static int __init test_init(void) { return...0; //返回0表示成功, 返加负数退出加载模块 } //__init 当内核驱动初始化完后, 释放此函数的代码指令空间 static void __exit test_exit(void) { ....驱动模块的Makefile obj-m += test.o //源码文件为test.c modules:make -C 内核源码目录 M=驱动代码所在目录 modules modules install...:make -C 内核源码目录 M=驱动代码所在目录 modules_install INSTALL_MOD_PATH=/文件系统路径 clean:make -C 内核源码目录 M=驱动代码所在目录

1.8K51

Linux设备驱动模型-Bus

前言 在linux设备驱动模型中,总线可以看作是linux设备模型的核心,系统中的其他设备以及驱动都是以总线为核心围绕。不过驱动程序员在系统中创建一条总线的机会并不多。...驱动模型中的总线可以是真是存在的物理总线(USB总线,I2C总线,PCI总线),也可以是为了驱动模型架构设计出的虚拟总线(Platform总线)。...为此linux设备驱动模型都将围绕"总线--设备--驱动"来展开,因为符合linux设备驱动模型设备驱动都是必须挂载在一个总线上的,无论是实际存在的或者虚拟的。...数据结构 在详细说明bus开始的时候,先需要说明其数据结构,因为一个好的数据结构,就可以很大程度上了解其功能,内核中使用bus_type代表一个总线。....match: 当一个设备或者驱动添加到此总线上的时候,bus就会调用match对设备驱动一一匹配的。

3.8K20

Linux USB 设备驱动模型

Linux 内核源码:include\linux\usb.h Linux 内核源码:drivers\hid\usbhid\usbmouse.c 1....BUS/DEV/DRV 模型 "USB 接口"是逻辑上的 USB 设备,编写的 usb_driver 驱动程序,支持的是"USB 接口": USB 控制器或 Hub 识别出 USB 设备后,会创建、...注册 usb_device usb_device 被"drivers\usb\core\generic.c" 驱动认领后,会选择、设置某个配置 这个配置下面的接口,都会分配、设置、注册一个 usb_interface...接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。...2.1 pipe 使用这些接口函数的主要目的是传输数据,传输数据的对象是 USB 设备里的某个 endpoint,这被称为 pipe: /* Create various pipes... */ #define

39840

Linux设备驱动模型-Uevent

前言 当一个设备动态的加入到系统时候(比如常见的将U盘插入到PC机器上), 设备驱动程序就需要动态的检测到有设备插入了系统,就需要将此事件通知到用户层,然后用户层对这一事件做响应的处理,比如加载USB驱动...Linux系统对uevent机制的具体实现是建立在设备模型的基础上的,通过kobject_uevent函数实现。 在前面的kset小节中提到了注册一个kset的接口,可以在这里习复下。...cleanup_uevent_env */ } } #endif exit: kfree(devpath); kfree(env); return retval; } uevent_helper机制 目前内核支持两种方式...uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH; #endif CONFIG_UEVENT_HELPER_PATH可以在内核的...__user *const __user *)sub_info->argv, (const char __user *const __user *)sub_info->envp); 在内核空间执行应用程序

4K41

Linux内核设备驱动之高级字符设备驱动笔记整理

(1)ioctl 除了读取和写入设备外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制。比如弹出介质,改变波特率等等。...linux内核采用约定方法为驱动程序选择ioctl号,可以参考include/asm/ioctl.h和Documentation/ioctl-number.txt。...一个ioctl号为32位,linux将其分成4个部分,构建一个ioctl号码所需要的宏都定义在: type 8位幻数。其实就是为你的驱动选定一个号码。...不是所有的设备都支持异步通知,应用程序通常假设只有套接字和终端才有异步通知能力. (5)驱动程序中如何实现异步通知 a.用户空间操作在内核的对应 01.当设定F_SETOWN时,对file->f_owner...03.当数据到达时,由内核发送一个SIGIO信号给所有注册为异步通知的进程 b.在设备结构体中加入fasync_struct的指针 该结构在中定义: struct fasync_struct

3.4K31

linux内核驱动模型详解_arduino驱动安装

转载请标明出处floater的csdn blog,http://blog.csdn.net/flaoter Linux SPI驱动分为核心层,控制器驱动层和设备驱动层。...核心层是Linux的SPI核心部分,提供了核心数据结构的定义,总线、设备驱动的注册、注销管理等,提供与上层的统一接口。...linux将I2C、SPI、USB等总线驱动隔离成控制器驱动设备驱动,使两者相对独立。 本文以qcom的spi控制器为例,对spi控制器驱动进行解析。kernel代码版本是3.18。...linux驱动设备是一对多的关系,在spi_master设备注册时,控制器的结构体信息会提供给spi_master作为私有数据。...,spi控制器还需要注册spi_bus_type的spi_master设备作为spi master,此数据接口是控制器驱动的核心数据结构。

11.1K40

Linux内核的LED设备驱动框架【转】

驱动框架的概念 内核驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,并把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架...即标准化的驱动实现,统一管理系统资源,维护系统稳定。 2. LED设备驱动框架概述 (1)LED设备的共性: 1)LED的亮与灭; 2)具有相应的设备节点(设备文件)。...因此,Linux中LED的驱动框架把所有LED设备的共性给实现了,把不同的地方留给驱动工程师去做。...详见Linux设备管理:sysfs文件系统的功能及其应用。 led_class_attrs结构体数组设置了leds设备类的属性,即led硬件操作的对象和方法。...unregister接口 LED设备驱动框架为驱动开发者LED设备驱动的卸载接口。

2.5K10

Linux内核设备驱动内核的调试技术笔记整理

/****************** * 内核的调试技术 ******************/ (1)内核源代码中的一些与调试相关的配置选项 内核的配置选项中包含了一些与内核调试相关的选项,都集中在...具体的调试选项说明可参见驱动一书,或通过menuconfig的help说明查看。...通常,发送完oops后,内核会处于一种不稳定状态。...在某些情况下,oops会导致内核混乱,而混乱的结果就是死机,这些情况可能包括: *oops发生在持有锁的代码中 *oops发生在和硬件设备通讯的过程中 *oops在中断上下文中发生 *oops发生在idle...进程(0)或init进程(1),因为内核没有这两个进程没法工作 如果oops在其他进程运行时发生,内核会杀死该进程并尝试着继续运行。

2.1K41

Linux内核设备驱动之内存管理笔记整理

/********************** * linux的内存管理 **********************/ 到目前为止,内存管理是unix内核中最复杂的活动。...无论是应用程序还是驱动程序,我们在程序中使用的地址都是虚拟地址。 *物理地址(physical address) 32位无符号整数,与从CPU的地址引脚发送到存储器总线上的电信号相对应。...*满足进程对一般内存区的请求及对文件内存映射的请求 *借助于高速缓存从磁盘及其他缓冲设备获得较好的性能 虚拟内存必须解决的一个主要问题是内存碎片,因为通常内核使用连续的物理内存,所以碎片过多可能导致请求失败...这些特性包括: *一些硬件只能用某些特定的内存地址来执行DMA *一些体系结构其内存的物理寻址范围远大于虚拟寻址范围,这样,就有一些内存不能永久地映射到内核空间 针对这些限制,linux采用了三种区(<...大多数情况下,只有硬件设备需要得到物理地址连续的内存,内核可以使用通过vmalloc获得的内存。

1.6K20

Linux 总线、设备驱动模型的探究

设备驱动模型的需求 总线、设备驱动模型,如果把它们之间的关系比喻成生活中的例子是比较容易理解的。...设备驱动就是基于这种模型去实现彼此隔离不相干的。这里,有的读者就要问了,高内聚、低耦合的软件模型理解,可设备驱动为什么要采用这种模型呢?没错,好问题。...没错,Linux 内核里就是运用了这种设计思想去对设备驱动进行适配隔离的,只不过在内核里我们不叫做适配层,而取名为总线,意为通过这个总线去把驱动和对应的设备绑定一起,如图: ?...基于这种设计思想,Linux设备驱动分为了总线、设备驱动三个实体,这三个实体在内核里的职责分别如下: ?...最底层是不同板子的板级文件代码,中间层是内核的总线,最上层是对应的驱动,现在描述板级的代码已经和驱动解耦了,这也是 Linux 设备驱动模型最早的实现机制,但随着时代的发展,就像是人类的贪婪促进了社会的进步一样

6.4K41
领券