RK3568/RK3588 KVM系统虚拟化解决方案

RK3568/RK3588 KVM系统虚拟化解决方案

buildroot 编译

为啥要用 buildroot

  1. 支持很多:交叉编译工具链、根文件系统生成、内核映像编译和引导加载程序编译。
  2. 使用简单:使用类似内核的 menuconfig、gconfig 和 xconfig配置界面,使用 buildroot 构建基本系统很容易。
  3. 支持很多的包:很多 benchmark 的测试,qemu,kvmtools等都集成在里面。

基本介绍

目录结构

  • config:配置文件
  • dl:下载的软件包
  • output:输出文件
  • package:软件包版本,编译配置信息

配置界面:

主要关注:

  • Target options:用于为构建目标选择特性和配置参数
  • Toolchain:该选项用于配置工具链和编译器特性
  • System configuration:该选项用于配置生成的文件系统的配置文件和启动特性
  • Target packages:该选项用于选择和配置所需要的软件包和软件环境
  • Filesystem images:该选项用于配置经 buildroot 编译构建后的文件系统的镜像格式

虚拟机根文件系统需设置:

配置保存

配置文件作为.config 存储在顶级 buildroot 源目录中。它是一个完整的配置文件,它包含所有选项的值。efconfig 只存储选择了非默认值选项的值,这样更容易阅读、修改,可以用于配置的自动化构建。对于默认的 buildroot 配置,defconfig 是空的,一切都是默认的。

在 configs / 目录下,有许多已经配置好的 *_defconfig,我们可以根据它来生成.config 文件。

复制代码
make *_defconfig

然后再:

复制代码
make menuconfig

它会覆盖当前的.config 文件,如果要保存,则可以使用:

复制代码
make savedefconfig

升级 qemu

默认的 qemu 不支持 cortex-a55,最新的 qemu8.2.0 则支持。

下载最新的 qemu-8.2.0.tar.xz,并把它放入 dl 目录。

修改 package/qemu 目录下的 qemu.mk:

复制代码
QEMU_VERSION = 8.2.0
QEMU_SOURCE = qemu-$(QEMU_VERSION).tar.xz
QEMU_SITE = http://download.qemu.org
QEMU_LICENSE = GPL-2.0, LGPL-2.1, MIT, BSD-3-Clause, BSD-2-Clause, Others/BSD-1c
QEMU_LICENSE_FILES = COPYING COPYING.LIB

并且在 qemu 的编译配置中 (搜索宏 QEMU_CONFIGURE_CMDS),添加编译参数:

复制代码
--disable-hexagon-idef-parser

kernel 编译

配置

复制代码
make ARCH=arm64 CROSS_COMPILE=/home/yue/beauty/proj/rk356x_linux_release_v1.3.0b_20221213/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- menuconfig

选择 KVM:

配置 console:

关联根文件系统:

编译

复制代码
ake ARCH=arm64 CROSS_COMPILE=/home/yue/beauty/proj/rk356x_linux_release_v1.3.0b_20221213/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- j8

输出

  • arch/arm64/boot/Image
  • vmlinux

file 一下发现:

  • Image: Linux kernel ARM64 boot executable Image, little-endian, 4K pages
  • vmlinux: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, BuildID[sha1]=dad4c3147e36034c9cb13a786bd8e238f740504b, with debug_info, not stripped

查看编译信息:

复制代码
SORTEX  vmlinux
  SYSMAP  System.map
  OBJCOPY arch/arm64/boot/Image
  Building modules, stage 2.
  MODPOST 418 modules

编译报错

在编译 buildroot 中的 dtc 库的时候:

