我正在做一个基于xv6的操作系统类,我编写了一个需要在其上运行的程序.
我知道我可以调试内核代码,make qemu-gdb但我不确定如何调试我自己的用户程序.
可以说我想调试cat,我该怎么做呢?
谢谢
PS是不是有xv6标签?这个问题是否应该在这里?
我打算使用Qemu为执行x86客户机操作系统生成内存跟踪.
根据tcg wiki页面,Qemu使用少量帮助程序为目标(访客)内存生成加载/存储.此指令列表是tcg_gen_qemu_ld8s/u,tcg_gen_qemu_ld16s/u,tcg_gen_qemu_ld32s/u,tcg_gen_qemu_ld64.(我们对商店说明有类似的设置).我在target-i386/translate.c文件中捕获对上述函数的所有调用
但是,我仍然缺少某些指令的加载/存储
cmp ecx, [r12+0x4]
mov r10b, [r13+0x0]
mov byte [rax+0xf0000], 0x0
mov byte [rax+rdx], 0x0
Run Code Online (Sandbox Code Playgroud)
问题:
guest_read()),可以检测它来跟踪guest虚拟机内存中的所有负载???对不起朋友提供上一封邮件中的误导性说明.
cmp ecx, [r12+0x4]
mov r10b, [r13+0x0]
mov byte [rax+0xf0000], 0x0
mov byte [rax+rdx], 0x0
Run Code Online (Sandbox Code Playgroud)
似乎所有上述说明都被tcg_gen_ld/st助手所覆盖.
但是现在我偶然发现了另一个问题:
我最初认为与guest虚拟机内存的所有交互都是通过translate.c文件中的helper指令进行的.然而,我发现,对于一些指令的辅助函数喜欢cmpxcgh8b和cmpxchg16b实际访问客户机内存.
那么,这是否意味着有多个入口点用于读取访客内存.有人可以解释一下如何翻译ldq和stq指令来访问来宾内存?
我目前正在使用操作系统类,我需要使用qemu来运行我教授提供的小型操作系统.我试图在macbook air 5.2上的虚拟机上的ubuntu 12.04虚拟机中使用qemu.我知道我可能与嵌套虚拟化有关的问题,但是当我尝试运行qemu时遇到的具体错误是:
无法访问KVM内核模块:没有这样的文件或目录
无法初始化KVM:没有这样的文件或目录返回tcg加速器.
qemu确实启动了操作系统,但窗口闪烁了很多,我想尽可能修复KVM问题.我已经完成了研究,但我无法找到一个我能理解的解决方案或有效的解决方案,所以任何帮助都会受到高度赞赏.
同样对于virtualbox中的ubuntu虚拟机,我在Hardware Virtualization下选中了Enable VT-x/AMD-V和Enable Nested Paging.我也试过用
modprobe kvm-intel
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
致命错误:插入kvm_intel时出错(/lib/modules.3.5.0-22-generic/kernel/arch/x86/kvm/kvm-intel.ko):不允许操作.
这是我的第一条消息,我正在给你写信,因为这次我真的无法解决这个问题.
我正在学习关于gdb的课程.在后面的课程中,课程涵盖了ARM体系结构的调试,因此我提供了一个允许我模拟这种情况的设置.
我目前的设置是由:
ARM Debian映像来自https://people.debian.org/~aurel32/qemu/armel/
图像随启动而启动
qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile -hda debian_squeeze_armel_standard.qcow2 -append "root=/dev/sda1" -m 256 -redir tcp:2222::22
Run Code Online (Sandbox Code Playgroud)
我修改了sources.list和apt.conf以允许apt工作,因为de distro已经过时了.我更新并升级并安装了gcc和gdb.
尝试调试时出现问题:我可以在gdb中加载可执行文件
root@debian-armel:~/video-11/video-11# file ./main
./main: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在gdb中运行它时,我收到此消息并且执行挂起,直到我能够从另一个控制台终止gdb进程
------------[ cut here ]------------
WARNING: at /build/linux-2.6-fIxTVd/linux-2.6-2.6.32/debian/build/source_armel_none/kernel/sched.c:2628 wake_up_process+0x2c/0x48()
Modules linked in: loop sg smc91x sr_mod mii cdrom psmouse evdev ext3 …Run Code Online (Sandbox Code Playgroud) 我正在进入引导程序和内核开发(非常开始)我正在关注https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev的组合 .pdf 和https://github.com/cfenollosa/os-tutorial中的代码
唯一不同的是,我的目标是x86_64而不是i386.我也使用qemu模拟(qemu-system-x86_64).现在跟随GitHub回购到第16部分视频驱动程序之后,我被卡住了,因为屏幕驱动程序确实在屏幕上打印了一些东西,但是有些事情正在发生,数据不对齐.接下来我想尝试调试我的程序.这部分也包含在回购的第14部分检查点中.所以我为目标x86_64-elf构建了gdb.但是,当我尝试运行qemu和gdb使用system-qemu-x86_64 -s -S -fda os-image
,然后运行gdb并尝试通过运行连接到qemu target remote localhost:1234,一旦我运行,我得到以下错误消息
Remote debugging using localhost:1234
warning: No executable has been specified and target does not support
determining executable automatically. Try using the "file" command.
Remote 'g' packet reply is too long (expected 308 bytes, got 536 bytes):
000000000000000000000000000000000000000000000000630600000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000f0ff0000000000000200000000f00000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000007f03000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000801f0000
Run Code Online (Sandbox Code Playgroud)
关于我遗失/做错的任何想法?如果需要更多信息,请告诉我.
谢谢
编辑:我已经应用了@MichaelPetch提到的补丁,现在g包错误消失了.但是看起来gdb在运行后无法解释我的可执行文件target remote localhost:1234,然后symbol-file kernel.elf …
所以我在本地构建服务器上安装了 Yocto,因为谁想要大规模构建吞噬他们的工作区 amirite?
主机和服务器是 Arch Linux 4.19.44-1-lts
无论如何,我只是从这里找到的快速构建页面运行示例,当我尝试
$ runqemu qemux86
Run Code Online (Sandbox Code Playgroud)
从 ssh(启用 X11 转发)我得到的只是这个糟糕的输出:
runqemu - INFO - Running MACHINE=qemux86 bitbake -e... runqemu - INFO
- Continuing with the following parameters:
KERNEL: [/home/bob/poky/build/tmp/deploy/images/qemux86/bzImage--5.0.3+git0+f0b575cda6_3df4aae607-r0-qemux86-20190520164453.bin] MACHINE: [qemux86] FSTYPE: [ext4] ROOTFS: [/home/bob/poky/build/tmp/deploy/images/qemux86/core-image-sato-qemux86-20190520164453.rootfs.ext4] CONFFILE: [/home/bob/poky/build/tmp/deploy/images/qemux86/core-image-sato-qemux86-20190520164453.qemuboot.conf]
runqemu - INFO - Setting up tap interface under sudo [sudo] password for bob: runqemu - INFO - Network configuration:
192.168.7.2::192.168.7.1:255.255.255.0 runqemu - INFO - Running /home/bob/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/qemu-system-i386
-device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -drive file=/home/bob/poky/build/tmp/deploy/images/qemux86/core-image-sato-qemux86-20190520164453.rootfs.ext4,if=virtio,format=raw
-vga vmware -show-cursor …Run Code Online (Sandbox Code Playgroud) 我正在使用 Yocto v2.4.1 和 BitBake v1.36.0。我想从我自定义生成的 Linux 映像中删除 qemu 和 qemu-native(所有与 qemu 相关的东西)。
我怎样才能做到这一点 ?
谢谢
作为背景,我在 aarch64 上运行裸机 QEMU-4.1.0。
有几种方法可以让 QEMU 将编译后的代码加载到内存中。我想了解潜在的差异是什么,因为我看到了非常不同的行为,并且文档没有说明。
考虑这个第一个命令行:
qemu-system-aarch64 \
-s -S \
-machine virt,secure=on,virtualization=on \
-m 512M \
-smp 4 \
-display none \
-nographic \
-semihosting \
-serial mon:stdio \
-kernel my_file.elf \
-device loader,addr=0x40004000,cpu_num=0 \
-device loader,addr=0x40004000,cpu_num=1 \
-device loader,addr=0x40004000,cpu_num=2 \
-device loader,addr=0x40004000,cpu_num=3 \
;
Run Code Online (Sandbox Code Playgroud)
在另一个 shell 中,如果我启动 gdb 以查看 QEMU 已加载到内存中的内容,则它完全符合我的预期。事实上,gdb 有一个内置的命令用于这个......
(gdb) compare-sections
Section .start, range 0x40004000 -- 0x40006164: matched.
Section .vectors, range 0x40006800 -- 0x40006f90: matched.
Section .text, range 0x40006fc0 -- 0x4002ca7c: matched.
... …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 docker 和 qemu 在我的 x86 主机上构建arm镜像
我使用arm64v8/ubuntu作为基础镜像
我制作了一个简单的 opencv 程序并尝试使用 ldd 命令来查看依赖关系。
然而,ldd总是显示:
ldd:退出,退出代码未知 (132)
如果我保存此图像并将其加载到 Arm 计算机中,ldd 就会起作用。
但是,我的主项目太大(或者我的arm计算机空间太小),无法导入到arm计算机,我想使用ldd来找出该项目真正需要哪些库。
我还尝试 nvcr.io/nvidia/l4t-base:r32.4.4 作为基础图像和 ldd 显示
ldd:退出,退出代码未知 (139)
如果我在 docker 中的 arm 镜像中并且我的主机是 x86,我应该怎么做才能使用 ldd 命令?
我的 dockerfile 是这样的:
FROM arm64v8/ubuntu
ENV TZ=Asia/Taipei
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && apt-get install -y \
build-essential -y \
cmake -y \
git -y \
libgtk2.0-dev -y \
libjpeg-dev -y \
libpng-dev -y \
libtiff-dev …Run Code Online (Sandbox Code Playgroud) Android Studio 附带的标准 Android 模拟器是 QEMU CPU 模拟器的衍生版本。QEMU 支持USB 直通。即,您可以将 USB 设备连接到计算机,Android 模拟器应该会拾取该设备,就像它已连接到模拟手机一样。我需要让它工作,以便我可以通过 Android 模拟器调试传输到 USB 设备( Trezor 硬件钱包)。
显然,我们可以使用参数将 QEMU 命令行参数传递给 Android 模拟器-qemu。我拼凑了这个我认为正确的电话:
emulator -avd pixel_2_pie_9_0_-_api_28 -qemu -usb -device usb-host,vendorid=4617,productid=21441
但是,我收到这些错误:
C:\Program Files (x86)\Android\android-sdk\emulator>emulator -avd Pixel_2_pie_9_0_-_api_28 -qemu -usb -device usb-host,vendorid=4617,productid=21441 无法打开 /qemu.conf,错误: 2 Windows Hypervisor Platform 加速器可运行 C:\Program Files (x86)\Android\android-sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64.exe: libusb_kernel_driver_active: -12 [NOT_SUPPORTED] C:\Program Files (x86)\Android\android-sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64.exe: libusb_kernel_driver_active: -12 [不支持] C:\Program Files (x86)\Android\android-sdk\emulator\ qemu\windows-x86_64\qemu-system-x86_64.exe: libusb_kernel_driver_active: -12 [不支持] C:\Program Files (x86)\Android\android-sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64。 exe: libusb_kernel_driver_active: -12 [不支持] C:\Program Files …