SDK相关内容需要向各板卡厂商获取,这里不对SDK编译烧写过程做解释,直接对我们需要的一些内容做简单罗列
| image | 用于启动root | |
|---|---|---|
| dts | 我们会对设备树进行一些裁剪以方便hvisor启动 | dts可以直接从SDK获取,也可以在启动linux后使用命令获取 |
| dtc -I fs -O dts -o ./extracted.dts /proc/device-tree | ||
| 直接从SDK获取的dts可读性更高 | ||
| 串口地址与型号 | 用于调试hvisor串口 | 对于arm64常见的串口,hvisor已经基本实现了全覆盖,包括imx_uart,pl011,uart_16550(8250)等 |
hvisor配置文件在/path/to/hvisor/platform中,文件目录如下
platform
├── aarch64
│ ├── imx8mp
│ ├── qemu-gicv2
│ ├── qemu-gicv3
│ ├── rk3568
│ │ ├── board.rs
│ │ ├── cargo
│ │ │ ├── config.template.toml
│ │ │ └── features
│ │ ├── configs
│ │ │ └── linux2.json
│ │ ├── image
│ │ │ └── dts
│ │ │ ├── Makefile
│ │ │ ├── rk3568-evb1-ddr4-v10-linux.dts
│ │ │ ├── zone0_rk3568.dts
│ │ │ └── zone1_rk3568.dts
│ │ ├── linker.ld
│ │ └── platform.mk
│ └── zcu102
├── loongarch64
│ ├── ls3a5000
│ └── ls3a6000
├── riscv64
│ ├── qemu-aia
│ └── qemu-plic
└── x86_64
└── qemu
在aarch64下新增一个对应板卡名称的文件夹,这里就是新增rk3568文件夹
board.rs为启动zone0的配置文件,这部分内容在后面详细叙述,这里可以先从qemu里复制一个不改
config.template.toml根据相同架构的文件,只需要修改其中a55/a53字段即可
features中指定了hvisor需要启用的配置,必须添加的项目有uart driver、irqchip driver、cpu、pt_layout_XX四个字段,可选的配置项可以参考cargo.toml中的features。比如rk3568初始的features文件如下
gicv3
uart_16550
rk3568_uart_base
pt_layout_rk3568
a55
linux2.json是启动zone1的配置文件,可以先不填,此文件不影响编译
image中的内容其中dts就是我们在第一步获取的dts,此文件不影响编译
linker.ld直接复制qemu/rk3568的即可,唯一可能需要修改的值是BASE_ADDRESS,这个值是hvisor.bin的load地址,需要和uboot中对应上,第一次启动不改就行
platform.mk直接复制qemu/rk3568的即可,如果前面改里BASE_ADDRESS这里的地址要做同步修改
注意每次修改platform内容后需要make clean再重新编译,否则相关内容不会更新
现在hvisor肯定是编译不通过的,对于aarch64来说,hvisor有自己的页表,该页表在src/arch/aarch64/mmu.rs中实现,我们在features中填的pt_layout_rk3568需要在这个文件中有对应的实现,具体对mmu.rs的实现参考文件
实际上我们只需要关心哪部分是内存包含里串口,并把那部分内存设置为device类型即可,以此为基准参考qemu和rk3568的实现添加一个pt_layout_xx即可。