VIRTIO-BLK代码分析(2)VIRTIO驱动分析

这篇具有很好参考价值的文章主要介绍了VIRTIO-BLK代码分析(2)VIRTIO驱动分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        QEMU模拟的VIRTIO设备同时也是PCIE设备,Guest中VIRTIO PCIE驱动与之匹配,根据设备驱动模型,最终触发probe函数virtio_pci_probe()。该probe函数使能PCIE设备,并注册VIRTIO设备,并与VIRTIO-BLK匹配,触发VIRTIO-BLK驱动probe函数。

VIRTIO-BLK代码分析(2)VIRTIO驱动分析,VIRTIO,VIRTIO-BLK

这里涉及两个驱动:VIRTIO-PCI驱动和VIRTIO-BLK驱动。

VIRTIO PCI驱动

作为PCIE驱动,其执行过程基本与其他PCIE驱动步骤类似如下:

  1. 使能PCIE设备pci_enable_device();
  2. 根据force_legacy决定是传统模式还是modern模式,这里不分析传统模式。对于modern模式,通过virtio_pci_modern_probe()将common/isr/notify/device配置空间进行映射。
  3. 设置PCIE master,pci_set_master();
  4. 通过函数register_virtio_device()注册virtio_device;

其中virto_pci_modern_probe()详细过程如下:

VIRTIO-BLK代码分析(2)VIRTIO驱动分析,VIRTIO,VIRTIO-BLK

VIRTIO-BLK驱动

前面VIRTIO PCIE驱动注册virtio_device,根据设备驱动模式,由于加载virtio_driver,最终触发probe函数virtblk_probe()。Probe函数实际上执行block驱动基本操作如下:

  1. 通过函数ida_alloc_range()分配block设置index;
  2. 设置tag_set.ops = &virtio_mq_ops,主要用于IO请求的下发和完成;
  3. 通过函数blk_mq_alloc_tag_set()分配tag_set;
  4. 通过函数blk_mq_alloc_disk()分配disk;
  5. 通过函数blk_queue_max_segments()设置IO请求最大segment;
  6. 通过函数blk_queue_max_hw_sectors()设置IO请求最大sectors;
  7. 通过函数set_capacity_and_notify()设置disk的capacity;
  8. 通过函数device_add_disk()将disk加入到系统中

VIRTIO-BLK代码分析(2)VIRTIO驱动分析,VIRTIO,VIRTIO-BLK

除了上述BLOCK层驱动基本操作外,它会通过init_vq()初始化vblk的virtqueue,它会分配vqs,并设置vq对应的callback函数virtblk_done(),且通过函数vdev->config->find_vqs()设置中断用于通知数据处理完成。

VIRTIO-BLK代码分析(2)VIRTIO驱动分析,VIRTIO,VIRTIO-BLK        该过程分配vqs,并为每个vq分配一个中断,用于通知Guest数据处理完成,中断处理函数最终调用vq->callback(),对于VIRTIO-BLK,调用函数virtblk_done()。同时设置vq,包括设置notify函数,用于通知数据下发完成。文章来源地址https://www.toymoban.com/news/detail-697030.html

到了这里,关于VIRTIO-BLK代码分析(2)VIRTIO驱动分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 滑动奇异频谱分析:数据驱动的非平稳信号分解工具(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 奇异频

    2024年02月14日
    浏览(46)
  • QEMU源码全解析 —— virtio(20)

    接前一篇文章: 上回书重点解析了virtio_pci_modern_probe函数。再来回顾一下其中相关的数据结构: struct virtio_pci_device struct virtio_pci_device的定义在Linux内核源码/drivers/virtio/virtio_pci_common.h中,如下: virtio_pci_modern_probe执行完成后,相关数据结构如下图所示: 回到virtio_pci_probe函数

    2024年02月21日
    浏览(33)
  • 虚拟化技术 — VirtIO 虚拟设备接口标准

    VirtIO 由 Rusty Russell 开发,最初是为了支持自己开发的 lguest Hypervisor,其设计目标是在虚拟化环境下提供与物理设备相近的 I/O 功能和性能,并且避免在虚拟机中安装额外的驱动程序。基于这一目标,后来通过开源的方式将 VirtIO 延伸为一种虚拟化设备接口标准,并广泛的支持

    2023年04月25日
    浏览(46)
  • 视频编解码(一)之virtio-gpu环境搭建

    VA-API Video Acceleration API 是一组开源应用API接口,赋能应用(比如VLC播放器、GStreamer等)使用hardware video acceleration(一般是GPU提供硬件视频加速功能), VA-API主要由开源库libva和一些硬件驱动(通常是GPU厂商提供)来实现的 。 VA-API视频编解码接口独立于平台和窗口系统的,其主要

    2024年02月14日
    浏览(71)
  • 【驱动】I2C驱动分析(三)-关键数据类型

    i2c_bus_type 用于表示 I2C 总线类型。 bus_type 是 Linux 内核中用于表示总线类型的结构体,用于管理该类型总线上的设备。 .name : 用于指定总线类型的名称。在这里,总线类型的名称被设置为 “i2c”,表示 I2C 总线类型。 .match : 匹配设备与总线。 .probe : 用于在设备与总线匹配成功

    2024年01月19日
    浏览(49)
  • TP驱动——I2C驱动,细节分析——dts设备树

    TP驱动程序,是指带屏幕设备的触屏功能调用的驱动程序。TP外设与主板之间的关系如下框图: 产品常用的屏幕单元为液晶显示屏幕,TP的触摸功能也是一同集成到一起的,通过控制芯片以及外围电路、i2c总线与主板进行通信。 TP驱动的功能逻辑: 当有触点发生时,TP芯片向主

    2024年02月04日
    浏览(43)
  • UART驱动情景分析-read

    shell读数据,一开始的时候没有就休眠。数据从串口发送到驱动,驱动接收到中断,驱动读取串口数据,这个数据会传给行规程。 行规程获取到数据后,会回显。按下删除就删除一个字符,按下回车,就返回一个命令。如果找不到就提示找不到命令。 drivers/tty/tty_ldisc.c 搜索它

    2024年02月05日
    浏览(20)
  • Linux中驱动模块加载方法分析

    如何管理驱动模块 由于Linux驱动模块众多,系统对模块加载顺序有要求,一些基础模块在系统启动时需要很早就被加载;开发者加入自己的模块时,需要维护一个模块初始化列表,上面两方面的做起来很困难,为了科学地管理这些模块,首先要解决两个问题: 如何方便开发者

    2024年02月12日
    浏览(39)
  • 几款H桥电机驱动芯片直流有刷电机驱动芯片性能分析

    如果您正在寻找一款高性能、可靠、集成度高、能实现卓越电流控制的H桥电机驱动芯片,那么下面介绍的芯片将是不错的选择。  这一系列芯片具有出色的功耗管理能力,以及多种保护功能,精确的电流检测和监控,能够确保系统的长期稳定运行。 此外,次系列芯片芯片有

    2024年02月12日
    浏览(53)
  • 【Linux驱动】Linux--USB免驱摄像头驱动分析(基于5.4内核)

    【Linux应用】Linux–V4L2摄像头应用编程 【Linux】Linux–V4L2视频驱动框架 【Linux驱动】Linux–虚拟摄像头vivid驱动分析(基于5.4内核) 本文基于Linux 5.4内核,虚拟摄像头驱动文件在 driversmediausbuvc 目录下,本文深入分析了5.4内核下UVC驱动的实现及调用过程。读完本文可以对UVC驱

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包