Android TV Box to Linux appliance
Introduction and why bother
There is a high chance that the person reading this has bought in the past one of those cheap android boxes to transform a television into a “smart” television, making it possible to watch more than cable channels. After the initial excitement, it might have gotten retired for being too cumbersome to use, low power or simply unsupported by every app after a while. What if you could save it from being E-waste?
Credits & inspiration
The idea to look for my dusty android box came after watching the video Linux on a TV Box - Raspberry Pi Alternative? from TheSillyWorkshop a few months ago. This seemed like something right up my alley, since I hate having devices that me or my family bought to be used once and forgotten.
With this in mind, I looked around for my TV Box, noted the model name and went online finding out if anyone had already had installed an alternative OS to the thing. That’s when I found the Turning an Amlogic S912 Android TV Box Into a Linux Appliance blog post from sigmdel.ca/michel, which was really useful during this whole experience. I would recomend to everyone to have a look at the blog since there are topics like networking, microcontroller reviews or other linux boxes examples.
The box itself
My former Android box is the Beelink GT 1, adquired around 2017. The thing never had much use, outside of a few streaming sessions and it was quickly forgotten. It came with an IR transmitter controller and a 10 Watts (5V, 2A) rated power brick, with a barrel connector to the box. As for internal specifications:
| Specifications | Beelink GT1 |
|---|---|
| OS | Android 6.0.1 |
| Kernel | 3.14.29 |
| CPU | Amlogic S912 |
| GPU | Mali-T820 |
| RAM | 2 GB |
| Storage (eMMC) | 16 GB |
| Storage (microSD) | 512 GB Max. |
| Ethernet | Gigabit LAN |
| Wireless | Wi-Fi AC and BT4.0 |
| Video out | HDMI 2.0 |
| USB | 2 x USB 2.0 |
| Power | 10 Watts (5V, 2A) |
“Out-of-the-box” experience
Originally, it came with Android 6 with a sort of TV launcher pre-configured (maybe Android TV?) but after so many years, using it is very anoying since software is not supported and even using a third-party app store like Aurora Store results in downloading uncompatible app packages. The most luck I have had was downloading though the F-droid webpage directly, for example CPU Info. I tried downloading apps such as Grayjay for the architecture of the Beelink GT1 but I got met with “Parse error”, and Newpipe got me a “App not installed” message after installation. Furthermore, the web version of youtube is not supported on the default browser, and I was not able to install a new one. What a nightmare!

Other OS
Luckily, during my research I found out there are people out there that had installed other OS to this box. Sometimes it’s just a new ROM to have an updated version of AndroidTV (like on this post from XDA Forums), but other times is a full Linux system (found a video installing Linux with a desktop environment on a TV box with the same SoC).
Among these OS were Libreelec, a media player focused OS and Armbian (Linux for ARM development boards but with unofficial support for other boards like TV boxes).
Libreelec
The first OS that I tried to use on the Beelink GT1 was Libreelec, which according to its wiki page identifies itself as:
(…) a minimalist ‘Just enough OS’ Linux distribution for running Kodi
This seemed like a nice way to use the TV box, since initialy I didn’t want to change it’s function, and so I wanted to have it connected to the TV and be a media box.
Instalation
For installation, I just followed the official instructions from the wiki and adapted them to my board/TV box. At the time, I think I successfully used the dtb for GT1 Ultimate, since the only difference is the RAM and EMMC size.
I then installed the image into an USB drive with 32GB and pressed the reset button accessible underside of the case of the Beelink GT1. I actually removed it from the case to access this button easier.
After connecting power while having the reset button pressed, the system turned on and booted from USB (I used the back USB connector) with success into Libreelec boot screen.
Usage
However, it seems that most of my excitement was quickly shut down when I realized there were few apps (plugins) that I was interested in and that actually worked. Youtube plugins require a key linked to an youtube account to use them (which I was not interested in) and I found the interface hard to navigate and not as enjoyable to use, since everything felt slow.
Some other video providers (LBRY or Peertube) worked with their plugins but there was constant loading during browsing. Even worse, the content had some weird/suggestive NSFW thumbnails with unrelated titles for some videos, which I found repulsing.
Some instances of Peertube had linux content, even from creators I follow in Youtube, and seem ok in terms of content, but the loading and seeking ahead in the video would get stuck in a single frame and not load even after some minutes of waiting.

I also experimented with TV channels, but the most I was able to do was watch a Demo TV channel, which played a Big Buck Bunny video, and while it was smooth while playing it was getting constantly interrupted to buffer (network or video processing?).

Aside from video, I experimented with other plugins just for curiosity and found a terrible way to read wikipedia articles via its plugin:

Finally, I found that Libreelec was not for me and it was time to move on.
Armbian
At the time, I was thinking that Armbian would be the last opportunity to have the TV box do something useful. It could be used as a simple file server or DNS ad-blocker, and probably pretty efficient.
For trying out Armbian, I was guided by the following pages:
- sigmdel.ca/michel: linux on aml912
- i12bretro: Installing Armbian on Amlogic S912 Android TV Box (Tanix TX9s)
- Armbian forum: Installation Instructions for TV Boxes with Amlogic CPUs
I downloaded an image for my board from the armbian website and then flashed it into an USB drive. Next, I mounted the BOOT partition and changed some things:
nano extlinux/extlinux.conf.bak
label Armbian
kernel /zImage
initrd /uInitrd
fdt /dtb/amlogic/meson-gxm-beelink-gt1.dtb
append root=UUID=d7438465-50f5-4136-bbca-72deb63e37d2 rootflags=data=writeback rw rootfstype=ext4 console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 loglevel=1 voutmode=hdmi disablehpd=false overscan=100 sdrmode=auto
nano uEnv.txt
LINUX=/zImage
INITRD=/uInitrd
FDT=/dtb/amlogic/meson-gxm-beelink-gt1.dtb
APPEND=root=UUID=f9a4ae8c-c557-4163-bfec-3b00a35a4f86 rootflags=data=writeback rw rootfstype=ext4 console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1
I still have to try to install and run the armbian image with a desktop environment available here https://armbian.com/boards/aml-s9xx-box
USB booting
Performing the same steps as when trying out Libreelec, we can boot to Armbian via USB by powering up the TV box while holding the reset button. After a while, we are met with this screen:

After this, it will prompt us to create a root password
Moving the image to the internal eMMC
For this, we start by backing up the eMMC flash memory before overwriting it (following this chapter):
lsblk
sudo umount /dev/sda1
sudo dd if=/dev/sde of=armbian_22.08_backup3.img bs=512 count=6291456 status=progress
To expand the USB partition (and copy the eMMC backup to there), use the Partition Expansion Tool
sudo armbian-tf
After this, we can perform the eMMC backup using the eMMC system backup/restore service:
sudo ddbr
A backup with the name BACKUP-arm-64-emmc.img.gz was created.
And then install Armbian to the eMMC:
sudo armbian-install
After this, we poweroff, remove the USB drive and start the Beelink GT1 again. For curiosity, here is the fastfetch of the system after installation!

General use
TODO
Benchmarks
TODO
Other links I might have to take a look at: https://forum.armbian.com/topic/33676-installation-instructions-for-tv-boxes-with-amlogic-cpus https://github.com/ophub/amlogic-s9xxx-armbian/tree/main/build-armbian