Qemu 支持 ARM(以及许多其他平台)。那么,在 qemu 上安装 Apple iOS 需要什么(除了安装介质之外)?有没有办法创建适合 Qemu 的 iOS 镜像?
更新:
苹果 A4 = Cortex-A8 + PowerVR SGX535
苹果 A5 = Cortex-A9 MPCore + PowerVR SGX543MP2
两个 Cortex 均使用 Qemu 支持的 ARM v7 指令集。问题是:
我试图在 QEMU 虚拟机运行时关闭虚拟核心。
为此,我需要使用qemu_cpu_kick()cpus.c 中的函数:
void qemu_cpu_kick(CPUState *cpu)
{
qemu_cond_broadcast(cpu->halt_cond);
if (!tcg_enabled() && !cpu->thread_kicked) {
qemu_cpu_kick_thread(cpu);
cpu->thread_kicked = true;
}
}
Run Code Online (Sandbox Code Playgroud)
它运行良好 - 仅当我启用 KVM 时。但是,我需要禁用 KVM,一旦禁用 KVM,该tcg_enabled()函数就会返回 true,并且 cpu 不会关闭。
可以禁用TCG吗?
我没有找到任何关于 TCG 的旋钮;--disable-tcg以及其他试验都不起作用。我尝试使用 重新配置我的编译--disable-tcg-interpreter,但仍然没有任何变化。
那么,如何禁用 TCG 呢?或者,有没有更好的方法来关闭虚拟CPU?
谢谢!
我正在尝试在我的 Mac 上安装 qemu。我用的是Homebrew,看起来已经安装成功了。
\n\n==> Installing qemu\n==> Downloading https://homebrew.bintray.com/bottles/qemu-2.6.0.el_capitan.bottle.tar.gz\n######################################################################## 100.0%\n==> Pouring qemu-2.6.0.el_capitan.bottle.tar.gz\n /usr/local/Cellar/qemu/2.6.0: 123 files, 127.4M\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我尝试使用它时,我有:
\n\n-bash: qemu: command not found\nRun Code Online (Sandbox Code Playgroud)\n\n的输出ls /usr/local/Cellar/qemu/2.6.0/bin是:
| \xe2\x88\xae -> ls /usr/local/Cellar/qemu/2.6.0/bin\nivshmem-client qemu-system-aarch64 qemu-system-lm32 qemu-system-mips64 qemu-system-ppc qemu-system-sh4eb qemu-system-x86_64\nivshmem-server qemu-system-alpha qemu-system-m68k qemu-system-mips64el qemu-system-ppc64 qemu-system-sparc qemu-system-xtensa\nqemu-img qemu-system-arm qemu-system-microblaze qemu-system-mipsel qemu-system-ppcemb qemu-system-sparc64 qemu-system-xtensaeb\nqemu-io qemu-system-cris qemu-system-microblazeel qemu-system-moxie qemu-system-s390x qemu-system-tricore\nqemu-nbd qemu-system-i386 qemu-system-mips qemu-system-or32 qemu-system-sh4 qemu-system-unicore32\nRun Code Online (Sandbox Code Playgroud)\n\n我现在的问题是 qemu 文件丢失。我仍然想知道为什么以及如何解决它
\n\n先感谢您。
\n我正在尝试使用 Yocto 的 sdk 工具交叉编译 Yocto qemu 程序。设置 sdk 并获取它后,尝试交叉编译程序失败,因此:
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
Run Code Online (Sandbox Code Playgroud)
因此,我将其添加ncurses到IMAGE_INSTALL图像配方中的列表中,就像我安装了 dropbear 等其他软件包一样,并确认meta提供这些软件包的层已包含在bblayers.conf文件中。然后
TOOLCHAIN_HOST_TASK += "nativesdk-ncurses nativesdk-ncurses-dev"
Run Code Online (Sandbox Code Playgroud)
还被添加到图像的配方中,以告诉 bitbake 为主机的 sdk 提供对 ncurses 的访问权限。我尝试添加几个变体nativesdk-ncurses-devel,以更接近地匹配错误所要求的内容,但图像无法用它来构建。之后,重新构建了镜像和sdk并重新获取了源代码,但在尝试交叉编译程序时,它仍然要求Install ncurses (ncurses-devel) and try again.
所以我的问题是:
ncurses如何正确添加到Yocto的主机sdk环境中?我缺少一个步骤吗?所需的 ncurses 文件与层中找到的文件不一样吗meta?
任何帮助将不胜感激。
-补丁
我试图通过深入了解操作系统的低级细节来学习它。我现在上的课程是MIT 6.828 操作系统工程。实验室要求学生进入 BIOS 以获取一些说明。BIOS 的前三个汇编指令如下:
0xffff0: ljmp $0xf000,$0xe05b
0xfe05b: cmpl $0x0,%cs:0x6c48
0xfe062: jne 0xfd2e1
Run Code Online (Sandbox Code Playgroud)
我想不通的是第二个:cmpl $0x0,%cs:0x6c48. 它有什么作用?为什么需要这个条件才能jmp到特定的地方?我在网上搜索了一段时间,但仍然找不到解释。更棘手的是,我发现不同的人会得到不同的地址来进行比较,比如0x6ac8,0x65a4或者0x6c48这里。
我正在尝试.qcow2在 Mac OS X 中运行我的映像qemu-system-x86_64,它在我的 Debian 机器上运行得非常好,但由于内存问题,我需要将其移动到 Mac OS X Catalina 机器上。我安装qemu-system-x86_64通过brew,然后当我启动我的机器时
qemu-system-x86_64 \
> -m 8G \
> -vga virtio \
> -show-cursor \
> -usb \
> -device usb-tablet \
> -enable-kvm \
> -drive file=/Volumes/enricoWD/transfer_home_laptop/dxcator_home_backup_feb2020/diag-stage.qcow2,if=virtio \
> -accel hvf \
> -cpu host
Run Code Online (Sandbox Code Playgroud)
它启动,但 4 秒后崩溃:
vmx_write_mem:mmu_gva_to_gpa ffff9ac27b23fcdc 失败
中止陷阱:6
我看到其他用户在这里遇到了这个问题,但没有提供答案。
如果有人有线索或建议在 Mac OS X 上运行我的 .qcow2 机器的其他方法,那就太棒了!预先非常感谢!
我正在尝试在 x86_64 主机上运行 ARM64 Ubuntu VM 以用于开发目的。我在他们的网站上搜索了 vagrant box 只找到了这个:
https://app.vagrantup.com/boxes/search?provider=libvirt&q=arm64&sort=downloads&utf8=%E2%9C%93
但是,我未能启动该 VM(使用vagrant up --provider libvirt),因为它似乎使用qemu-system-x86_64用作模拟器而不是qemu-system-aarch64. 我用的vagrantfile?
Vagrant.configure("2") do |config|
config.vm.box = "MalibuKoKo/ubuntu-18.04.3-server-arm64-raspberry-4"
config.vm.define "ubuntu18.04-aarch64"
config.vm.provider :libvirt do |libvirt|
libvirt.machine_arch = "aarch64"
libvirt.uri = 'qemu:///system'
libvirt.emulator_path = "/usr/bin/qemu-system-aarch64"
end
end
Run Code Online (Sandbox Code Playgroud)
任何建议如何提出它?谢谢
我目前正在 Windows 10 Fast Ring 版本(Build 20161)上尝试适用于 Linux v2 的 Windows 子系统。更具体地说,我尝试使用嵌套虚拟化运行 qemu-kvm 虚拟机,但每次使用 virt-manager 创建新虚拟机的尝试都以失败告终。
\n我在 WSL2 实例中使用 Ubuntu 18.04,带有自定义构建的内核(其中包括与虚拟化相关的所有内容 - 请参阅本指南: https: //boxofcables.dev/accelerated-kvm-guests-on-wsl-2/)和“在我的 WSL 配置文件中,“nestedVirtualization”设置为“true”。更重要的是,“sudo kvm-ok”在 Ubuntu 实例中运行时会返回积极的结果。
\n我确实在 Ubuntu WSL 中安装了 DBUS,并且该服务正在运行,所以我相信这不是问题的根源。我正在使用 VcXsrv 来显示 X11 窗口。
\n以下是我每次尝试时遇到的错误:
\nLibvirtd.log
\n2020-07-07 03:33:24.507+0000: 1273: info : libvirt version: 4.0.0, package: 1ubuntu8.17 (Marc Deslauriers <marc.deslauriers@ubuntu.com> Wed, 06 May 2020 14:18:23 -0400)\n2020-07-07 03:33:24.507+0000: 1273: info : hostname: LAPTOP-DRAGOS\n2020-07-07 03:33:24.507+0000: 1273: error : udevGetDMIData:1818 : internal error: …Run Code Online (Sandbox Code Playgroud) 我开始用 edk2 编写一个小而简单的应用程序。
因此,要编写一个简单的 edk2 UEFI 应用程序,我是这样开始的:
#git 克隆https://github.com/tianocore/edk2.git
#. edksetup.sh BaseTools
Loading previous configuration from /media/ledoux/Data/osdev/devos/edk2/edk2/Conf/BuildEnv.sh
WORKSPACE: /media/ledoux/Data/osdev/devos/edk2/edk2
EDK_TOOLS_PATH: /media/ledoux/Data/osdev/devos/edk2/edk2/BaseTools
CONF_PATH: /media/ledoux/Data/osdev/devos/edk2/edk2/Conf
#vi Conf/target.txt
Run Code Online (Sandbox Code Playgroud)
(在那里,我输入了:TARGET_ARCH = IA32 X64 TOOL_CHAIN_TAG = VS2017)
# BUILD -a X64
Build environment: Linux-5.7.0-kali1-amd64-x86_64-with-glibc2.29
Build start time: 08:32:11, Sep.03 2020
WORKSPACE = /media/ledoux/Data/osdev/devos/edk2/edk2
EDK_TOOLS_PATH = /media/ledoux/Data/osdev/devos/edk2/edk2/BaseTools
CONF_PATH = /media/ledoux/Data/osdev/devos/edk2/edk2/Conf
PYTHON_COMMAND = /usr/bin/python3.8
Processing meta-data
Architecture(s) = X64
Build target = DEBUG
Toolchain = VS2017
Active Platform = /media/ledoux/Data/osdev/devos/edk2/edk2/EmulatorPkg/EmulatorPkg.dsc
..................
- Failed -
Build end …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的台式计算机上模拟一个简单的 Hello world ARM 示例。我尝试了 qemu 和 gem5。两者都给出了类似的错误。他们找不到ld-linux-aarch64.so.1。其实我也找不到。如果我能找到它,我将用 -L (在 qemu 中)或 --redirects (在 gem5 中)显示它。
该文件是:
armhello: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=23a21b7a545ac510923b6b3713d2bbee092f820a, for GNU/Linux 3.7.0, not stripped
Run Code Online (Sandbox Code Playgroud)
它是用以下内容编译的:aarch64-linux-gnu-gcc
我正在尝试在 qemu 中运行它:
qemu-aarch64 armhello
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
/lib/ld-linux-aarch64.so.1: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我尝试在 gem5 中运行它:(simpleARM.py 指向我的可执行文件(名为armhello))
build/ARM/gem5.opt configs/tutorial/simpleARM.py
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
panic: panic condition fd < 0 occurred: Failed to open file /lib/ld-linux-aarch64.so.1.
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
注意:我知道它在编译时有效--static。但我需要运行动态链接的更复杂的二进制文件,并且我无法更改它们。这只是一个例子。