bus_devices_driver

/sys/bus/pci/devices/ 目录结构(PCIe 的“家谱”) 摘要 本文深入解析Linux系统中/sys/bus/pci/devices/目录结构,揭示其作为PCIe设备在内核中的核心管理接口。该目录以BDF格式(如0000:01:00.0)命名,包含设备身份标识(vendor/device)、类型(class)、资源配置(resource)、中断号(irq)等关键信息。重点介绍了config文件(原始配置空间入口)、热插拔操作文件(remove/rescan/reset)和MSI中断目录(msi_irqs/)的实用价值。文中提出"lspci看现象,/sys 阅读详情

驱动 driver:

struct device_driver {
    const char        *name;
    struct bus_type        *bus;  //表示这个驱动属于哪条总线。

    struct module        *owner;
    const char        *mod_name;    /* used for built-in modules */

    bool suppress_bind_attrs;    /* disables bind/unbind via sysfs */

#if defined(CONFIG_OF)
    const struct of_device_id    *of_match_table;
#endif

    int (*probe) (struct device *dev);
    int (*remove) (struct device *dev);
    void (*shutdown) (struct device *dev);
    int (*suspend) (struct device *dev, pm_message_t state);
    int (*resume) (struct device *dev);
    const struct attribute_group **groups;

    const struct dev_pm_ops *pm;

    struct driver_private *p;
};

设备:device
struct device {
    struct device        *parent;

    struct device_private    *p;

    struct kobject kobj;
    const char        *init_name; /* initial name of the device */
    struct device_type    *type;

    struct mutex        mutex;    /* mutex to synchronize calls to
                     * its driver.
                     */

    struct bus_type    *bus;        /* type of bus device is on,表示这个设备连在哪条总线上*/
    struct device_driver *driver;    /* which driver has allocated this device,表示这个设备用的是哪个驱动 */
    void        *platform_data;    /* Platform specific data, device
                     core doesn't touch it */
    struct dev_pm_info    power;

#ifdef CONFIG_NUMA
    int        numa_node;    /* NUMA node this device is close to */
#endif
    u64        *dma_mask;    /* dma mask (if dma'able device) */
    u64        coherent_dma_mask;/* Like dma_mask, but for
                     alloc_coherent mappings as
                     not all hardware supports
                     64 bit addresses for consistent
                     allocations such descriptors. */

    struct device_dma_parameters *dma_parms;

    struct list_head    dma_pools;    /* dma pools (if dma'ble) */

    struct dma_coherent_mem    *dma_mem; /* internal for coherent mem
                     override */
    /* arch specific additions */
    struct dev_archdata    archdata;
#ifdef CONFIG_OF
    struct device_node    *of_node;
#endif

    dev_t            devt;    /* dev_t, creates the sysfs "dev" */

    spinlock_t        devres_lock;
    struct list_head    devres_head;

    struct klist_node    knode_class;
    struct class        *class;
    const struct attribute_group **groups;    /* optional groups */

    void    (*release)(struct device *dev);
};

总线:bus
struct bus_type {
    const char        *name;
    struct bus_attribute    *bus_attrs;
    struct device_attribute    *dev_attrs;
    struct driver_attribute    *drv_attrs;

    int (*match)(struct device *dev, struct device_driver *drv);
    int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
    int (*probe)(struct device *dev);
    int (*remove)(struct device *dev);
    void (*shutdown)(struct device *dev);

    int (*suspend)(struct device *dev, pm_message_t state);
    int (*resume)(struct device *dev);

    const struct dev_pm_ops *pm;

    struct bus_type_private *p;
};



        
RK3399平台开发系列讲解(内核入门篇)1.10、bus_type、device、device_driver结构体的关系 一、数据结构 1、bus_type 2、device_driver 3、device 二、总线,驱动和设备的关系 阅读详情

相关推荐

手把手教你学pcie-/sys/bus/pci/devices/ 目录结构(PCIe 的“家谱”)

*是 PCIe 设备在 Linux 中的“家谱 + 控制台 + 调试入口”,所有 lspci、驱动、热插拔、电源管理,最终都落脚到这里。**

MHD0815的博客 23

驱动中bus,devices,driver注册的先后顺序

kernel最后在start_kernel的函数中最后调用rest_init()进行设备驱动相关的初始化,下面具体分析。

月出皎兮。 佼人僚兮。 舒窈纠兮。 劳心悄兮。 2064

从零开始:手把手教你规划与部署华为FusionCompute虚拟化平台(含网络规划避坑指南)

本文详细介绍了华为FusionCompute虚拟化平台的规划与部署流程,特别针对网络规划中的常见问题提供了避坑指南。从硬件软件清单检查、网络平面配置到VRM部署方案选择,帮助用户高效完成部署并优化性能,适用于云计算环境中的虚拟化平台搭建。

