qemu: 设备虚拟化概述

 

目录

1. 总线类型

2. 总线的创建

3. 设备数据类型

4. 设备的创建

5. 设备树形结构


1. 总线类型

类:BusClass

对象:BusState

类型:TYPE_BUS

TYPE_BUS

bus_info

TYPE_PCI_BUS

BUS 类初始化:bus_class_init

对象实例化函数:qbus_initfn

bus 具现化函数  bus_get_realized

2. 总线的创建

qbus_create_inplace

qbus_create

qbus_realize 只是创建对象,不是真正的具现化

控制器设备具现化的时候device_set_realized 中对总线对象进行真正的具现化

 

3. 设备数据类型

 使用 DeviceClass 表示设备,表示设备具有的共性

DeviceState 具体设备实例,是 TYPE_DEVICE 的实例,表示所有设备都会有的特性

 

4. 设备的创建

两种创建方式:

  1. 跟随主板创建,qdev_create,调用 object_new创建对应设备的QOM对象,然后进行具现化
  2. 通过 -device 或 QMP 中 通过 device_add 添加,qdev_device_add,调用 object_new创建对应设备的QOM对象,然后进行具现化

qdev_create

qdev_try_create

具现化 qdev_init_nofail

qdev_device_add

5. 设备树形结构

树形结构包括设备和总线,起点是系统总线

sysbus_get_default 创建系统总线

main_system_bus_create,名字是"main-system-bus",类型是system_bus_info,挂载该宗县的设备类型都是 TYPE_SYS_BUS_DEVICE,系统根总线,不再任何设备上,该总线不能具现化

以系统总线为起点,根据 总线--> 设备 --> ......总线 --> 设备的关系,形成了一个设备树

 

i440fx_init 创建北桥,Host bridge以及PCI根总线

pci_root_bus_new,类型是TYPE_I440FX_PCI_HOST_BRIDGE, 是北桥

然后qbus_create 创建pci.0总线bus,父设备parent为北桥芯片i440fx_init 中的dev,返回bus,给i440fx_init中的b

pci_root_bus_init

 

i440fx_init 中将北桥设备对象dev 加入到machine下的i440fx对象上

 

i440fx_init 中,创建一个PCI设备,类型是TYPE_I440FX_PCI_DEVICE,在PCI总线b(pci.0)的0号槽位。表示北桥隶属于PCI总线的哪一部分(0号槽位)

i440fx_init 中创建PIIX3设备,挂在总线 b(pci.0)下面

piix3_realize,下面创建总线isa.0

创建各种设备

fw_cfg_init_io_dma

USB 控制器,Host Controller Device HCD

每个 device命令行,调用 device_init_func,里面调用 qdev_device_add 创建设备

qbus_find_recursive

qdev_device_add

qdev_set_parent_bus

bus_add_child

qdev_device_add 实例化设备

device_set_realized

usb_ohci_realize_pci

usb_ohci_init

TYPE_USB_BUS

usb_bus_new 完成USB总线添加

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值