当前位置: 首页 > news >正文

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  vmlinuxSYSMAP  System.mapOBJCOPY arch/arm64/boot/ImageBuilding 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-parserlink 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:            aarch64CPU op-mode(s):        32-bit, 64-bitByte Order:            Little Endian
CPU(s):                  4On-line CPU(s) list:   0-3
Vendor ID:               ARMModel name:            Cortex-A55Model:               0Thread(s) per core:  1Core(s) per cluster: 4Socket(s):           -Cluster(s):          1Stepping:            r2p0CPU max MHz:         1992.0000CPU min MHz:         408.0000BogoMIPS:            48.00

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

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

root@RK356X:/# free -mtotal        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

相关文章:

  • 吉客云ERP集成金蝶ERP(云星空、云星辰、云星瀚、KIS、K3、EAS)
  • 全面解析数据库:从基础概念到前沿应用​
  • 条件语句 if语句 + if...else+switch语句+三元运算符
  • 构建欺诈事件的结构化威胁建模框架
  • Invalid context structure解决Dify框架中图像推理错误:一步步排查与修复指南
  • 软件开发工程师如何在项目开发中了解学习 ISO 13485(2)
  • 编程工具点亮效率之光
  • 中小企业碳账本管理指南
  • 瞬移--BFS+set去重
  • 【DVWA系列】——xss(Reflected)——Medium详细教程
  • sql server连接遇到的问题
  • Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
  • 《Minio 分片上传实现(基于Spring Boot)》
  • LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
  • 第一章 空间解析几何与向量代数 ~ 空间直角坐标系
  • 人工智能100问☞第43问:什么是提示工程(Prompt Engineering)?
  • Python 训练 day46
  • LeetCode - 3. 无重复字符的最长子串
  • 项目管理进阶:解析112页IPD集成产品开发高层培训【附全文阅读】
  • 十一、MySQL 事务底层与高可用原理
  • 网站版块建设/什么软件引流客源最快
  • wordpress定时函数/优化最狠的手机优化软件
  • 个人网站网页首页/网站建设合同模板
  • 网站建站专业/合肥seo网站建设
  • 广东网站备案查询系统/百度首页 百度
  • 建材营销型的网站/推广关键词排名查询