weixin_28693447的博客 243

driver_register源码研究

device_driver结构体是Linux设备模型中驱动的核心数据结构,包含probe、remove、of_match_table等关键字段,用于匹配和管理设备。其driver_private字段分离了私有数据与对外接口,通过klist_devices维护已绑定设备链表,支持线程安全遍历。注册时,driver_register调用bus_add_driver完成驱动添加:分配私有数据、挂载至总线klist、创建sysfs文件(如bind/unbind),并触发KOBJ_ADD事件。通过kobj关联模块和总

blueSatchel的博客 445

OCR开发实战:如何用PaddleOCR C++版实现本地文字识别(附模型文件处理技巧)

本文详细介绍了如何使用PaddleOCR C++版实现本地文字识别,包括环境搭建、工程编译、运行时优化等全流程。重点讲解了在VS2019/VS2022环境下配置PaddleOCR的CPU推理性能优化技巧,以及模型文件处理的实际应用方法,帮助开发者高效完成OCR本地化部署。

devops8pract的博客 335

不用标注数据!用SAM 3零成本搞定遥感图像分割:SegEarth-OV3保姆级上手教程

本文介绍了如何利用SAM 3和SegEarth-OV3实现零标注遥感图像分割,提供从环境配置到结果优化的完整教程。通过开放词汇语义分割技术,用户无需标注数据即可快速获得专业级分割结果,适用于光伏板统计、灾害评估等场景。

weixin_30415113的博客 586

rk3399下iic驱动方式一 -----Bus-devices-driver

先简要说明一下东西, 板子是rk3399的板子,跑的安卓系统,安卓7.1,由于板载一块音频编解码芯片,正好可以支持iic接口,于是就尝试读取他的Device ID 0x6281 寄存器地址0xff,内核文档下kernel\Documentation\iic目录下有iic相关的文档说明该内核版本下相对上一版本(iic的版本)改动的说明,该目录下upgrading-clients文件中有说明, U...

Mr.W的博客 2249

手把手教你用STM32F103实现CAN总线双机通信(基于CubeMX+HAL库)

本文详细介绍了基于STM32F103和STM32CubeMX工具实现CAN总线双机通信的完整流程。文章重点解析了CAN总线在嵌入式物联网应用中的优势,并深入讲解了波特率计算、过滤器配置、接收中断处理等关键细节,提供了实用的代码框架和可靠传输方案,帮助开发者规避常见陷阱,构建稳定的工业级通信系统。

weixin_29193259的博客 480

platform设备和驱动的注册(3)

最后的框图如下: driver

nanaoxue的专栏 458

基于Qt实现的轻量级CAD画图软件

基于Qt开发的轻量级CAD应用程序

weixin_44954230的博客 5659

USC EE450 CSCI455 CSCI571 Midterm 总结

EE450 Compter Network                1.历年Midterm考题。(更新至2017年spring,如果大家有新的资源欢迎编辑)                 google drive:https://drive.google.com/drive/folders/0B_LCDxpiiXZ1cUNReFpZZHo4NG8?usp=sharing

Small_hour 7112

Open /sys/bus/pci/devices/0000:01:00.0/driver/unbind failed. err 13 (Permission denied)

[longyu@debian-10:07:29:41] dpdk $ su -c ‘echo test > /sys/bus/pci/drivers/virtio-pci/test’

龙瑜的博客 6213

oracle合并行---解决listagg 拼接字段返回过长 (Ora-01489 result of String concatenation is too long)

oracle合并行---解决listagg 拼接字段返回过长 (Ora-01489 result of String concatenation is too long)

清影的博客 6283

Linux driver model & sysfs

1. Linux driver initialization flow. In kernel/init/main.c kernel_init --> kernel_init_freeable --> do_basic_setup --> driver_init (In kernel/driver/base/init.c) In kernel/driver/base/init.c

WangMark的专栏 567

YOLOv11改进-上采样 | EUCB高效上卷积块,实现特征图尺度匹配和高效上采样

本文介绍了一种在YOLOv11目标检测模型中引入高效解码器模块EMCAD的创新方法,以提升模型在资源受限场景下的性能与效率。EMCAD由多个模块构成,其中核心的EUCB(高效上卷积块)通过上采样、深度可分离卷积、激活归一化和通道调整等操作,兼顾了特征质量与计算成本。实验结果显示,该模块在显著减少参数与FLOPs的同时仍具备优异性能。文章还提供了完整的YOLOv11模型集成流程、配置和训练实战。

魔改工程师的博客 1540

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

迅为i.MX6ULL开发板I2C总线实现driver驱动

