Devicetree
Prerequisites
This driver assumes that, SErrors and exception are routed to Firmware running that EL3
1. Comment the below line in the below function
cm_init_context_common(cpu_context_t *ctx, const entry_point_info_t *ep)
#ifndef HANDLE_EA_EL3_FIRST
/* Explicitly stop to trap aborts from lower exception levels. */ /* scr_el3 &= ~SCR_EA_BIT; */
#endif
The above line routes the exceptions generated at lower levels to EL3
Othere wise, at the time of error injection, we won?t get any exception
2. Give read write access permissions to the registers CPU Auxiliary Control Register, EL1
And L2 Auxiliary Control Register, these are needed to enable error injection.
Do this in Firmware running at EL3
In our case we have added that in ATF running at EL3
In bl31/aarch64/bl31_arch_setup.c
void bl31_arch_setup(void) val = 0x7f;
asm volatile(«msr actlr_el3, %0» :: «r» (val));
asm volatile(«msr actlr_el2, %0» :: «r» (val));
>
Eror injection on L1 Cache:
After linux booted run the below command #echo 1 > /sys/devices/system/edac/cpu/inject_L1_Cache_Error because of double bit error injection, cache data will corrupt causing Abort exceptions (SError) and routed to firmware running at EL3 Verification: use xsdb tracing, to get call trace Xsdb#stop Xsdb#bt 0 0xfffeda00 sync_exception_sp_elx(): bl31/aarch64/runtime_exceptions.S, line 206 1 0xfffeda04 sync_exception_sp_elx()+4: bl31/aarch64/runtime_exceptions.S, line 206
Error injection on L2 Cache:
after linux booted run the below command #echo 1 > /sys/devices/system/edac/cpu/inject_L2_Cache_Error because of double bit error injection, cache data will corrupt causing Abort exceptions (SError) and routed to firmware running at EL3 Verification: Xsdb#stop Xsdb#bt 0 0xfffeda00 sync_exception_sp_elx(): bl31/aarch64/runtime_exceptions.S, line 206 1 0xfffeda04 sync_exception_sp_elx()+4: bl31/aarch64/runtime_exceptions.S, line 206
Changelog:
Related Links
How to install the aarch64 toolchain for armv8 cortex-a53 on Debian?
I’m wanting to start low level programming on ARM chips. I’ve installed qemu and followed a few example programs for hello world type stuff, but now I want to target the latest Raspberry Pi, which has the ARMv8 cortex-a53 and neon-fp-armv8 FPU. I’m currently running Debian:
$ lsb_release -a No LSB modules are available. Distributor ID: BunsenLabs Description: BunsenLabs GNU/Linux 8.5 (Hydrogen) Release: 8.5 Codename: bunsen-hydrogen $ cat /etc/debian_version 8.5
binutils-arm-none-eabi gcc-arm-none-eabi gdb-arm-none-eabi
However, when I try to compile with -mcpu=cortex-a53 , I receive the following error: arm-none-eabi-gcc: error: unrecognized argument in option ‘-mcpu=cortex-a53’
$ arm-none-eabi-gcc --version arm-none-eabi-gcc (4.8.4-1+11-1) 4.8.4 20141219 (release)
I assumed I had an older GCC that did not contain that target CPU, so I tried to download the source for binutils, gcc, and gdb but I am unable to build binutils. It always fails when trying to make all . binutils configuration:
$../../src/binutils-2.26.51/configure \ --target=arm-none-eabi \ --disable-nls
$make -j4 checking for bison. /home/nathan/development/tools/arm/src/binutils-2.26.51/missing bison -y checking for flex. /home/nathan/development/tools/arm/src/binutils-2.26.51/missing flex checking lex output file root. configure: error: cannot find output from /home/nathan/development/tools/arm/src/binutils-2.26.51/missing flex; giving up Makefile:3545: recipe for target 'configure-binutils' failed make[1]: *** [configure-binutils] Error 1 no checking for bison. /home/nathan/development/tools/arm/src/binutils-2.26.51/missing bison -y checking for flex. /home/nathan/development/tools/arm/src/binutils-2.26.51/missing flex checking lex output file root. configure: error: cannot find output from /home/nathan/development/tools/arm/src/binutils-2.26.51/missing flex; giving up Makefile:4834: recipe for target 'configure-gas' failed make[1]: *** [configure-gas] Error 1 make[1]: Leaving directory '/home/nathan/development/tools/arm/build/binutils-2.26.51' Makefile:844: recipe for target 'all' failed make: *** [all] Error 2
What are the proper steps I need to take in order to get a toolchain setup to compile for an aarch64 cortex-a53 architecture? Edit 1 Discovered through the comments, I need to install the aarch64 toolchain, not the arm toolchain. Still clueless.
Supported platforms
These images are a great way to quickly get started with Ubuntu Core on a Raspberry Pi, for example, or to explore Ubuntu Core’s features and evaluate its potential. Canonical produces official images for the following platforms:
Platform / model name | Hardware / CPU | Cores / memory / storage | Image links |
---|---|---|---|
Raspberry Pi 2 ubuntu-core-22-pi ubuntu-core-20-pi ubuntu-core-18-pi2 | Broadcom BCM2836 ARM Cortex-A7 | 4 cores | 1 GB RAM no built-in storage | core-22-pi-armhf core-20-pi-armhf core-18-pi2-armhf |
Raspberry Pi 3 and Zero 2 W ubuntu-core-22-pi ubuntu-core-20-pi ubuntu-core-18-pi3 | Broadcom BCM2837 ARM Cortex-A53 64-bit | 4 cores | 1 GB RAM no built-in storage | core-22-pi-armhf core-22-pi-arm64 core-20-pi-armhf core-20-pi-arm64 core-18-pi3-arm64 core-18-pi3-armhf |
Raspberry Pi CM 3 ubuntu-core-22-pi ubuntu-core-20-pi ubuntu-core-18-cm3 | Broadcom BCM2837 ARM Cortex-A53 64-bit | 4 cores | 1 GB RAM no built-in storage | core-22-pi-armhf core-22-pi-arm64 core-20-pi-armhf core-20-pi-arm64 core-18-cm3-arm64 |
Raspberry Pi 4 ubuntu-core-22-pi ubuntu-core-20-pi ubuntu-core-18-pi | Broadcom BCM2711 Cortex-A72 (ARM v8) 64-bit | 4 cores | 1/2/4/8 GB RAM no built-in storage | core-22-pi-armhf core-22-pi-arm64 core-20-pi-armhf core-20-pi-arm64 core-18-pi4-arm64 core-18-pi4-armhf |
Intel NUC ubuntu-core-22-amd64 ubuntu-core-20-amd64 ubuntu-core-18-amd64 | Intel Core i3, i5, i7 64-bit | >8 cores | >32 GB RAM no built-in storage | core-22-amd64 core-20-amd64 core-18-amd64 |
Generic x86 / KVM ubuntu-core-22 ubuntu-core-20 ubuntu-core-18 | Full x86 32/64 bit CPU virtualisation | as defined | core-22-amd64 core-20-amd64 core-18-amd64 core18-i386 |
Ubuntu community members also work with, and produce, images for other platforms and CPUs. Refer to these individual projects for more information on what other unofficial images might work for your use cases.
Installation guides
See Installing Ubuntu Core for generic installation instructions, and Installation guides for links to platform-specific guides.