Skip to the content.

BMBT 常见问题解答

  1. 为什么不使用 unikernel + QEMU 的方法?
    • 现在 unikernel 的解决方案都是试图将 unikernel 放到虚拟机的 guest 态中运行,无法避免 host 的软件栈
  2. 为什么不基于 captive 开发?
    • captive 自身的代码量非常大, 大约在 10 万行左右
    • captive 需要对于 x86 写对应的 asl 硬件描述语言从而生成自动翻译
    • captive 是通过构建一个 unikernel 在 kvm 中运行,其 unikernel 实现和硬件打交道的方法都是 virtio 。这和我们希望直接在虚拟上运行需求不符合。

一些参考的 hypervisor

裸金属二进制翻译器的架构

显然,一个人在一年的时间内直接写一个系统级二进制翻译器,而且还需要直接运行在裸机上, 这种事情是不可能的。 MagiXen 2 是基于 IA-32 3 开发的,所以我们在想基于什么进行二次开发。

一种想法是基于 Captive 进行开发,但是最后还是选择的是 QEMU ,原因主要是因为:

如何让 QEMU 运行在裸金属上

QEMU 被重构的部分

按照 interface.md 梳理一遍吧

技能清单

使用网络

gnu grub doc

minicom 的使用注意点

如果在 grub 中在 Linux Kernel 的启动项中添加上 console=ttyS0,115200, 那么可以就可以使用串口来获取这个 Kernel 的 dmesg 输出了,调试 3A5000 的时候发现 无法输出 “密码” 两个中文字,使用下面的参数就可以了:

minicom -D /dev/ttyUSB0 -R UTF-8

minicom 无法发送字符,解决方法参考 3,因为 uart 不需要中断的时候同样可以 正常工作(采用 poll ) 模式,所以如果 Guest 的 shell 不能交互,那么应该是 minicom 的配置有问题。

还可以继续开发的事情

From hack to elaborate technique - A survey on binary rewriting

https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_andriesse.pdf

二进制翻译介绍

想要普及一个新的架构是很难的,看看 ARM 的操作:

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。

  1. Kernel Mode Linux ↩

  2. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872051 ↩

  3. https://stackoverflow.com/questions/3913246/cannot-send-character-with-minicom ↩ ↩2