首页
学习
活动
专区
工具
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

2K30

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.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    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.9K51

    Linux设备驱动模型-Bus

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

    3.9K20

    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

    58540

    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); 在内核空间执行应用程序

    4.1K41

    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.5K31

    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.2K40

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

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

    2.6K10

    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.7K20

    Linux内核设备驱动内核的时间管理笔记整理

    /****************** * linux内核的时间管理 ******************/ (1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用。...相对于事件驱动而言,内核中有大量函数是基于时间驱动的。 有些函数是周期执行的,比如每10毫秒刷新一次屏幕; 有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务。...(void); /******************** *确定时间的延迟执行 *******************/ 设备驱动程序经常需要将某些特定代码延迟一段时间后执行,通常是为了让硬件能完成某些任务...:用户空间程序调用read函数从设备读数据,但设备中当前没有产生数据。...此时,驱动的read函数默认的操作是进入休眠,一直等待到设备中有了数据为止。 这种等待就是不定时的延迟,通常采用休眠机制来实现。

    2.7K31
    领券