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

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

一、Linux系统的驱动框架的基础很大一部分是围绕着总线设备驱动模型展开的。...二、涉及3个重要结构体: struct bus_type:总线 struct device :设备 struct device_driver:驱动 三、结构体核心代码分析(2.6.38内核) structbus_type...klist_drivers) structdevice {    struct kobject kobj;    const char                          //设备名    struct bus_type...struct device *dev) {    device_initialize(dev);  //做各类初始化    //将设备挂接在对应的总线上,主要工作把设备(device)添加到总线       (bus_type...最终都会调用到: int driver_register(structdevice_driver *drv) {     // 将驱动绑定在对应的总线上,主要工作把驱动(device_driver)添加到总线(bus_type

1.9K30

Linux设备驱动模型-Bus

前言 在linux设备驱动模型中,总线可以看作是linux设备模型的核心,系统中的其他设备以及驱动都是以总线为核心围绕。不过驱动程序员在系统中创建一条总线的机会并不多。...为此linux设备驱动模型都将围绕"总线--设备--驱动"来展开,因为符合linux设备驱动模型的设备与驱动都是必须挂载在一个总线上的,无论是实际存在的或者虚拟的。...数据结构 在详细说明bus开始的时候,先需要说明其数据结构,因为一个好的数据结构,就可以很大程度上了解其功能,内核中使用bus_type代表一个总线。...bus_register(注册一个总线到系统中) int bus_register(struct bus_type *bus) { int retval; struct subsys_private...subsys_virtual_register(在/sys/devices/virtual/下创建一个子系统) int subsys_virtual_register(struct bus_type

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

Linux驱动:你应该先了解驱动模型

[导读] Linux设备林林总总,嵌入式开发一个绕不开的话题就是设备驱动开发,在做具体设备驱动开发之前,有必要对Linux设驱动模型有一个相对清晰的认识,将会帮助驱动开发,明白具体驱动接口操作符相应都做些什么...注:代码分析基于linux-5.4.31 为啥要驱动模型 随着系统结构演化越来越复杂,Linux内核对设备描述衍生出一般性的抽象描述,形成一个分层体系结构,从而引入了设备驱动模型。.../include/linux/Device.h 定义设备驱动主要数据结构 bus_type:抽象描述总线类型,如USB/PCI/I2C/MMC等 device_driver:实现具体连接在总线上的设备驱动...bus_type用以驱动总线,具体的驱动USB/I2C/PCI/MMC等: 注册总线,利用bus_register注册总线,bus_unregister删除总线。...如下例子,每种总线须定义一个bus_type对象,并利用bus_register注册总线,或bus_unregister删除总线。

3.2K10

Linux笔记(20)| Linux的设备模型

//本文主要参考《野火Linux开发指南》 大家好,今天跟大家分享的是在Linux中驱动led。今天的文章包括后面还有一篇是酝酿了近两个星期才开始动手写,可见这部分内容会比较抽象一些。...其实早在之前有一篇关于字符设备驱动的,讲的也是驱动led,大家可以回顾一下:Linux笔记(13)| 字符设备驱动基础入门 Linux笔记(14)| 字符设备驱动基础入门(续) 有朋友可能会产生疑问,...在早期的Linux里面就是像上面那样做的,但是到后来设备越来越多,越来越复杂,维护起来非常不方便,于是发明了设备模型。 那么,设备模型是怎么一回事呢?...然后就是总线的注册和注销: int bus_register(struct bus_type *bus); void bus_unregister(struct bus_type *bus); 2、设备...struct device { const char *init_name; struct device *parent; struct bus_type

3.1K30

linux设备驱动程序注冊过程具体解释

Linux的驱动程序注冊过程,大致分为两个步骤: 模块初始化 驱动程序注冊 以下以内核提供的演示样例代码pci-skeleton.c,具体说明一个pci设备驱动程序的注冊过程。...事实上模块的初始化过程就是这么简单,这也是linux驱动程序的ISO标准流程:module_init–>xx_init_module–>xx_register_driver。...在介绍注冊函数之前,必需要具体说明下linux的总线设备驱动模型,否则以下的内容非常难描写叙述清楚。...linux内核中分别用struct bus_type,struct device和struct device_driver来描写叙述总线、设备和驱动。...事实上在linux内核中,全部设备的驱动的定义,都是以struct device_driver为基类,进行继承与扩展的。你没有看错,内核其中使用了非常多OO的思想。

2.2K20

驱动开发(WDM)

锁 自旋锁,线程不睡眠高效,占用CPU一般用于代码量较少情况 删除锁,避免处理过程中设备被删除,IoAcquireRemoveLock、IoReleaseRemoveLock释放 内核交互 mmap(linux...而每块包含512字节 网络设备 driver注册和注销,int driver_register(struct device_driver *drv) bus注册和注销,bus_register(struct bus_type...device *dev) 驱动安装 静态加载,把驱动程序直接编译进内核,系统启动后可以直接调用,重新下载(源码下载地址:https://www.kernel.org/)和编译内核,效率较低 动态加载,下载linux...内核源码,使用内核工具编译成模块,系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块 linux的三个基本构件是:引导系统(boot loader), linux内核...文件,busybox可以生成最小文件系统 参考 micosoft:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/kernel/ linux

1.2K31
领券