AArch64教程第一章

AArch64教程第一章AArch64教程第一章AArch64是一个新的64位模式,它是ARMv8架构下的一部分,它于2011年随着ARM发布。它被逐步部署于智能手机和服务器。所以我认为现在学习一点关于此架构的知识是比较好的。硬件目前,有ARMv6/ARMv7的单板电脑是比较容易获得的,其中最流行的一个选择是树莓派。相反,支持64位ARMv8模式的单板电脑就没有那么多了,但是它们最近也慢慢变得流行了起来。例如,Pine64,ODROID-C2,Dragonboard410c,等等。它们中的任何一种都可以做64位开发,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

AArch64教程第一章

AArch64是一个新的64位模式,它是ARMv8架构下的一部分,它于2011年随着ARM发布。它被逐步部署于智能手机和服务器。所以我认为现在学习一点关于此架构的知识是比较好的。

硬件

目前,有ARMv6/ARMv7的单板电脑是比较容易获得的,其中最流行的一个选择是树莓派。

相反,支持64位ARMv8模式的单板电脑就没有那么多了,但是它们最近也慢慢变得流行了起来。例如,Pine64,ODROID-C2, Dragonboard 410c, 等等。它们中的任何一种都可以做64位开发,但是对于指定电路板的系统开发还是有点不同。

注意:树莓派3有一个实现ARMv8 64位模式的CPU(Cortex-A53),技术上是能够运行一个64位系统。但是由树莓派基金会提供的软件系统只能运行32位,并且还没有官方计划提供64位系统
更新:SUSE由一个64位的OpenSUSE发布系统,该系统能够运行在树莓派3上。Arch也由一个64位的版本能够安装在树莓派3上。

软件

是否意味着没有硬件则没办法运行AArch64?当然不,我们能够通过交叉工具链和用户模式下的QEMU做很多关于64位的事情。

Ubuntu 16.04的例子

只需要安装QEMU和一个AArch64的交叉工具链

$sudo apt-get install qemu-user gcc-aarch64-linux-gnu

现在测试你能运行一个”Hello world”的C程序。创建一个hello.c,并在该文件中写入以下的代码。

#include <stdio.h>
int main(int argc, char *argv[])
{
  printf("Hello AArch64!\n");
  return 0;
}

现在用前面我们安装过的AArch64的交叉编译器编译它(-static标志很重要)

$aarch64-linux-gnu-gcc -static -o hello hello.c

检查它是一个AArch64的二进制

$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, for GNU/Linux 3.7.0, BuildID[sha1]=97c2bc66dbe4393aab9e4885df8e223a6baa235a, not stripped

尝试去运行它应该会有一些令人迷惑的错误导致的失败

$ ./hello
-bash: ./hello: No such file or directory

但是我们能够用先前安装的AArch64下的QEMU运行它

$ qemu-aarch64 ./hello
Hello AArch64!

耶!

注意:如果你使用这个选项,记得总是使用qemu-aarch64去运行你的程序。

我们第一个AArch64的编译程序

让我们写一个非常简单的程序,该程序只是返回一个2的错误码

//first.s
.text
.globl main
main:
	mov w0, #2
	ret

让我们编译它

$aarch64-linux-gnu-as-c first.s

现在链接它,为了方便起见,我们会用gcc

$aarch64-linux-gnu-gcc -static -o first first.o

运行它,并且检查返回值

$ ./first             # or use qemu-aarch64 ./first
$ echo $?
2

是的!

让我们回顾一下上面的每行代码

//first.s
.text

行1是一个在例子中使用的文件名的注释。任何一个跟随“//”的行都是注释,并且会被忽略。行2是一个汇编指示器,该指示器意思是“现在来到了程序的指令”。这是因为我们能在汇编器文件中表达数据。(数据在.data指示之后)

.globl main

这时另一个汇编器指示,该指示表明main是一个全局符号。这也意味着当构建一个最终的程序,这个文件会有一个全局的main标志,而这个标志是C库开始运行程序的地方

main:
	mov w0, #2 //w0 ← 2
	ret        // return

这时我们程序的入口。第六行是main标志(如上所述是一个全局的标志)。第七行和第八行是2个指令。第一个指令是设置寄存器w0里面的值为2(我们会在下一张看到什么是寄存器)。第二句式从main函数返回,我们的程序立刻结束。

当一个函数结束,w0寄存器内的内容被用来决定程序的错误码。这就是echo $0为什么会打印2。

参考文献

有关AArch64的相关文献可以在下面网址找到 ARM® Architecture Reference Manual ARMv8, for ARMv8-A architecture profile

这就是今天的内容。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181391.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 工程机械核心部件寿命预测前三名方案总结与2022年最新方案分享(万文详解)[通俗易懂]

    工程机械核心部件寿命预测前三名方案总结与2022年最新方案分享(万文详解)[通俗易懂]1.比赛学习方法论2.工业寿命预测赛题讲解2.1赛题背景2.2赛题任务和数据介绍2.3评测标准2.4初赛与复赛排行榜2.5数据分析2.6数据预处理2.7特征提取3.前三名数据预处理方法比较4.前三名特征工程方法比较4.1特征构建4.2特征选择5.前三名模型构建比较6.代码与数据7.2022年最新思路分享………

  • 13 个最好用的免费服务器和网络监控工具,不看吃亏!

    13 个最好用的免费服务器和网络监控工具,不看吃亏!1、GangliaGanglia是伯克利开发的一个集群监控软件。可以监视和显示集群中的节点的各种状态信息,比如如:cpu、mem、硬盘利用率,I/O负载、网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈现。Ganglia监控软件主要是用来监控系统性能的软件,如:cpu、mem、硬盘利用率,I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源…

  • java soa是什么_什么是SOA呢

    java soa是什么_什么是SOA呢关于SOA(Service-OrientedArchitecture),最近多次听到这概念,有点懵,网上找了些资料,一起来看看。SOA的概念SOA是由Garnter1996年提出的概念(架构如图1所示),将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,目的是为了让软件变的有弹性,能够快速响应业务的需求,使开发人员以最…

  • leetcode 接雨水2_leetcode会议室

    leetcode 接雨水2_leetcode会议室题目链接给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9 提示:n == height.length0 <= n &lt

  • 单片机lcd1602液晶显示_为什么lcd1602不显示

    单片机lcd1602液晶显示_为什么lcd1602不显示单片机点亮LCD1602A液晶屏芯片型号:STC89C52RC液晶屏:LCD1602A效果图:字符对应的ASCII如下图所示:代码如下:;R0:命令R1:字符R2:行R3:列R5R6R7:延时ORG0000HLJMP0030HORG0030HINIT:MOVR0,#38H LCALLW_M LCALLDELAY MOVR0,#08H LCALLW_M LCALLDELAY MOVR0,#01H LCALLW_M

  • grub引导安装ubuntu_linux开机进grub怎么修复

    grub引导安装ubuntu_linux开机进grub怎么修复Normal07.8磅02falsefalsefalseMicrosoftInternetExplorer4