用Petalinux工具链帮助创建一个最小的Xen系统

描述

问题背景:

在使用 Xen dom0-less 的时候,会有一个问题产生: 可以用 'xl' 命令 boot 起来的 image,在 dom0-less 的情况下却 boot 不起来。

是否有参考例子可以用 Petalinux 工具链帮助创建一个最小的 Xen 系统? 

是否有参考例子可以指导创建一个可以在 dom0_less下boot 起来的最小 DomU Linux image?

解决方案: 

用下面两个 kconfig 选项在任何 ARM64 Linux kernel 下都可以生成 dom0less kernel:

ARM

在 Petalinux kernel 下只需简单用下面这条命令来配置上述两项:

ARM

打开配置界面:

ARM

选择这两个:

ARM

关于 rootfs,任何的 INITRD ("Image Packaging Configuration" -> "Root filesystem type" -> "INITRD") 都可以,没有特殊的要求。当然,越小越好,所以本文建议尽量去掉 rootfs 中的你认为不必要的东西,不需要 Xen 来支持dom0less domU rootfs 或 kernel,所以将其去掉以节省字节空间。

制作好 kernel 和 rootfs 后,就可以用 ImageBuilder 来创建一个可以 boot 的脚本 boot.scr 

这里可以看到 dom0less DomU kernel 和 rootfs 的配置用了NUM_DOMUS=1, DOMU_KERNEL[0] 和 DOMU_RAMDISK[0],关于 MMC 的例子(也适用于其它的应用)

从 Petalinux 2019.1开始且没有修改 xen,比起手动编辑 xen.dtb,使用 ImageBuilder 更不容易出错。

假设 dom0 正在为您引导,那么此次将跳过 dom0 的指令。假设 “xen-Image” 是 dom0 的内核,“xen-root .cpio.gz” 是 dom0 的 rootfs。(可以从预构建的 2019.1 获取 xen-root .cpio.gz,方法是: dd if=xen-root .cpio.gz。U-boot =xen-root .cpio.gz bs=64 skip=1)

另外,作为一种快捷方式,本文没有提供关于如何使用 Petalinux 2019.1 构建 Xen 2021.2 的说明,而是直接从预构建的 2021.2 中获取 Xen 管理程序二进制文件:

ARM

然后修改下面的 ImageBuilder配置文件 "xen.cfg":

ARM

正如您所看到的,我们还需要提供 “Image-domU” 和 “xen-rootfs-domU.cpio.gz”,它们是 domU 的内核和 ramdisk。

domU rootfs
===========
关于rootfs(用root权限):

ARM

增加:

ARM

需要这个的原因是一个 dom0less domU isttyAMA0  (不是 ttyPS0 )的控制台,所以需要在 etc/inittab 中添加一个 getty ttyAMA0 行。

domU kernel
===========
对于 domU 内核,以下步骤应该是足够的:

ARM

增加:

ARM

如果您对上面的命令有问题(已经看到它在这里的几个 Ubuntu 工作站崩溃),可以通过以下步骤实现相同的事情,在 sourcing 2019.1 tools/settings.sh 之后:

ARM

ImageBuilder
============
最后,我们

运行 imagebuilder 如下:

ARM

生成 uboot 脚本 xen_boot.scr, 在 0xC00000 地址加载:

ARM

然后用如下命令开始运行系统:

ARM

之后可以看到两个 domains 开始运行了,并且可以通过 Ctrl-AAA 来在它们之间切换。




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分