Debian GNU/Linux 13 (Trixie) on A64-Olinuxino

Started by Gast-2026-04-08, April 08, 2026, 05:01:39 PM

Previous topic - Next topic

Gast-2026-04-08

In case anyone is interested, here is a summary of how to bring Debian GNU/Linux 13.4.0 on A64-Olinuxino (Rev. H). Don't get your expectations too high, there remain two problems (Ethernet and graphics-performance, I guess), but maybe these ring a bell for someone, and maybe this someone can give a solution. Furthermore, everything I don't need is untested (GPIO, for example).

I may be a litte bit too detailed for some of you, but it may help others (some hints would have saved me some time; I started the first Olinuxino less than two weeks ago). At the end of this text, there are two references to the Debian-intallation-guide; in case you are new and want some context for trying to understand what we are doing here.

For the preparation, we (obviously) don't work on the A64-Olinuxino, but on another GNU/Linux-computer ("other computer", in the following).



*** Other computer ***

We need the following files (you may choose a different mirror-server for the first three, of course):

The net-installation (netboot/netinst) didn't run through due to a problem with Ethernet (see below), so I used this way.

Put the debian-13.4.0-arm64-DVD-1.iso on an USB-stick with ext4 (format and copy the file, no need for transfer the file with dd).

Generate the complete installation-image for the SD-card (you are welcome to use something else than dd):

zcat firmware.a64-olinuxino.img.gz partition.img.gz > hd-media.img
dd if=hd-media.img of=/dev/<SD-card> bs=8K status=progress
sync



*** A64-Olinuxino ***

Put the SD-card in your A64-Olinuxino, attach the installation-USB-stick and another USB-stick and power the device. Install the operating-system onto the other USB-stick.



*** Other computer ***

After installation, put the SD-card into the other computer. Now put the pure (without installer) U-Boot onto the SD-card (this will erase 1 GB of the SD-card, so no confusing remains of the hd-media.img in hexdump):

dd if=/dev/zero of=/dev/<SD-card> bs=1M count=1K status=progress
sync
gunzip a64-olinuxino.img.gz
dd if=a64-olinuxino.img of=/dev/<SD-card>
sync

(If you installed the operating-sytem onto the SD-card, you will need to adapt the previous step to not overwrite the partition-table and filesystem; for that, skip the first dd and append "seek=1 skip=1 bs=8K" to the second dd.)

Take the SD-card out and put it in again (so that the partition-table gets recognised). We put a filesystem onto the partition that is on the SD-card (the a64-olinuxino.img included a partition-table), so that we can later alter the U-Boot-configuration and save these changes:

mkfs.vfat /dev/<SD-card>1     # Don't forget the partition-number 1
sync

(If you installed the operating-sytem onto the SD-card, you should skip the previous step.)



*** A64-Olinuxino ***

Put the SD-card in your A64-Olinuxino, remove the installation-USB-stick (the other USB-stick remains; the one with your operating system) and power the device. Interrupt the boot-process. In the U-Boot-console, enter:

setenv bootargs console=tty1
setenv bootcmd run bootcmd_usb0
saveenv
reset

Omitting the first command may lead to no output via HDMI.

(If you installed the operating-sytem onto the SD-card, adapt the second setenv accordingly.)

The system should boot. During the first boot, you may encouter a message about Apparmor. Stay calm, it will vanish (at least here it did, after a few minutes).

We are finished.



There are, as initially written, (at least) two problems:

First, the GUI feels a bit slow (more than a bit). This is just a wild guess, but top reports a high cpu-load for Xorg, so maybe a missing driver. (I may be terribly wrong with this.)

The second problem is the Ethernet-connection. After the first few megabytes, the throughput drops to less than 100 KB/s. And stays that way. It does not stop, it just gets really slow. I encountered the same phenomenon when I first tried to install via netboot/netinst. During installation, the first operations went through (getting the package-lists and getting the first packages), but then it turned incredibly slow. The system did not hang, it responded normally. But the Ethernet-connection appeared to be slow (but no timeout).



I don't plan to look any further into this (at least not at the moment); Olimex released a new version of Olimage, based on Debian 12 (Bookworm), three days ago, so the end of support for Debian 11 (Bullseye) in August 2026 is not a problem any more.



In case you are wondering, why not just use the U-Boot-file a64-olinuxino.img.gz (instead of the hd-media.img), transfer the debian-13.4.0-arm64-DVD-1.iso with dd (not just copy in a filesystem) to an USB-stick and install from that USB-stick: I cannot say for sure, maybe I ran into the problem of a black screen during the start of GNU/Linux, which could be solved with "setenv bootargs console=tty1" in dem U-Boot, but I discovered that later, and I didn't try it again.

