QEMU环境准备

下载 qemu

# qemu
sudo apt install qemu-system-arm
# gdb
sudo apt install gdb-multiarchsudo apt-get update
sudo apt-get install build-essential zlib1g-dev pkg-config libglib2.0-dev \libpixman-1-dev libfdt-dev ninja-build

下载并自行编译 qemu(可选)

# 克隆 QEMU(支持 TrustZone 的版本) 使用 gitee 镜像
git clone https://gitee.com/openeuler/qemu.git -b v7.2.0sudo apt-get update
sudo apt-get install build-essential zlib1g-dev pkg-config libglib2.0-dev \libpixman-1-dev libfdt-dev ninja-build# 配置时有些submodule无法链接,在gitee找到替代源
./configure --target-list=aarch64-softmmu --enable-debug# 通过.gitmodules确认缺的仓库的目录路径,单独拉子仓库
# dtc
mkdir dtc
cd dtc
git clone https://gitee.com/chuanpen/qemu_dtc.git .
# meson
mkdir meson
cd meson/
git clone https://gitee.com/chuanpen/qemu_meson.git .
# berkeley-softfloat-3
mkdir -p tests/fp/berkeley-softfloat-3
cd tests/fp/berkeley-softfloat-3/
git clone https://gitee.com/chuanpen/qemu_berkeley-softfloat-3.git .
# keycodemapdb
mkdir -p ui/keycodemapdb
cd ui/keycodemapdb/
git clone https://gitee.com/chuanpen/qemu_keycodemapdb.git .# 运行配置命令
./configure --target-list=aarch64-softmmu --enable-debug# 编译qemu
make -j$(nproc)

下载arm-none编译器

进入 https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

选择 AArch64 bare-metal target (aarch64-none-elf)

arm-gnu-toolchain-14.2.rel1-aarch64-aarch64-none-elf.tar.xz

使用qemu先跑个裸机程序练手

创建 arm.s 程序

    .section .text.globl _start_start:mov x0, #1      // X0 = 1mov x1, #1      // X1 = 1add x0, x0, x1  // X0 = X0 + X1 (1 + 1 = 2)1:  b 1b

使用qemu启动一个裸机汇编程序.bin

# 编译程序,链接地址为 0x40100000
aarch64-none-elf-as arm.s -o arm.o
aarch64-none-elf-ld -nostdlib -Ttext=0x40100000 arm.o -o arm.elf
aarch64-none-elf-objcopy -O binary arm.elf arm.bin
qemu-system-aarch64 -machine virt -cpu cortex-a72 -nographic -device loader,file=arm.bin,addr=0x40100000 -s -S# 起另一个终端,进入gdb
gdb-multiarch
(gdb) set architecture aarch64
(gdb) target remote :1234
# 手动设置PC
(gdb) set $pc = 0x40100000# 查看 0x40100000 地址的指令,确认为 arm.s 的代码
(gdb) x /20i 0x40100000
=> 0x40100000:  mov     x0, #0x1                        // #10x40100004:  mov     x1, #0x1                        // #10x40100008:  add     x0, x0, x10x4010000c:  b       0x4010000c
# 全速运行
(gdb) c
# ctrl+c 暂停,寄存器如下
(gdb)  i r
x0             0x2                 2
x1             0x1                 1

使用qemu启动一个裸机汇编程序.elf

# 编译程序,链接地址为 0x40100000
aarch64-none-elf-as arm.s -o arm.o
aarch64-none-elf-ld -nostdlib -Ttext=0x40100000 arm.o -o arm.elfqemu-system-aarch64 -machine virt -cpu cortex-a72 -nographic -kernel arm.elf -s -S
# 起另一个终端
target remote :1234
# PC被自动设置为 0x40100000
i r
c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96614.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96614.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96614.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

003 cargo使用

cargo是什么 cargo 是 Rust 的构建系统和包管理器。Rust 开发者常用 cargo 来管理 Rust 工程和获取工程所依赖的库。 在上一篇文章中我们已经使用cargo new命令创建了一个名叫hello_rust的项目。也使用cargo run来运行项目。 cargo常用命令 cargo 除了创建工程以外还具备构建&a…

跨省跨国监控难题破解:多层级运维的“中国解法”

在全球化的商业浪潮中,集团型客户的业务布局日益广泛,涉及跨省甚至跨国的多个分支机构和业务节点。这种跨域管理的模式给企业的运维监控带来了前所未有的挑战。多个分支机构和业务节点运维调整首先,不同地区的网络环境差异巨大。从国内不同省…

pandas读取复合列名列头及数据和处理

pandas读取复合列名列头及数据和处理1. 效果图2. 源代码1. 效果图 原始excel: 读取1,2行为复合表头: 读取序号为1003一整行的数据,以及获取序号为1002行及1003行的C列复合表头列的值: 2. 源代码 import pandas …

制作一个简单的vscode插件

当前环境情况 操作系统:Windows 项目类型:VS Code 插件(TypeScript 编写) Node.js 版本:20.18.1 yarn 版本:1.22.22 npm 版本:10.8.2 npm registry:huawei ------- https://repo.hua…

分布式专题——10.2 ShardingSphere-JDBC分库分表实战与讲解

