热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

qemu模拟arm并调试汇编的方法和注意事项

最开始时采用Windows开发环境armtoolchainswindows版qemucygwin我也有虚拟机,里面是debian,主要是虚拟机太占资源,可怜我的小黑只有1G内存呀,所以我是不到万不得已是不会开虚拟机的,呵呵。先说一下qemu吧,QEMUcanloadaLinuxkernelusingt

最开始时采用Windows 开发环境

arm toolchains

windows版qemu

cygwin

我也有虚拟机,里面是debian,主要是虚拟机太占资源,可怜我的小黑只有1G内存呀,所以我是不到万不得已是不会开虚拟机的,呵呵。

先说一下qemu吧,

u-boot

QEMU can load a Linux kernel using the -kernel and -initrd options; at a low level, these options have the effect of loading two binary files into the emulated memory: the kernel binary at address 0x10000 (64KiB) and the ramdisk binary at address 0x800000 (8MiB). Then QEMU prepares the kernel arguments and jumps at 0x10000 (64KiB) to execute Linux. The emulator starts the execution at address 0x00000000, where few instructions (already in place) are used to jump at the beginning of the kernel image.

The interrupt table of ARM cores, usually placed at address 0x00000000, is not present, and the peripheral interrupts are disabled at startup, as needed to boot a Linux kernel. Knowing this, to implement a working emulation I need to considerate a few things:

The software must be compiled and linked to be placed at 0x00010000

I need to create a binary image of our program

I can ignore interrupt handling for now

qemu可以通过-kernel和initrd选项,把两个2进制文件装到模拟的memory当中,内核被装载到地址0x10000,ramdisk镜像被装载到0x80000

首先编写test.S

.global _start
        .text
_start:
        mov r0, #0
        mov r1, #1
        mov r2, #2
loop:
        b loop

编译生成带调试符号文件test.elf和去掉符号的test.bin

CC=arm-elf-gcc
LD=arm-elf-ld
OBJDUMP=arm-elf-objdump
OBJCOPY=arm-elf-objcopy

OBJ= test
OBJ : $(OBJ).S
        $(CC) -g -c -o $(OBJ).o $(OBJ).S
        $(LD) -Ttext 0x10000 -g $(OBJ).o -o $(OBJ).elf
        $(OBJCOPY) -O binary $(OBJ).elf $(OBJ).bin
        $(OBJDUMP) -d $(OBJ).elf > $(OBJ).dump
clean:
        rm *.o *.elf *.bin *.dump

接下来准备调试

qemu-system-arm -M versatilepb -m 18M -s -S -kernel test.bin

-S              freeze CPU at startup (use 'c' to start execution)
-s              wait gdb connection to port 1234

target remote localhost:1234

alt-f2

(qemu)gdbserver 1234

(gdb) info register   

(gdb) ni/ns    ;汇编下一步,stepin

(gdb) display /10i $pc-16

(gdb) x /16 0                             这个是查看0x00000000开始的16个字(32 bits per word)的内存信息


推荐阅读
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • Linux环境下配置Subclipse访问SVN+SSH仓库的方法
    本文详细介绍如何在Linux操作系统中配置Subclipse,以便通过SSH协议安全访问SVN仓库。不同于常见的Windows配置指南,本文提供了针对Linux用户的详细步骤。 ... [详细]
  • 本文探讨了Unix和Linux操作系统的起源和发展历程。从20世纪60年代计算机技术的初期阶段,到Unix的诞生及后续Linux的崛起,文章详细介绍了这些操作系统如何逐步成为现代计算不可或缺的一部分。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ... [详细]
  • 当我在命令行登录MySQL后,无法访问任何依赖数据库连接的PHP应用。此问题每次都会出现。以下是复现问题的具体步骤及解决方案。 ... [详细]
  • 本文介绍了如何在Ubuntu 16.04系统上配置Nginx服务器,以便能够通过网络访问存储在服务器上的图片资源。这解决了在网页开发中需要使用自定义在线图标的需求。 ... [详细]
  • Kali Linux下Nessus 8.9.1的安装与更新指南
    本文详细介绍了如何在Kali Linux 2019.4 64位系统中安装Nessus 8.9.1,并涵盖了从下载、安装到插件更新及自动化的全过程。同时提供了必要的配置步骤以确保软件能够正常运行。 ... [详细]
  • 在Ubuntu 14.04 (Desktop AMD64) 上安装与配置ROS Indigo
    本文档详细介绍了如何在Ubuntu 14.04 (Desktop AMD64) 系统上安装和配置ROS Indigo。包括设置软件源、安装ROS核心组件、初始化rosdep以及创建ROS工作空间等步骤。 ... [详细]
author-avatar
阿芙2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有