QEMU ARM64 Uboot
以virt machine 为例,
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make qemu_arm64_defconfig
make -j16
make CROSS_COMPILE=aarch64-linux-gnu- -j2
QEMU启动
qemu-system-aarch64 \
-M virt \
-cpu cortex-a72 \
-smp 2 \
-m 2048M \
-kernel u-boot \
-nographic
qemu-system-aarch64: unable to find CPU model 'cortex-a72'
qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 2 -m 2048M -kernel u-boot -nographic
qemu-system-aarch64 -M virt -cpu cortex-a53 -m 2048M -kernel u-boot -nographic
qemu quit:
ctrl+A -> wait a moment ->+X
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* relocate - common relocation function for AArch64 U-Boot
*
* (C) Copyright 2013
* Albert ARIBAUD <albert.u.boot@aribaud.net>
* David Feng <fenghua@phytium.com.cn>
*/
#include <asm-offsets.h>
#include <config.h>
#include <elf.h>
#include <linux/linkage.h>
#include <asm/macro.h>
//ARM64 有34个寄存器,包括31个通用寄存器,SP,PC,CPSR.
//x0-x30 64bit 通用寄存器,如果有需要可以当做32bit使用:W0-W30.
//其中x0 - x7:这 8 个寄存器主要用来存储传递参数.如果参数超过 8 个,
//则会通过栈来传递; x0 也用来存放上文方法的返回值.
//FP(x29) 64bit 保存栈帧地址(栈底指针),指向当前方法栈的底部。
//LR(x30) 64bit 通常称x30为程序链接寄存器,因为这个寄存器会记录着当前方法的调用方地址 ,
//即当前方法调用完成时应该返回的位置。例如我们遇到 Crash 要获取方法堆栈,
//其本质就是不断的向上递归每一个 x30 寄存器的记录状态(也就是栈上 X30 寄存器的内容)
//来找到上层调用方。
//SP 64bit 保存栈指针,使用 SP/WSP来进行对SP寄存器的访问。
//指向当前方法栈的顶部。
//PC 64bit 程序计数器,俗称PC指针,总是指向即将要执行的下一条指令,
//在arm64中,软件是不能改写PC寄存器的。
//CPSR 64bit 状态寄存器
ENTRY( fuck_code )
LDR X10, =0x42000000
MOV W0, #21
CMP W0, #20
MOV W1, #20
CSEL W0, W0, W1, LS
STR W0, [X10, #0x00]
STR W1, [X10, #0x08]
MOV W1, #0xA
CMP W0, W1
CSEL W0, W0, W1, CS
STR W0, [X10, #0x10]
STR W1, [X10, #0x18]

最低0.47元/天 解锁文章
1058

被折叠的 条评论
为什么被折叠?



