Skip to content

Instantly share code, notes, and snippets.

@vagran
Last active August 31, 2024 10:09
Show Gist options
  • Save vagran/40ae23d996fc6ee84be6c8beaa7cf41c to your computer and use it in GitHub Desktop.
Save vagran/40ae23d996fc6ee84be6c8beaa7cf41c to your computer and use it in GitHub Desktop.
Booting AArch64 Arch Linux on NanoPI A64

Valid for most recent SW version as of August 2024.

Install packages on Ubuntu 22.04:

apt-get install g++-10-aarch64-linux-gnu device-tree-compiler libgnutls28-dev
export CROSS_COMPILE=aarch64-linux-gnu-

ATF:

git clone clone --depth 1 --branch master https://github.com/apritzel/arm-trusted-firmware.git
cd arm-trusted-firmware
make PLAT=sun50i_a64 bl31
export BL31=`pwd`/build/sun50i_a64/release/bl31.bin

U-boot:

git clone --depth 1 --branch master git://git.denx.de/u-boot.git
cd u-boot
make nanopi_a64_defconfig
make -j 16

MKIMAGE=`pwd`/tools/mkimage

SD card install:

sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=1
sudo fdisk /dev/mmcblk0
# make linux partition with 1MB offset
...
sudo mkfs.ext4 /dev/mmcblk0p1

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8
wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
mkdir mnt
sudo mount /dev/mmcblk0p1 mnt
sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C mnt

mnt/boot/boot.cmd:

setenv load_addr "0x45000000"
setenv overlay_error "false"
setenv rootdev "/dev/mmcblk0p1"
setenv verbosity "1"
setenv rootfstype "ext4"
setenv console "both"

setenv bootargs "root=${rootdev} rw rootwait rootfstype=${rootfstype} ${consoleargs} consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} usb-storage.quirks=${usbstoragequirks} ${extraargs} ${extraboardargs}"

load ${devtype} ${devnum} ${fdt_addr_r} ${prefix}dtbs/${fdtfile}
fdt addr ${fdt_addr_r}
fdt resize 65536

load ${devtype} ${devnum} ${ramdisk_addr_r} ${prefix}uInitrd
load ${devtype} ${devnum} ${kernel_addr_r} ${prefix}Image

booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
sudo $MKIMAGE -C none -A arm -T script -d mnt/boot/boot.cmd mnt/boot/boot.scr
sudo $MKIMAGE -A arm -T ramdisk -C none -n uInitrd -d mnt/boot/initramfs-linux.img mnt/boot/uInitrd

dtbs/allwinner/sun50i-a64-nanopi-a64.dtb should be replaced by corresponding file from Armbian image (or just directory and file be created instead of dtbs from Arch tarball). Otherwise IPv4 packets are not transmitted for some reason (IPv6 works).

Serial console:

python3 -m serial.tools.miniterm --raw --eol LF /dev/ttyUSB0 115200

https://wiki.amarulasolutions.com/bsp/sunxi/a64/npi-a64.html

https://linux-sunxi.org/Bootable_SD_card

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment