首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在linux上使用qemu交叉编译arm程序集并模拟非OS arm环境

在Linux上使用QEMU进行交叉编译ARM程序集并模拟非操作系统(Non-OS)ARM环境的过程如下:

  1. 安装QEMU:首先,需要在Linux系统上安装QEMU模拟器。可以使用包管理器(如apt、yum等)来安装QEMU,或者从QEMU官方网站下载源代码进行编译安装。
  2. 获取ARM交叉编译工具链:为了在Linux上编译ARM程序集,需要获取ARM交叉编译工具链。可以使用Linaro提供的工具链,也可以使用其他第三方提供的工具链。安装工具链后,将其添加到系统的环境变量中。
  3. 编写ARM程序:使用任何文本编辑器编写ARM汇编或C语言程序。确保程序适用于非操作系统(Non-OS)环境,因为在QEMU中模拟的是非操作系统环境。
  4. 交叉编译ARM程序:使用ARM交叉编译工具链将程序编译为ARM可执行文件。例如,使用arm-linux-gnueabi-gcc编译C语言程序,或使用arm-linux-gnueabi-as和arm-linux-gnueabi-ld编译和链接汇编程序。
  5. 创建模拟器镜像:使用QEMU提供的工具(如qemu-img)创建一个空的模拟器镜像文件,该文件将用于模拟ARM环境。
  6. 将编译好的可执行文件复制到模拟器镜像中:使用QEMU提供的工具(如qemu-nbd)将模拟器镜像挂载到Linux系统中,并将编译好的可执行文件复制到模拟器镜像中的合适位置。
  7. 启动QEMU模拟器:使用QEMU命令行工具启动模拟器,并指定模拟器镜像作为启动参数。例如,使用以下命令启动ARM模拟器:
  8. 启动QEMU模拟器:使用QEMU命令行工具启动模拟器,并指定模拟器镜像作为启动参数。例如,使用以下命令启动ARM模拟器:
  9. 其中,path/to/kernel是模拟器镜像中的内核文件路径,path/to/image是模拟器镜像文件路径。
  10. 在模拟器中运行ARM程序:一旦模拟器启动,可以在模拟器中运行编译好的ARM程序。根据程序的类型,可以使用QEMU提供的命令行参数来运行可执行文件。

以上是在Linux上使用QEMU进行交叉编译ARM程序集并模拟非操作系统ARM环境的基本步骤。这种方法适用于开发和测试ARM程序,以及在非操作系统环境中运行ARM应用程序。对于更复杂的应用场景,可能需要进一步了解QEMU的高级功能和配置选项。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一步步教你:x86平台,如何用Qemu模拟ARM系统

为什么需要ARM模拟系统 ARM平台的软件开发工作,可以划分为2类: 应用程序的开发 系统开发(内核、文件系统、驱动程序) 应用程序的开发 我们开发嵌入式项目的时候,一般都是先在x86平台把大部分的功能开发完成...,然后再交叉编译,得到ARM平台的可执行程序或者库文件。...比如:Qemu可以模拟出一个ARM系统中的:CPU、内存、IO设备等,然后在这个模拟层之上,可以跑一台ARM虚拟机,这个ARM虚拟机认为自己和硬件进行打交道,但实际这些硬件都是Qemu模拟出来的。...以上这些场景中,都非常适合使用Qemu模拟ARM系统。...安装交叉编译交叉编译器的作用就不需要详细解释了,因为我们是x86平台上进行编译,而运行的平台是ARM系统,这2个平台的指令不一样,所以需要交叉编译得到ARM系统可以执行的程序

14.1K30

从零使用qemu模拟器搭建arm运行环境

提醒:本文已有自动构建的项目支持,请移步到:再续【从零使用qemu模拟器搭建arm运行环境】 为什么会有这篇文章 早在2011年的时候,跟当时同事一起讨论,做Linux系统开发正处于整个Linux开发中间层...或者你像我一样,对内核机制关心,而不关心于具体的外设器件,最多是关心arm架构相关的功能,也可以使用qemu进行开发。 一句话:搭建qemu+arm环境,用于做内核开发和功能分析调试。...安装arm交叉编译工具链 想必做嵌入式开发的朋友,对交叉编译工具链不陌生。如果你订制一个交叉编译工具链,建议你使用 crosstool-ng开源软件来构建。...但在这里建议直接安装arm交叉编译工具链: sudo apt-get install gcc-arm-linux-gnueabi 编译Linux内核 生成vexpress开发板子的config...+arm开发环境,你可以上面的基础修改内核,或者增加一些测试程序单板运行,甚至使用单板的flash设备。