我们在 Ubuntu 的/home/topeet/driver/imx6ull/40i2c 目录下新建一个 driver.c 文件,拷贝前面实验的。用 i2c_board_info 这个结构体来描述我们的 i2c 设备,如果我们用设备树的方法来实现,我们直接在设备树。在加载驱动之前,我们要恢复设备树文件中我们之前章节注释掉的节点,重新编译设备树内核,然后再烧写镜像。后面的实验我们都用设备树的,非设备树的方法了解一下。/* i2c 驱动的 remove 函数 */// 采用设备树的时候驱动使用的匹配表。

mucheni的博客 329

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深度解析bus_register:Linux设备模型总线上户口与sysfs目录构建

Linux内核设备驱动模型通过统一抽象管理总线、设备与驱动,其中sysfs作为内核对象模型对外窗口,直观呈现设备层次关系。总线注册函数bus_register负责将总线纳入该框架,完成kset/kobject初始化、sysfs目录创建以及uevent机制接入。理解这一过程,有助于把握设备与驱动自动匹配及probe触发的底层逻辑,对调试驱动挂载失败、sysfs属性缺失等问题提供根因定位思路。文章从bus_type结构、subsys_private管理到devices/drivers目录生成,结合PCI、I2C

weixin_31960565的博客 269

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【转】Linux那些事儿之我是U盘(8)总线,设备,和驱动(上)

struct bus_type中为devices和drivers准备了两个链表,而代表device的结构体struct device中又有两个成员,struct bus_type *bus和struct device_driver *driver,同样,代表driver的结构体struct device_driver同样有两个成员,struct bus_type *bus和struct list_

aaronychen的专栏 707

一文解析系统中设备驱动管理sysfs文件系统

sysfs是非持久性虚拟文件系统,它提供系统的全局视图,并通过它们的kobiect显示内核对象的层次结构(拓扑)。每个kobiect显示为录和目录中的文件,目录代表相关kobject导出的内核变量。这些文件称为属性,可以读取或写入。如果任何已注册的kobiect在sysfs中创建目录,则目录的创建位置取决于kobiec的父项(它也是kobiect)。这些目录自然创建为kobject父项的子目录。这向用户空间出显示了内部对象的层次结构。sysfs 中的顶级目录表示对象层次结构的共同祖先,即对象所属的子系统。

youzhangjing_的博客 898

platform框架

1.platform_device结构体 struct platform_device { const char * name;/* 设备名 */ u32 id; struct device dev; u32 num_resources;/* 设备所使用各类资源数量 */ struct resource * resource;/* 资源 */ }; 设备的分配: stru

技术小窝 962

Linux设备模型初始化

Linux设备模型初始化 Linux设备模型的最高层是subsystem,Linux中是利用decl_subsys和decl_subsys_name宏定义subsystem变量的,这两个宏的实现如下: #define decl_subsys(_name,_type,_hotplug_ops) struct subsystem _name##_subsys = { .kset = { .kob...

Jason_Linux 439

泰山派3M-RK3576-Linux内核驱动教程-Linux驱动基础-设备模型与sysfs-sysfs概念

sysfs是Linux 内核为设备模型专门设计的一个虚拟文件系统。它将内核中的设备、总线、驱动程序等对象,以文件和目录的形式展现在用户空间,通常挂载在/sys目录下。sysfs 并不存储数据,而是实时反映内核设备模型的结构和状态。sysfs = “把内核设备组织,通过树形文件结构暴露给用户空间!

LCKFB的博客 24

Linux那些事儿之我是U盘(8)总线,设备,和驱动(上)

struct bus_type中为devices和drivers准备了两个链表,而代表device的结构体struct device中又有两个成员,struct bus_type *bus和struct device_driver *driver,同样,代表driver的结构体struct device_driver同样有两个成员,struct bus_type *bus和struct list_...

dato0123 72

3.0.35 platform 总线、设备与驱动

在该内核的设备驱动模型中,关心总线、设备和驱动这三个实体。 在系统每注册一个设备的时候,由总线寻找与之匹配的驱动;在系统每注册一个驱动的时候,会由总线寻找与之匹配的设备。 一个现实的linux设备和驱动通常都需要挂载在一种总线上,对于本身依附于PCI,USB,I2C,SPI等的设备而言,这不是问题 但在嵌入式系统中,SoC系统中集成了独立的外设控制器,集成于SoC中的外设却不依赖于这类...

weixin_30437847的博客 114

switch_class

switch 类 1. init/exit: static int __init switch_class_init(void) { return create_switch_class(); //新建一个switch类 } static void __exit switch_class_exit(void) { class_

927
上一篇: printk 参数
下一篇: pid_uid_gid
lamdoc
博客等级 码龄18年 155粉丝 655原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值