For those who are interested in running your software on AArch64 hardware directly, without any additional firmware or operating system in between, I've developed a boot loader and tool chain to test and execute unikernels on a Pine64:
Hmm, what are the advantages of using this bootloader over U-Boot? Or is it simply that U-Boot doesn't support Ethernet or some other peripherals on the A64 SoC?
On one hand it is very light weight: less than 4k LOC and 16 kB executable (which fits completely in the first stage of SRAM), so it is easier to grasp compared to U-Boot: https://github.com/trini/u-boot/search?q=sunxi&type=Code
On the other hand, it has different goals and is just meant to load a blob of instructions over ethernet (faster evaluation cycle) not an entire Linux kernel with all the POSIX / UNIX stuff from SD. So you have far more control but are also on a lower level, somewhat like developing for a more powerful Arduino.
This article is very short and shallow. I mean... you can apply it to any architecture that Qemu supports (and there are many). Altogether there are 2 assembler instructions in the whole article. Not much of an exploration...
Qemu usermode emulation is nice, but the full-hardware emulation is way more interesting. Eg. in https://github.com/dpc/titanos - toy kernel for Aarch64 written in our lord-and-saviour programming language: Rust, I use Qemu to run kernel and unittests for that kernel. With Qemu gdb stubs it's like having a software-defined hardware platform with a JTAG debugger attached. `make run` and it runs - no need to plug cables and press reset buttons.
I recommend the Pine 64 board. I bought one (2GB RAM, gigabit ethernet model, for 29$ [1]), and despite running its 4 cores at just 1.2GHz, it is quite speedy, and rock solid running Debian 24/7 as ARM64 build server.
I think you're better off with the Odroid and it's Amlogic CPU - the Pine 64 has an Allwinner CPU. You'll have fewer headaches getting kernels to build for and run on the Amlogic chip.
Except from HDMI almost everything is open or reverse engineered.
To me it was sill more attractive than the Ordroid-U3 with its Samsung chip, which boots only signed software and is totally undocumented. Same with the PI3 and its GPU code, which is needed to boot.
https://github.com/Lichtso/UnikernelExperiments