2.5K30
  • 多平台容器镜像构建就看这一篇

    我们可以设想一个简单粗暴的,无视镜像的平台,强行把交叉编译出来的其它平台的二进制程序添加到镜像内,使用 Repository 名称或者 Tag 名称来区分不同平台的镜像,例如 coredns/coredns...交叉编译 我们的 Golang 代码中没有使用 CGO 的时候,通过简单设置环境变量就能够交叉编译出其它平台和操作系统能够执行的二进制文件。...本篇中,我们构建能够 Linux 发行版中执行的容器镜像,所以编译目标系统环境变量GOOS统一设置为linux。执行代码段0-4中的命令构建出二进制文件备用。 // 代码段-04 #!...而使用 Linux 发行版操作系统的同学则需要自行安装配置 binfmt_misc,以便能够原生的其它平台的镜像。 要在宿主机上执行其它 CPU 平台的指令,需要安装 QEMU 模拟器。...因为程序执行时会在当前程序可见的文件系统中查找动态库,而在容器或chroot环境中注册的处理程序在其它的 cgroup namespace 中可能无法找到,所以需要静态编译连接的QEMU

    1.9K50

    Ubuntu搭建arm虚拟运行环境

    没有开发板,如何调试运行arm程序? 本文主要讲解如何在Ubuntu搭建arm交叉编译、运行环境。...一、安装交叉编译工具链 安装交叉编译工具链arm-linux-gnueabihf-gcc: sudo apt-get install gcc-arm-linux-gnueabihf 安装完毕,可以看到系统已经新增了这么多交叉编译工具...BuildID[sha1]=7592a0494955ca8bb953948ea4cfbefc90b2e2e9, not stripped 二、安装arm模拟qemu 安装arm模拟qemu : sudo...可以看到,程序输出了正确的结果helloworld: helloworld@ubuntu:~$ qemu-arm a.out helloworld 说明:qemu可以模拟很多平台,不限于arm。...三、通过gdb调试arm程序 Ubuntu用gdb调试arm程序的原理:qemu端作为gdb server启动可执行程序,另一端作为gdb client连接gdb server,进行本地远程调试。

    5.2K31

    跨平台构建 Docker 镜像新姿势,x86、arm 一把梭

    通过模拟一个完整的操作系统,可以创建通用的 ARM 虚拟机,该虚拟机可以引导 Linux,设置开发环境,也可以虚拟机内编译程序。...方法三:模拟目标硬件的用户空间 Linux QEMU 除了可以模拟完整的操作系统之外,还有另外一种模式叫用户态模式(User mod)。...方法四:使用交叉编译器 最后介绍一种嵌入式系统社区常用的方法:交叉编译(cross-compilation)。...例如,amd64 架构的 Linux 系统的 C++ 交叉编译器可以编译出运行在 aarch64(64-bit ARM) 架构的嵌入式设备的可执行文件。...但交叉编译不具有通用性,它的复杂度取决于程序使用的语言,如果使用 Golang 的话,那就超级容易了。 全民容器时代,我们讨论构建时不仅包括构建单个可执行文件,还包括构建容器镜像。

    40.9K119

    鸿蒙系统研究之三:迈出平台移植第一步

    OpenHarmony OS 2.0 发布时,标准系统只支持 Hi3516DV300 一种硬件平台,而 Android、IOS 均提供了模拟器供开发人员使用。...这也可以理解,毕竟华为长期以来都是设备供应商,专长是硬件,软件开发方面缺少底蕴。鸿蒙应用开发提供了模拟器,但那是真机模拟器,需要接入到华为的开发平台才能使用。...本文你将了解到: 如何为 OpenHarmony OS 2.0 标准系统增加新的产品定义; 如何将新的平台移植加入构建系统; 为模拟编译Linux 内核; 常用的模拟器软件有 QEMU,能够模拟多种硬件型号...Makefile 中,指定交叉编译工具链,并进行内核编译,最后生成 zImage 镜像。.../build.sh --product-name vexpress-a9 --ccache 然后使用 QEMU 模拟器来启动内核: $ qemu-system-arm -M vexpress-a9 -

    1.9K50

    Docker多架构容器镜像构建方式

    跨平台开发:如果您正在开发需要在多个平台上运行的应用程序,例如ARM和x86,您可以使用buildx构建多架构Docker镜像并在不同架构测试应用程序。...使用多架构容器镜像的好处 使用多架构容器镜像的几个优点是: 能够多个 CPU 架构运行 Docker 镜像 使我们能够选择环保的CPU架构 从一种架构无缝迁移到另一种架构 使用arm64获得更好的性能节省成本...,负责模拟 CPU 指令。...它还在后台使用 QEMU CPU 模拟。...构建多架构容器映像也需要时间,而在 QEMU 仿真构建 arm64 会消耗大量时间和资源。 与本机运行二进制文件相比,不同 CPU 模拟运行二进制文件的性能明显较低。

    1.3K41

    使用QEMU搭建ARM64实验环境

    注:这篇文章是之前写的,当时最新内核版本是linux-5.9.2,不想做重复工作,现在基本使用linux-5.11内核讲解代码,但是qemu环境搭建基本一致,且本文暂不涉及虚拟化讲解。...2.交叉编译工具链的安装 工欲善其事必先利其器,搭建QEMU的模拟环境首先需要下载安装对应架构的交叉编译工具链(这里是arm64架构): 注:有时候需要安装一些依赖,根据提示安装即可!...4)共享文件 前面已经支持了主机和qemu的系统共享目录,这个目录就是kmodules目录:通过mount可以查看被挂载到了qemu的系统的/mnt目录下 主机的内核源码目录的kmodules目录中...\n"); return 0; } 然后使用交叉编译工具链动态编译: $ aarch64-linux-gnu-gcc test.c -o test...可以发现被成功执行了,说明模拟出来的系统可以运行应用程序,而且可以使用动态链接库!!!

    3.1K20

    深入了解 Golang 多架构编译交叉编译最佳实践

    最佳实践 3.1 多架构编译 以下是一个示例,你可以使用环境变量 GOOS 和 GOARCH 来为不同的平台编译你的程序生成适用于不同操作系统和架构的可执行文件。...,使得我们的应用程序能够各种环境中运行。...3.3 安装和使用交叉编译工具链 对于一些架构,例如 ARM,你可能需要安装特定的交叉编译工具链。例如: CentOS X86 架构的环境编译 ARM 架构的应用。...aarch64-linux-gnu-gcc --version 5. 使用 ARM 工具链进行交叉编译 安装完成验证工具链后,你可以使用这些工具链为 ARM 平台进行交叉编译。...7 amd64 安装 ARM 工具链,并为 ARM 平台进行交叉编译

    1.1K10

    使用 Docker Buildx 构建多种系统架构镜像

    提供了与 docker build 相同的用户体验,增加了许多新功能。 BuildKit 是下一代的镜像构建组件,主要特点有很多,本文主要使用其可以编译多种系统架构的特性。...您可以使用 Buildx 和 Dockerfiles 支持的三种不同策略构建多平台镜像: 1 在内核中使用 QEMU 仿真支持 2 使用相同的构建器实例多个本机节点构建 3 使用 Dockerfile...中的一个阶段交叉编译到不同的架构 如果您的节点已经支持 QEMU,那么 QEMU 是最简单的入门方式(例如,如果您使用的是 Docker Desktop)。...要使binfmt_misc主机操作系统注册的 QEMU 二进制文件容器内透明地工作,它们必须使用该fix_binary 标志进行注册。...启用 Buildx Docker19.03引入了一个新的特性,使得Docker可以构建不同CPU体系结构的镜像,比如ARM镜像,这是不必引入模拟器的情况下,Docker自身所提供的原生统一构建机制,但是使用时需要进行设定才能进行使用

    1.4K20

    VVの嵌入式(一)开发环境搭建

    交叉编译系统的搭建 平台:Ubuntu32位虚拟机 目标平台:海思Hi3559V100 工欲善其事必先利其器,进行嵌入式linux开发的时候需要搭建一个能够调试的环境电脑无疑是最好最方便的了...至于虚拟机怎么搭建就不多说了,这里我用的32位的Ubuntu16.04主要是方便编译之前文章中自己写的OS 首先安装aarch64-linux-gnu工具链 apt-cache search aarch64...,所以虚拟机是非常有必要的,arm环境模拟器用的qemu,还是老样子直接安装就好了。...sudo apt-get install qemu qemu-user-static 然后开始着手模拟一个base ubuntu的arm64环境 首先下载rootfs mkdir ~/rootfs &...(我这里是用windows去连接ubuntu linux的虚拟机的,linux下执行也是同样的道理) 此时需要配置一下基本的工具环境 apt-get install net-tools network-manager

    1.4K40

    TKEStack适配ARM架构之路

    因为不同架构的指令不一样,一个架构下编译生成的二进制可执行文件,包含的是这个架构下的指令,直接将这个可执行文件放到另一架构运行,会报cannot execute binary file类似错误。...问题挑战 常规适配arm架构的做法就是arm服务器,把应用程序编译、构建、打包的流程都走一遍,然后再将生成的arm组件包,跟x86的组件包分别命名,再打包一起交付给客户,然后部署时,由客户选择安装...容器技术:docker manifest list 多个架构(x86 / arm)或者多个平台上(linux_amd64 / windows_amd64)使用容器镜像时,就不得不提Docker公司...QEMU可以模拟很多平台,所以只要想办法构建跨平台的容器镜像时,将其他平台的可执行文件传递给QEMU,由QEMU模拟对应的平台执行,就可以达到跨平台构建的目的。...所以只要在x86平台安装QEMU模拟器,并在binfmt_misc中注册QEMU,让Linux遇到其他平台的执行文件时就传递给QEMU,这样就可以实现跨平台执行arm指令了。 5.

    2K21

    riscv64 qemu上进行Linux环境搭建与开发记录

    riscv64 qemu上进行Linux环境搭建与开发记录 1.本文说明 2.riscv64 qemu编译 3.riscv64 交叉编译工具链准备 4.编译uboot 5.编译opensbi 6.编译...从上层到底层,从知其然到知其所以然,这必将是一个循序渐进的过程,本文梳理了一下riscv环境搭建方法(ubuntu18.04),让系统qemu正常的运行起来。...5.编译opensbi RISC-V Supervisor二进制接口(SBI)是针对RISC-V的一些底层的接口,有两种模式,M模式下运行的特定于平台的固件,以S模式或HS模式执行的引导加载程序,管理程序或通用...简单的理解就是芯片的bios,通过该程序,可以加载不同的OS或者uboot。本文就将演示启动uboot的步骤。...其中的 Image 是一章节编译完成后拷贝过来的,直接运行该目录下的start-qemu.sh脚本就可以看到系统正常的运行起来。 ? 输入root可以正常的进入Linux系统。

    3.6K11

    OS开发爱好者福利来了:树莓派上编译C语言,顺便掌握一波硬件知识

    此外,该教程假设你具有一定的 GNU/Linux 知识,对编译程序、创建磁盘和文件系统镜像有一定的了解。 对于为何选择树莓派 3,作者给出了解释:首先,它既便宜又容易买到。...预备知识 开始前,你将需要在 FAT 文件系统使用交叉编译器(有关详细信息,请参见 00_crosscompiler 目录)和带有固件文件的 Micro SD 卡。...但作者已经实现了,并将很快发布(更新: qemu2.12 中提供)(https://wiki.qemu.org/ChangeLog/2.12#ARM)。在此之前,你必须从最新的源代码编译 qemu。...当初始化完成时,通过执行 bootcode.bin,它将加载执行 start.elf。这不是一个 ARM 可执行文件,而是专门为 GPU 编译的。...加载后,GPU 触发 ARM 处理器的复位线,开始地址 0x80000(或更准确地说是 0)处执行代码。

    1.3K40

    Android 渗透测试学习手册 第八章 ARM 利用

    8.2 建立环境 开始利用 ARM 平台的漏洞之前,建议你建立环境。...即使 Android SDK 中的模拟器可以通过模拟 ARM 平台来运行,大多数智能手机也是基于 ARM 的,我们将通过配置 QEMU(它是一个开源硬件虚拟机和模拟器)开始 ARM 漏洞利用。...为了 Android 模拟器/设备执行以下所有步骤,我们需要下载 Android NDK 使用 Android NDK 中提供的工具为 Android 平台编译我们的二进制文件。...但是,如果你使用 Mac 环境,安装 QEMU 相对容易,可以通过键入brew install qemu来完成。 现在让我们 Ubuntu 系统配置 QEMU。...ASLR 是由 OS 实现的安全技术,来防止攻击者有效地确定载荷的地址执行恶意指令。 Android 中,ASLR 的实现始于 4.0。

    42630

    IoT漏洞研究(一)固件基础

    无法解析arm环境下的lua文件,但网上也有相应的工具,这里不再赘述。...可以看到真的搜索到了,而且也是一个表的结构: 根据基址找到IDA pro中的位置: 可以看到完成了部分的交叉引用,后续分析比较复杂,这里就不再展开,实际0x100位置是函数地址表,该固件中这样表有很多...1.3.1 交叉编译 如果能从正向开发角度来打包当然最方便,也就是交叉编译的事。...此时可以直接用模拟工具运行该程序,只需考虑动态库是否能加载。 (二) 需要模拟固件shell,与整个系统有所交互。这里可以通过chroot改变根路径,利用模拟工具执行/bin/sh。...值得注意的是,qemu在对程序黑盒测试时也经常使用,比如AFL的qemu_mode,在后面的篇章里我们会探讨,当然AFL同样可以使用unicorn_mode,使用的就是下面介绍的模拟器unicorn。

    2.6K10

    Linux中的binfmt-misc原理分析

    _64系统中运行arm64应用 先准备一个arm64架构的程序(可以使用go跨平台编译生成一个),执行后发现有报错: bash: ....这个偏移量将作为模拟器的一个参数 C: 表示credentials,这意味着模拟器将使用与原始程序相同的用户ID和组ID运行。...可以看出,qemu-aarch64-static是没有动态库依赖的,也就是说,docker必须使用静态编译qemu才能工作。通过这种方式,可以实现在x86_64机器编译跨架构镜像的目的。...因此,使用--platform linux/arm64参数就可以编译arm64架构的镜像。...0x06 Linux运行Windows可执行文件 使用binfmt-misc机制可以支持直接在Linux运行Windows的exe文件,这是通过wine来实现的。

    88210

    Android模拟器识别技术

    其实,现在绝大部分手机都是基于ARM架构,其他CPU架构给忽略不计,模拟器全部运行在PC,因此,只需要判断是运行的设备否是ARM架构即可。...无论是x86还是ARM,只要是静态编译程序,都没有修改代码段的权限,所以,首先需要将上面的汇编代码翻译成可执行文件,再需要申请一块内存,将可执行代码段映射过去,执行。...通过arm交叉编译编译出的可执行代码如下: 8410: e92d41f0 push {r4, r5, r6, r7, r8, lr} 8414: e3a07000...如果是ARM运行,e2844001处指令无法被覆盖,最终执行的是add r4,#1 ,而在x86平台,执行的是add r7,#1 ,代码执行完毕, r0的值模拟是1,而在真机上是10。...32位真机上完美运行,但是64位的真机上可能会存在兼容性问题,可能跟arm64-v8a的指令不同有关系,也希望人能指点。

    2.9K40

    KVM最初的2小时——KVM从入门到放弃

    ARM处理器也引入了类似的技术,ARM安全模式之下,分为EL0这个level跑guest APP,EL1这个level跑GUEST OS,而EL2这个level跑VMM,完成各个guest OS...IO操作并进行模拟,由于所有的IO操作都会引发异常,最终陷入VMM,而VMM可以借由host OS之上运行的一个应用进行行为级模拟最终调用Host OS的系统调用来完成最后的操作。...相似的,KVM IO 虚拟化方面,就是使用 QEMU 这个应用软件的方式来模拟 IO 设备。 KVM是个什么鬼?...QEMU:修改过的为 KVM虚拟机使用QEMU 代码(称为qemu-kvm),运行在用户空间,除了提供硬件 I/O 设备的模拟,还通过对/dev/kvm设备执行IOCTL来和 KVM 交互执行创建虚拟机...QEMU提供了guest管理的功能、I/O转换的功能。 ? ARM处理器,KVM内核组件的运行情况如下图: ? 而ARM V8.1 VHE支持后,则可以变成: ?

    1.1K20
    领券