1 分库分表案例 下面实现一个分库分表案例,将一批课程信息分别拆分到两个库,四个表中: 需提前准备一个 MySQL 数据库,并在其中创建 Course 表。Course 表的建表语句如下: CREATE TABLE course (cid bigint(0) NOT N…

Digital Clock 4,一款免费的个性化桌面数字时钟

Digital Clock 4,一款免费的个性化桌面数字时钟 ** 功能 ** :一款免费的桌面数字时钟工具,支持多种皮肤、透明度调节和字体样式自定义,时钟可自由拖动,支持设置闹钟、定时关机、显示自定义消息等功能,适合想…

学习Python是一个循序渐进的过程,结合系统学习、持续实践和项目驱动,

学习Python是一个循序渐进的过程,结合系统学习、持续实践和项目驱动,你会掌握得更好。下面我为你梳理了一个分阶段的学习路线和实用建议,希望能帮你高效入门并逐步提升。 🐍 Python学习指南:从入门到精通 &#x1f5…

vcpkg:面向C/C++的跨平台库管理工具软件配置笔记经验教程

1、什么是vcpkg 对于使用过Python进行程序设计的开发者们,大多都会对Python的各种库和依赖,仅仅通过几条简单命令行就完成配置的操作感到惊叹,非常的省事省力。反倒是C/C开发时,要是每个库都要自己下载源码编译或者对环境进行配置…

【Docker】常用帮忙、镜像、容器、其他命令合集(2)

【Docker】常用帮忙、镜像、容器、其他命令合集(2)博主有话说容器命令新建容器并启动列出所有的运行的容器退出容器docker run -it centos:7.0.1406 /bin/bash指令解析docker exec -it ... bash 、docker run -it ... bash、docker attach [容器] 的exit…

系统编程.9 线程

1.线程概述程序运行起来编程进程,进程由一个个线程构成。eg:没有启动的qq时一个程序,启动后登录qq,qq是一个进程,实际上进程什么都没做,只是提供了需要的资源,打开聊天框可以和别人进行通信&…

2.10组件间的通信

1.Vue组件的嵌套关系1.1认识组件的嵌套前面我们是将所有的逻辑放到一个 App.vue 中;在之前的案例中,我们只是创建了一个组件 App;如果我们一个应用程序所有的逻辑都放在一个组件中,那么这个组件就会变成非常的臃肿和难以维护&…

Mybatis-Plus学习笔记

目录 一、MyBatis-Plus简介 二、MyBatisPlus使用的基本流程: (1)引入MybatisPlus依赖,代替MyBatis依赖 (2)自定义Mapper继承BaseMapper ​编辑(3)在实体类上添加注解声明表信息…

Day22 用C语言编译应用程序

文章目录1. 保护操作系统5(harib19a)2. 帮助发现bug(harib19b)3. 强制结束应用程序(harib19c)4. 用C语言显示字符串(harib19e)5. 显示窗口(harib19f)1. 保护操…

简单学习HTML+CSS+JavaScript

一、HTML HTML被称为 超文本标记语言&#xff0c;是由一系列标签构成的语言。 下面介绍HTML中的标签&#xff1a; &#xff08;一&#xff09;HTML文件基本结构 <!DOCTYPE html><html><head><title>Document</title></head> <body&…

强化学习中重要性采样

PPO 中重要性采样 https://github.com/modelscope/ms-swift/blob/main/docs/source/Instruction/GRPO/GetStarted/GRPO.md乐&#xff0c;这个网页中是的groundtruth是错误的&#xff08;可能是为了防止抄袭&#xff09;。一些例子 0. 池塘养鱼的一个例子 想象一下&#xff0c;你…

《树与二叉树详解:概念、结构及应用》

目录 一. 树的概念和结构 1.1 树的基本概念 1.2 树的结构特点 二. 树的表示方法和实际运用 2.1 孩子 - 兄弟表示法&#xff08;Child-Sibling Representation&#xff09; 2.2 树的实际应用场景 三. 二叉树的概念 3.1 二叉树的核心定义 3.2 二叉树的基本分类 四. 二叉…

Qt/C++,windows多进程demo

1. 项目概述 最近研究了一下Qt/C框架下&#xff0c;windows版本的多进程编写方法&#xff0c;实现了一个小demo。下面详细介绍一下。 MultiProcessDemo是一个基于Qt框架实现的多进程应用程序示例&#xff0c;展示了如何在Windows平台上通过共享内存和事件机制实现进程间通信。该…

Android SystemServer 系列专题【篇五:UserController用户状态控制】

本篇接着SystemServer的启动流程&#xff0c;围绕SystemServer最后阶段关于主用户的启动和解锁的流程&#xff0c;作为切入点&#xff0c;来看看SystemServer是如何讲用户状态同步到所有的系统级服务中。ssm.onStartUserssm.onUnlockingUserssm.onUnlockedUser本篇先介绍UserCo…

推荐使用 pnpm 而不是 npm

npm 的局限性 磁盘空间浪费在 npm 早期版本中&#xff0c;每个项目的node_modules目录都会完整复制所有依赖包&#xff0c;即使多个项目依赖同一个包的相同版本&#xff0c;也会重复存储。这导致磁盘空间被大量占用&#xff0c;随着项目数量的增加&#xff0c;存储成本显著上升…

Transformer实战(18)——微调Transformer语言模型进行回归分析

Transformer实战&#xff08;18&#xff09;——微调Transformer语言模型进行回归分析0. 前言1. 回归模型2. 数据处理3. 模型构建与训练4. 模型推理小结系列链接0. 前言 在自然语言处理领域中&#xff0c;预训练 Transformer 模型不仅能胜任离散类别预测&#xff0c;也可用于连…