Introduction
I caught A–flu one weekend and was too tired to think about anything serious. Between fever spikes and boredom, I noticed a couple of VNPT MyTV Smartbox 2 units (Amlogic S805) that had been sitting untouched for years. They originally ran Android 4.4 — far too outdated to be useful now — but still perfectly functional pieces of hardware.
I cracked one open. The inside was far better than expected for a low-cost IPTV box: clean PCB layout, solid soldering, proper shielding, stable power rails, and easy UART pads placed exactly where you want them. Once connected, the board showed a short one-second U-Boot window. If I didn’t interrupt it in time, it would simply continue into Android and drop me directly into a root shell — unexpectedly convenient.
From there, the idea was simple: turn these obsolete Android boxes into small Debian/Armbian machines. Nothing serious — just a side quest while recovering.
This article is not a step-by-step guide. It is simply a record of what I tried, what worked, and what didn’t during the process of making Debian boot on this hardware.
The Easy Part
Before things got complicated, the first board behaved perfectly. I documented both sides of the PCB and marked the pins that are useful for anyone interested in eMMC wiring — D0, CLK, CMD, and the 3.3V rail. The backside also has a neat “1701” printing, suggesting the board was manufactured in week 01 of 2017. For a cheap IPTV device, the layout is surprisingly clean and serviceable.

For the initial test, I downloaded an image from
https://github.com/hzyitc/armbian-onecloud.
For loading Armbian manually, I stopped at the U-Boot prompt and used the following command set.
|
|
It booted immediately on the first try, but with major limitations: no WiFi, no GPU acceleration, and even the internal eMMC wasn’t detected. It only ran properly from the SD card, so that wasn’t good enough.
I switched to an older build instead:
Armbian_5.99_Aml-s805_Debian_buster_default_3.10.108_minimal.img, which uses the original Amlogic 3.x kernel. This one worked far better. The system booted cleanly, and after adjusting a few DTB settings, WiFi came up as well. Everything felt simple and straightforward — at that point I thought the work was easy and should be done soon.
The Unexpected Wall
The strange board
After the smooth progress on the first unit, I moved on to the second Smartbox 2 — this one had a manufacturing code 1832 (week 32 of 2018). Same board revision, same SoC, same memory chips, same layout. I assumed it would behave identically.
I was wrong.
I flashed the exact same Armbian images, used the same SD card, same UART setup, and the same U-Boot commands.
No matter how many times I tried, it refused to boot anything other than its stock Android.
The system always stopped right after U-Boot printed: Starting kernel
And then: nothing.
No HDMI output, no kernel logs, not even UART noise. Changing kernel log level, adding earlyprintk, modifying console settings, or forcing init to a busybox shell made no difference.
Boot log
Click to expand boot log
|
|
This behavior matched exactly what another person reported online:
https://forum.armbian.com/topic/33667-amlogic-s805-image/
The symptoms are identical:
U-Boot runs normally, then the kernel simply never starts.
At this point, I suspected something deeper than a bad SD card or wrong DTB.
Everything pointed to U-Boot itself.
Attempts to Fix It (All Failed)
Loading U-Boot via USB Burning Protocol (update tool)
For this test I used the open-source Amlogic USB burning utility from:
https://github.com/Stane1983/aml-linux-usb-burn
The tool provides a userspace binary named update, which communicates with the SoC’s USB Download Mode and can upload binaries directly into RAM and execute them.
This is the same protocol used by the official Amlogic Windows “USB Burning Tool”, but exposed in a CLI form.
Because the VNPT Smartbox 2 uses an Amlogic M8/M8B (S805) chip, I followed the procedure documented in Amlogic Update USB Tool User Guide — Section 4.1.2:
|
|
This sequence should:
- Initialize DRAM
- Load a compressed U-Boot (TPL/SPL) blob
- Decompress it into RAM
- Execute the newly uploaded U-Boot entirely from USB
I repeated this procedure with multiple U-Boot images taken from various S805 boards:
- MXQ S805
- M201/M201D
- Tronsmart S85
- ENY M8B
- Several community-built S805 U-Boots
Every attempt behaved the same: right after update run 0x10000000, the target board instantly rebooted. There was never any UART output from the uploaded U-Boot, and the reboot happened so fast that even the ROM banner did not change.
Burning U-Boot into SD Card for External Boot
I also tried forcing the board to boot an external U-Boot from a microSD card. First, I used AML Boot Card Maker to generate a proper Amlogic boot SD with u-boot.bin written to the first sectors. Then I repeated the process manually using dd, writing both community S805 U-Boot binaries and the bootloader dump from my working 1701 board.
No matter how the SD card was prepared, the 1832 board completely ignored it — no UART output, no fallback, no SD boot attempts at all.
Full eMMC Transplant and Bootloader Replacement
Since USB and SD card boot were both blocked, the next step was the most invasive one: desoldering the eMMC from the 1832 board to rewrite the bootloader externally. I removed the eMMC chip, dumped its contents with an external reader, and compared it against the fully working 1701 board. Amlogic stores U-Boot in three locations: boot0, boot1, and the first few megabytes of the user area (the “bootloader” partition, usually the first ~4 MB). Because all three regions must match, I replaced boot0, boot1, and the user area with the known-good data from the working device.
With the cloned bootloader installed, the board failed instantly. UART printed only the BootROM diagnostic:
|
|
This line means:
- BOOT:0 → try internal eMMC
- INIT:0 → eMMC detected
- READ:0 → read OK
- CHECK:FFFFBF00 → signature/hash verification failed
- BOOT:1 / INIT:10 → SD card not present
- USB:3 → USB Burning mode available but not connected
I then tried a safer variant: keep the original boot0/boot1, only replace the user-area bootloader. This allowed U-Boot to start, but the moment I ran the kernel with bootm, U-Boot printed:
|
|