Linux Virtio 子系统核心数据结构解析

Virtio 作为 Linux 虚拟化中前后端通信的核心标准,前文Linux Virtio 驱动框架:架构设计与实现解析解析了整个virtio框架,本文将聚焦 Virtio 子系统的六大核心数据结构,结合代码实现与内存布局,拆解其设计逻辑与核心作用。

1. virtio_bus:虚拟设备的总线基石

virtio_bus是基于 Linux 总线 - 驱动 - 设备模型的虚拟总线,负责管理 virtio 设备与驱动的匹配与生命周期,定义于drivers/virtio/virtio.c

static struct bus_type virtio_bus = {
    .name = "virtio",
    .match = virtio_dev_match,
    .dev_groups = virtio_dev_groups,
    .uevent = virtio_uevent,
    .probe = virtio_dev_probe,
    .remove = virtio_dev_remove,
};
  • 注册机制:通过core_initcall(virtio_init)注册,启动优先级远高于普通模块(module_init对应device_initcall),确保虚拟化环境早期就绪。

  • 匹配逻辑virtio_dev_match函数通过virtio_device_id匹配设备与驱动,需同时满足devicevendor字段,且驱动的id_table必须以device=0结尾终止循环。

  • 核心作用:作为设备与驱动的 "中间人",完成驱动绑定(probe)与解绑(remove)的触发。

2. virtio_device:虚拟设备的身份与配置载体

virtio_device封装了虚拟设备的核心属性与状态,定义于include/linux/virtio.h,是前端设备在内核中的抽象表示。

/**
 * struct virtio_device - Virtio设备核心结构体,封装虚拟设备的属性、状态与操作接口
 * @index: 设备索引,用于区分同一virtio总线上的多个设备实例(如多块virtio-net网卡)
 * @failed: 设备故障标记,标识设备是否初始化/运行过程中出现错误,快速判断设备健康状态
 * @config_core_enabled: 配置核心功能启用标记,内核侧是否允许访问/修改设备配置空间
 * @config_driver_disabled: 驱动侧配置禁用标记,驱动主动禁用设备配置功能(用于管控配置修改场景)
 * @config_change_pending: 配置变更待处理标记,标识设备配置项已变更但未完成处理,防止并发处理配置变更
 * @config_lock: 配置操作自旋锁,保护配置相关字段(如features、config_change_pending)的并发读写
 * @vqs_list_lock: 虚拟队列链表自旋锁,保护vqs链表的增删/遍历操作(防止多线程操作队列链表竞态)
 * @dev: 内核通用设备结构体,将virtio设
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeeplyMind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值