blob: d8ad9a2b63b34a6bdf0633e53a9aeeacdc2f380b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# RT-Thread VirtIO 驱动
[English](README.md) | 中文
## 概述
VirtIO 驱动为 RT-Thread 提供虚拟 I/O 设备支持,主要用于 QEMU 等虚拟化环境。
## 支持的版本
驱动现已支持传统版和现代版 VirtIO 规范:
- **传统版 VirtIO (v0.95)**:版本字段为 0x1,兼容较旧的 QEMU 版本
- **现代版 VirtIO (v1.0+)**:版本字段为 0x2,支持 VirtIO 1.0、1.1 和 1.2 规范
## 支持的设备
- **VirtIO 块设备 (virtio-blk)**:虚拟块设备
- **VirtIO 网络设备 (virtio-net)**:虚拟网络接口
- **VirtIO 控制台 (virtio-console)**:虚拟串口控制台
- **VirtIO GPU (virtio-gpu)**:虚拟图形设备
- **VirtIO 输入设备 (virtio-input)**:虚拟输入设备(键盘、鼠标、触摸板)
## 配置
使用 `menuconfig` 配置 VirtIO 支持:
```
RT-Thread Components → Device Drivers → Using VirtIO device drivers
```
### 版本选择
在传统版和现代版 VirtIO 之间选择:
```
RT-Thread Components → Device Drivers → Using VirtIO device drivers → VirtIO Version
```
选项:
- **VirtIO Legacy (v0.95)**:与较旧的 QEMU 版本兼容(默认)
- **VirtIO Modern (v1.0+)**:用于较新的 QEMU 版本(2.4+),具有增强功能
### 设备选择
启用各个 VirtIO 设备:
- `RT_USING_VIRTIO_BLK`:VirtIO 块设备支持
- `RT_USING_VIRTIO_NET`:VirtIO 网络设备支持
- `RT_USING_VIRTIO_CONSOLE`:VirtIO 控制台支持
- `RT_USING_VIRTIO_GPU`:VirtIO GPU 支持
- `RT_USING_VIRTIO_INPUT`:VirtIO 输入设备支持
## 主要区别
### 传统版 VirtIO (v0.95)
- 32 位特性协商
- 单一队列描述符区域
- 简单状态标志
- 客户机页面大小配置
### 现代版 VirtIO (v1.0+)
- 64 位特性协商(支持更多特性)
- 独立的描述符/驱动/设备队列区域
- 增强的状态流程,带 FEATURES_OK 检查
- 更好的内存对齐和原子性保证
## 迁移指南
### 从传统版迁移到现代版
1. 更新 QEMU 命令行以使用现代版 VirtIO 设备(最新的 QEMU 版本默认使用现代版)
2. 在 menuconfig 中更改 VirtIO 版本:
```
RT-Thread Components → Device Drivers → Using VirtIO device drivers → VirtIO Version
→ 选择 "VirtIO Modern (v1.0+)"
```
3. 重新构建应用程序
4. 驱动将自动与设备协商 VERSION_1 特性
### 向后兼容性
驱动从 MMIO 配置中自动检测设备版本,并相应调整其行为。传统版(版本 0x1)和现代版(版本 0x2)设备在同一构建中都受支持。
## BSP 支持
以下 BSP 已更新以支持传统版和现代版 VirtIO:
- `qemu-virt64-riscv`:QEMU RISC-V 64 位
- `qemu-virt64-aarch64`:QEMU ARM64 (AArch64)
## 规范参考
- [VirtIO 规范 v1.2](https://docs.oasis-open.org/virtio/virtio/v1.2/virtio-v1.2.html)(最新,2022)
- [VirtIO 规范 v1.1](https://docs.oasis-open.org/virtio/virtio/v1.1/virtio-v1.1.html)(2019)
- [VirtIO 规范 v1.0](https://docs.oasis-open.org/virtio/virtio/v1.0/virtio-v1.0.html)(2016)
- [OASIS VirtIO 技术委员会](https://www.oasis-open.org/committees/virtio/)
## 许可证
Apache-2.0
|