Helpful may also be
https://wiki.debian.org/InstallingDebianOn/Allwinner

You may also want to take a look at section 3.6.2 in
https://www.debian.org/releases/stable/armhf/ch03s06en.html
and section 5.1.5 in
https://www.debian.org/releases/stable/armhf/ch05s01en.html
(the description is missing in the intallation-guide for arm64, so look in the one for armhf).



Appendix (2026-04-10, original post was 2026-04-08):

In the meantime, I realised that the problem with the slow GUI may not be graphics-related, but simply a problem with the reading-performance of SD-cards (even with not the cheapest). I had the problem with slow GUI too with the Olimage based on Bookworm, and after olinuxino-sd-to-emmc it improved drastically, so maybe this will also help with the way described above.

Hint: After olinuxino-so-to-emmc, you have to remove the SD-card, otherwise GNU/Linux will boot from the SD-card. At least I didn't manage to convince the U-Boot to start GNU/Linux from the internal flash-memory. (As I'm writing this, maybe "run bootcmd_mmc1" would be the solution; I looked at a totally different place for a solution.) Removing the SD-card may seem obvious; yes, it is, if you think of it. But you may not think of it. I didn't in the first place.

LubOlimex

About hte part that you need to remove the SD card - I think it is the only way (or have corrupted or card that doesn't have valid image to boot from). It is related to the priority of boot in the eGON bootloder:

https://linux-sunxi.org/BROM#A10.2FA20
Technical support and documentation manager at Olimex

Roman

#2
Thank you for your write up! I will be sharing it with another person who is interested in instructions for installing Debian on A64-OLinuXino.

Quote from: Gast-2026-04-08 on April 08, 2026, 05:01:39 PMThe second problem is the Ethernet-connection. After the first few megabytes, the throughput drops to less than 100 KB/s. And stays that way. It does not stop, it just gets really slow. I encountered the same phenomenon when I first tried to install via netboot/netinst. During installation, the first operations went through (getting the package-lists and getting the first packages), but then it turned incredibly slow. The system did not hang, it responded normally. But the Ethernet-connection appeared to be slow (but no timeout).

The device tree file for A64-OLinuXino in Debian comes from upstream U-Boot and mainline Linux. Both have been reported to work with A64-OLinuXino without issues. However, when I got mine earlier this year, which is revision H as yours, I had the same issues as you. They are caused by the RX delay value not set, so that the Ethernet signal is not timed properly.

The upstream device tree file does not set an RX delay value. The same device tree files "sun50i-a64-olinuxino.dts" and "sun50i-a64-olinuxino-emmc.dts" in OLIMEX/linux-olimex repository on GiHub do not set it too. But the repository also contains additional device tree files for specific variants of the board. Those include "sun50i-a64-olinuxino-1G.dts", which sets the RX delay to 200 picoseconds for all variants. Those files were added on 18 May 2023.

&emac {
    pinctrl-names = "default";
    pinctrl-0 = <&rgmii_pins>;
    phy-mode = "rgmii";
    phy-handle = <&ext_rgmii_phy>;
    phy-supply = <&reg_dcdc1>;
    allwinner,tx-delay-ps = <600>;
    allwinner,rx-delay-ps = <200>;
    status = "okay";
};

Setting the RX delay is enough to fix the issue with the Internet connection dropping lots of packets and running slow.

This makes me wonder, if it was unnecessary to set it in the mainline Linux device tree file, when did it become necessary? Which revisions of the board require it besides revision H?

Per the bill of materials (BoM) and schematics of A64-OLinuXino in OLIMEX/OLINUXINO repository on GitHub, revisions of the board starting with revision B have KSZ9031RNXCC (consumer) or KSZ9031RNXIC-TR (industrial). It shows up in dmesg as "Micrel KSZ9031 Gigabit PHY". However, revision A of the board had RTL8211CL-GR instead. Is it the cause of the difference?

It is necessary to understand this to be able to choose the device tree correctly.

Edit: I have just noticed that the page for "Olimex A64-OLinuXino" at linux-sunxi wiki indicates that revision D in 2017 was fully supported by the upstream Das U-Boot and the mainline Linux kernel. However, revision D and revision H seem to have the same Gigabit PHY chip. So, the chip change is not the cause of the different device tree file being required. But what is the cause then?

LubOlimex

I can't remember what required it, but maybe it is this hardware change in revision E:

"Serial resistors were added to the Ethernet PHY's Tx lines for better EMI suppression and RLC filters to the clock lines."

But there was a lot of routing changes also with placement of components to reduce EMI from the Ethernet, so it could be just the routing changed and required different delays.
Technical support and documentation manager at Olimex