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

Halcon 3D点云处理实战:从PLY文件读取到曲面匹配的完整流程(附避坑指南)

本文详细介绍了Halcon在3D点云处理中的完整流程,从PLY文件读取到曲面匹配,特别强调了3D算子的应用技巧和避坑指南。通过实战案例和参数优化建议,帮助开发者高效处理工业视觉检测中的复杂点云数据,提升匹配精度和性能。

weixin_42535720的博客 278

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

IQA图像质量评价 数据集介绍(LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K)

LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K 数据集介绍

qq_37925923的博客 1万+

湿敏电阻HR202的两种驱动方案实测:IO充放电法 vs. 交流方波ADC法,哪个更适合你?

本文深入评测湿敏电阻HR202的两种驱动方案:IO充放电法和交流方波ADC法。通过原理图分析、精度实测和资源占用对比,揭示交流方波ADC法在精度和稳定性上的优势,特别适合长期监测场景。同时提供IO充放电法在资源受限情况下的应用建议,帮助工程师根据项目需求做出最优选择。

weixin_30421809的博客 466

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

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

Mr.W的博客 2249

网络可视媒体的智能计算-胡事民

本文为胡事民教授在山大做报告的笔记,现场见下图: 可视媒体是承载视觉信息的媒体类型,如图像、视频等,它具有网络化、海量和无序涌现等特征。 可视媒体计算的研究意义 可视媒体作为一种信息承载的介质,是用来表达语义信息的。那么就有一种介质与信息之间相互转化的问题。转化方向正反两种,举个栗子说明一下: 1. 可视媒体→→\rightarrow语义信息:比如看到画面,理解其中发生的事件、各主题之...

gdymind的博客 2451

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

最后的框图如下: driver

nanaoxue的专栏 458

STM32按键中断切换红绿蓝灯

通过以上步骤,我们实现了使用STM32的按键中断来切换红绿蓝LED灯的功能。在实际应用中,可能还需要考虑更多的细节,如按键消抖、更精确的延时实现等。但上述代码提供了一个基本的框架和思路,可以根据具体需求进行扩展和优化。希望这篇博客对您有所帮助!

2301_79865940的博客 952

yolov8x-p2 实现 tensorrt 推理

yolov8x-p2, tensorrt 实现.

J。 2273

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

PyTorch生成式人工智能(3)——使用PyTorch构建神经网络

在本节中,我们使用 PyTorch 在简单数据集上构建了一个神经网络,训练神经网络来映射输入和输出,并通过执行反向传播来更新权重值以最小化损失值,并利用 Sequential 类简化网络构建过程;介绍了获取网络中间值的常用方法,以及如何使用 save、load 方法保存和加载模型,以避免再次训练模型。

盼小辉丶的博客 1万+

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

基于 Qt C++ 的 船舶导航系统 UI

你想实现一个基于 **Qt C++** 的 **船舶导航系统 UI**,核心功能包括 **Qt Quick** 电子海图显示和 **NMEA 0183** 协议解析。"断开" : "连接"创建一个 Qt Quick 项目,选择 **Qt 6** 版本,确保勾选 **Qt Quick**、**Qt Network** 和 **Qt SQL** 模块。Label { text: "纬度:" }3. **连接设备**:点击 "连接" 按钮连接到 GPS 设备或模拟数据源。title: "连接设置"

寒寒豆豆软件公司的博客 127

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

mucheni的博客 329

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

深度解析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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【转】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、付费专栏及课程。

余额充值