复制代码
error:multiple definition of `yylloc'

屏蔽 dtc-parse.tab.c 文件中 1205 行左右的 YYLTYPE yylloc,或者 extern YYLTYPE yylloc:

复制代码
/* The semantic value of the lookahead symbol.  */
YYSTYPE yylval;
/* Location data for the lookahead symbol.  */
//YYLTYPE yylloc
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
  = { 1, 1, 1, 1 }
# endif
;

在编译 buildroot 中的 ctest 库时候:

复制代码
buildroot/output/build/host-cmake-3.8.2/Source/cmServerProtocol.cxx:626:39: error: 'numeric_limits' is not a member of 'std'

此时需要添加头文件引用:

复制代码
#include <stdexcept>
#include <limits>

在编译 qemu 的时候:

复制代码
FAILED: target/hexagon/idef-parser

link meson-generated_idef-parser.tab.c.o libglib-2.0.so: error adding symbols: file in wrong format

使用 file 查看这两个文件发现,一个是 x86,一个是 aarch64

复制代码
--disable-hexagon-idef-parser

信息查看

内核版本

复制代码
cat /proc/version
Linux version 4.19.232 (root@yue-yi-machine) ((HEAD: f7165816db073abb32bfe4f754a317d687c7bbcf) (sdk version: rk356x_linux_release_20230710_v1.3.2f.xml) (gcc version 10.3.1 20210621 
root@RK356X:/#

发行版本

复制代码
cat /etc/issue
Welcome to RK356X Buildroot

CPU 信息:

复制代码
root@RK356X:/# lscpu
Architecture:            aarch64
  CPU op-mode(s):        32-bit, 64-bit
  Byte Order:            Little Endian
CPU(s):                  4
  On-line CPU(s) list:   0-3
Vendor ID:               ARM
  Model name:            Cortex-A55
    Model:               0
    Thread(s) per core:  1
    Core(s) per cluster: 4
    Socket(s):           -
    Cluster(s):          1
    Stepping:            r2p0
    CPU max MHz:         1992.0000
    CPU min MHz:         408.0000
    BogoMIPS:            48.00

另外:cat /proc/cpuinfo 可以查看每一个 CPU 信息。

** 内存信息:** 单位为 MB

复制代码
root@RK356X:/# free -m
               total        used        free      shared  buff/cache   available
Mem:            3837         106        3567           1         163        3690
Swap:              0           0           0

分区信息

复制代码
me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            875M     0  875M   0% /dev
tmpfs           185M  3.0M  182M   2% /run
/dev/mmcblk0p2   29G  4.0G   24G  15% /
tmpfs           924M     0  924M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           924M     0  924M   0% /sys/fs/cgroup
/dev/loop0       58M   58M     0 100% /snap/core20/1614
/dev/loop2       92M   92M     0 100% /snap/lxd/24065
/dev/loop1       62M   62M     0 100% /snap/lxd/22761
/dev/loop3       36M   36M     0 100% /snap/snapd/20674
/dev/mmcblk0p1  253M  121M  132M  48% /boot/firmware
tmpfs           185M     0  185M   0% /run/user/1000

查看是否开启了 KVM:

查看开机信息:

复制代码
[    0.011336] CPU: All CPU(s) started at EL2
[    0.106179] kvm [1]: IPA Size Limit: 44 bits
[    0.107506] kvm [1]: vgic interrupt IRQ9
[    0.107646] kvm [1]: Hyp mode initialized successfully

编译时确认:

如果是 buildroot 编译,可以查看 kernel/arch/arm64/configs 目录下,指定的配置文件是否有 CONFIG_VIRTUALIZATION 宏,如果没有,需要自己配置添加上。

命令查看:

复制代码
zcat /proc/config.gz | grep "CONFIG_VIRTUALIZATION"

得到 shell 输出:

复制代码
CONFIG_VIRTUALIZATION=y
相关推荐
zhang1338308907533 分钟前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
时光找茬2 小时前
【瑞萨AI挑战赛-FPB-RA6E2】+ 从零开始:FPB-RA6E2 开箱测评与 e2 studio 环境配置
c++·单片机·边缘计算
酣大智2 小时前
接口模式参数
运维·网络·网络协议·tcp/ip
24zhgjx-lxq3 小时前
华为ensp:MSTP
网络·安全·华为·hcip·ensp
ling___xi3 小时前
《计算机网络》计网3小时期末速成课各版本教程都可用谢稀仁湖科大版都可用_哔哩哔哩_bilibili(笔记)
网络·笔记·计算机网络
REDcker3 小时前
Linux 文件描述符与 Socket 选项操作详解
linux·运维·网络
Up九五小庞3 小时前
用arpspoof实现100%批量切断192.168.110.10 - 192.168.110.100 断网(双向欺骗)--九五小庞
网络·开源
躺柒3 小时前
读数字时代的网络风险管理:策略、计划与执行04风险指引体系
大数据·网络·信息安全·数字化·网络管理·网络风险管理
独角鲸网络安全实验室4 小时前
本地信任成“致命漏洞”:数千Clawdbot Agent公网裸奔,供应链与内网安全告急
网络·网关·安全·php·漏洞·clawdbot·信任机制漏洞
ai_xiaogui4 小时前
Tailscale实现家庭与公司网络双向通信教程:子网路由配置详解
网络·tailscale·双向通信·子网路由配置详解·tailscale双向互访