我无法正常地从命令提示符停止模拟器.
我使用的是Linux Ubuntu 10.04版本(64位),Android SDK版本是2.3.
我使用它的快照启动了模拟器.现在我关心的是优雅地关闭正在运行的Emulator实例.我已经尝试使用kill -9(模拟器运行的进程ID)关闭模拟器,但下次它没有启动,因为它的快照已损坏.请帮我避免强行关闭模拟器.
知道怎么解决吗?
我正在从OSDev.org学习一些OS开发.我有一个内核,我正在尝试使用qemu在GRUB Legacy(0.97)中启动.但是,当我输入时kernel 200+9,我收到了消息
[Multiboot-elf, <0x100000:0x80:0x4008>(bad), entry=0x10000c]
Run Code Online (Sandbox Code Playgroud)
这是我所期望的,除了(坏)部分.如果我boot现在输入GRUB就会挂起.
我认为数字0x100000,0x44,0x4008分别代表.text段起始地址,.bss起始地址和.bss段大小.我认为这是因为objdump -h在内核映像上运行会产生以下结果:
kernel.bin: file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000044 00100000 00100000 00001000 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .bss 00004008 00100044 00100044 00001044 2**2
ALLOC
Run Code Online (Sandbox Code Playgroud)
所以你可以看到我提到的数字几乎匹配.问题是,而不是100044,.bss的开头只有44个.我认为这就是GRUB说错的原因.我的内存不足1 MB(低内存).但objdump告诉我我的部分超过了这个门槛,所以我不知道出了什么问题.无论如何,我会在下面粘贴我的代码,它相对较短.虽然我的问题可能是非常基本的,如果你以前做过OS开发,所以代码可能是无关紧要的.
;loader.s - contains the multiboot header for grub and calls the main kernel method
global loader ; making entry point visible to linker
global magic ; we will …Run Code Online (Sandbox Code Playgroud) 我试图用qemu调试linux内核的启动顺序,我正在运行的命令是:
qemu -serial stdio -kernel <path to kernel> -hda <path to rootfs> -append "root=/dev/sda terminal = ttyS0"
Run Code Online (Sandbox Code Playgroud)
在引导期间,所有内核消息都将打印到QEMU窗口.只有当引导完成后,我才会将提示返回到终端,我运行了QEMU.
现在我可以开始使用我正在运行的内核终端并在终端中查看输出,而不是在QEMU窗口中.
如何将所有消息(包括引导消息)发送到终端而不是QEMU窗口(因为我无法在该窗口中向上滚动..)?
您建议哪些书籍或网站了解QEMU?我想看一些使用示例以及如何使用API.
我正在尝试使用QEMU使用Raspian OS模拟Raspberry Pi.我尝试过在互联网上描述的几种方法但没有任何成功.
我想我需要修补一个适合所需操作系统的Linux内核.在我的例子中,我选择了带有内核4.4的Rasbian Lite:
wget https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2016-05-31/2016-05-27-raspbian-jessie-lite.zip
unzip 2016-05-27-raspbian-jessie-lite.zip
rm 2016-05-27-raspbian-jessie-lite.zip
Run Code Online (Sandbox Code Playgroud)
接下来,我从https://www.kernel.org/加载内核:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.16.tar.gz
tar -xzf linux-4.4.16.tar.gz
rm linux-4.4.16.tar.gz
Run Code Online (Sandbox Code Playgroud)
现在交叉编译内核:
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
cd linux-4.4.16
make vexpress_defconfig
make all
cd ..
Run Code Online (Sandbox Code Playgroud)
现在我可以将启动映像(即在RAM中自动提取的压缩内核映像)复制到我的工作区:
cp linux-4.4.16/arch/arm/boot/zImage zImage
Run Code Online (Sandbox Code Playgroud)
并运行QEMU
qemu-system-arm -kernel zImage -M vexpress-a9 -m 1024 -cpu cortex-a9 -no-reboot -serial stdio -hda 016-05-27-raspbian-jessie-lite.img -append "root=/dev/sda2 rootfstype=ext4"
Run Code Online (Sandbox Code Playgroud)
但我所看到的只是一个黑色的QEMU窗口.:(
我认为问题是获得正确的内核.从Internet复制某些内核从未取得成功,因为它们不适合操作系统.
如何构建/修补适合操作系统的内核(不下载现有的内核)以及如何正确运行QEMU?
先谢谢
Alex
我kernel-qemu从这里加载一个https://www.dropbox.com/s/g8u93xblz1v1ly0/kernel-qemu?dl=0并用它运行QEMU:
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial …Run Code Online (Sandbox Code Playgroud) 我正在尝试分析QEMU源代码.
我知道它很庞大,直到约会还没有官方文件.
我主要关注的是指令缓存管理和TCG操作.
任何指向它们的指针都会有所帮助吗?
我有一个我正在试验的服务器,有时我想在家工作,所以我安装了'ssh守护进程'(即'sshd'),我可以ssh到服务器.这很好用.但是当我尝试使用'qemu'在服务器上运行虚拟机时,我收到以下错误Could not initialize SDL(No available video device) - exiting.
是否可以通过ssh连接运行qemu?
注意,我不希望看到我正在启动的VM的可视界面.我只是想跑.
我想在我的部门的高性能计算机(使用8核处理器)上运行一些程序.现在我使用终端ssh使用该机器.机器上安装了Red Hat linux.但我的程序需要在Solaris上运行.我使用Nexenta Solaris for x86.
可以使用qemu通过终端在该机器上运行Nexenta Solaris.我需要说服管理员可以,否则他不会在该机器上安装qemu,因此允许我通过虚拟机使用Solaris.另请注意,我不使用Nexenta Solaris的GUI,只使用命令行.在我的机器中,我使用VMware来运行它.
显然,QEMU是唯一可以在新 Apple 芯片(M1、M2 等)上模拟 x86 操作系统的开源代码。
Apple 构建了 Rosetta 2,理论上,它与 QEMU 在这些场景中执行的操作完全相同。它将 x86 (Intel) 指令转换为新 Apple 芯片处理器支持的指令集。
Rosetta 2 具有出色的性能,某些 x86 应用程序甚至比在本机 x86 硬件上运行时具有更好的性能。另一方面,当在 Apple 芯片上运行 x86 Linux 时,QEMU 的表现还差得远。
Rosetta为何能有如此优越的性能?是否有任何只有 Apple 知道且从未与 QEMU 项目共享的架构“秘密”?QEMU 不允许访问哪些禁止的 API?