ZTE B860H: Getting Armbian into It
Hacker News

ZTE B860H: Getting Armbian into It

The user wants me to reformat a raw article about installing Armbian on ZTE B860H into clean Markdown. I need to follow the rules: break into paragraphs, add section headings, use lists and code blocks, preserve all facts, don't add intro/conclusion, don't repeat title as heading, output only Markdown.

Let me analyze the article structure:

  1. Title: "ZTE B860H: Getting Armbian into It" (but I shouldn't repeat as heading)
  2. Comments section (maybe ignore? The article starts with "Comments" then "ZTE B860H: Getting Armbian into it" again)
  3. Introduction/overview with caution about V1/V2 vs V5
  4. Requirements list
  5. Installation section with steps
  6. "To the box..." section about HDMI dongle and boot process
  7. "Making U-Boot permanent" section
  8. "Installing to eMMC" section with detailed steps and output
  9. Extra sections: zram, irqbalance, Trivia, Baffled?

I need to create appropriate headings. The article already has some headings in the text like "Requirements", "Installation", "To the box...", "Installing to eMMC", "Extra: Setting up zram", "Extra: Setting up irqbalance", "Trivia", "Baffled?". I should use those as ## headings.

I'll structure:

Requirements

Installation

1. Flashing the Armbian

2. Flashing the U-Boot

Flashing TL;DR

To the Box...

Making U-Boot Permanent

Installing to eMMC

Extra: Setting up zram

Extra: Setting up irqbalance

Trivia

Baffled?

But note: The article mentions "Extra: Setting up zram" and "Extra: Setting up irqbalance" but there's no content for them in the provided text. The text ends after the eMMC installation output. The user said "Preserve every fact, name, number, and quotation exactly as given." So I should include those headings but maybe note they're empty? Actually the article body provided doesn't include content for those extras. The raw text ends at the dd output. The initial list includes them but no content. I'll include the headings but with no content? The rule says "Preserve every fact... Never invent, add, remove, or reorder information." So I should keep the headings as they appear in the article's table of contents? The article starts with a list: "- Requirements - Installation - To the box... - Installing to eMMC - Extra: Setting up zram - Extra: Setting up irqbalance - Trivia - Baffled?" That's like a table of contents. I'll include those as headings, but for zram and irqbalance there's no content in the provided text. I'll still include the headings but maybe add a note? But I shouldn't add commentary. I'll just include the headings with no content, as the original article might have them but the provided text is truncated. However the user gave the entire article body? It ends at the dd output. The "Extra" sections are not present. I'll include them as headings but with no paragraphs. That's preserving the structure.

Also need to format code blocks, commands, etc. Use fenced code blocks for longer outputs, inline code for commands.

Let's start writing.

First, the article begins with "Comments" then "ZTE B860H: Getting Armbian into it". That might be a header from the blog. I'll ignore "Comments" and start with the intro paragraph.

I'll write:

Overview

This blog will cover the Armbian installation guide for B860H V1 / V2. Caution: This model MUST not be confused with V5, as both revision have an entirely different hardware inside. The method that's used here will not be requiring the set top box to be already rooted, or at most, outside of the stock rom. Assuming that the STB is still in the stock. At best, it's recommended to do all of the flashing in Linux desktop; otherwise the Windows equivalent exists, which I will talk about later.

Then the table of contents list? Actually the article includes a list of sections. I'll not repeat that list; instead use headings.

Requirements

  • A Personal Computer with microSD slot (otherwise, use microSD USB adapter. These will work)
  • A microSD card (Use class 10 microSD card if you're going to use this as main)
  • A specifically made HDMI Boot Dongle which you can make yourself or by purchasing an already premade one via online store (id: Shopee Indonesia | global: Tindie)
  • The actual box itself (B860H) that can still be powered on regardless the boot state (LED is orange, or green, or whatever. does not matter it's rooted, still in stock, or not).
  • Not copy and pasting blindly the attached commands

Installation

The B860H must use the HG680P U-Boot bootloader to work, which you can obtain from [here](save it as u-boot.bin). The following steps must be done in order.

1. Flashing the Armbian

You can obtain the Armbian image from ophub/amlogic-s9xxx-armbian, with each consisting of different distros. For example, as of the time of this writing:

  • resolute is a Ubuntu edition of Armbian OS
  • trixie is a Debian edition of Armbian OS

You will want to look for a release with the two keywords: s905x, and b860h. For example:

Armbian_26.11.0_amlogic_s905x-b860h_trixie_6.18.51_server_2026.09.14.img.gz

Once you have downloaded it, uncompress it:

gzip -k -d -v Armbian_26.11.0_amlogic_s905x-b860h_trixie_6.18.51_server_2026.09.14.img.gz

Note: Adjust the filename with the release that you have downloaded.

Insert a microSD card to be flashed on, check where it was located:

yonle@yonle:/mnt$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk0     179:0    0  58.6G  0 disk
├─mmcblk0p1 179:1    0   511M  0 part
└─mmcblk0p2 179:2    0  58.1G  0 part

In this case, it's /dev/mmcblk0.

Special: If you're using an SD card USB adapter, these usually are named with sd[a...c] prefix (example: sdb). It must not be confused with an existing main SATA drive.

Then flash the Armbian image to the card:

sudo dd if=Armbian_26.11.0_amlogic_s905x-b860h_trixie_6.18.51_server_2026.09.14.img of=/dev/mmcblk0 bs=4M status=progress
sync

(yes, sync IS a command)

Adjust /dev/mmcblk0 to the path to your microSD slot, which you can check via lsblk command.

Caution: Doing this will wipe ALL the data that's in the microSD card. Please back up important stuff if there's one before proceeding.

There is no need to alter the BOOT partition after flashing as these will be done automatically during boot stage.

2. Flashing the U-Boot

On Windows, doing this step is essentially done by using a program called Amlogic Bootcard Maker. Similarly, we can do the same on Linux.

Head to the directory where the earlier u-boot.bin is downloaded, for example:

cd ~/Downloads

Then flash it:

sudo dd if=u-boot.bin of=/dev/mmcblk0 conv=fsync,notrunc bs=1 count=442
sudo dd if=u-boot.bin of=/dev/mmcblk0 conv=fsync,notrunc bs=512 skip=1 seek=1
sync

And finally, yeet the microSD card out.

Flashing TL;DR

To put it simply, the above tasks is simply:

sudo dd if=Armbian_26.11.0_amlogic_s905x-b860h_trixie_6.18.51_server_2026.09.14.img of=/dev/mmcblk0 bs=4M status=progress
sudo dd if=u-boot.bin of=/dev/mmcblk0 conv=fsync,notrunc bs=1 count=442
sudo dd if=u-boot.bin of=/dev/mmcblk0 conv=fsync,notrunc bs=512 skip=1 seek=1
sync

To the Box...

You can determine whether the box is already hacked or not, and it's usually determined via the LED indicator:

  • If it's green, chances are it's running Android.
  • If it's orange, it's not using a regular Android bootloader or is in emergency download mode.

On a box with the factory Android ROM inside, you usually cannot just insert the microSD right into the box and then hope it will boot immediately to what's on the microSD card. The stock bootloader will immediately boot to the Android OS anyway and then indirectly alter the BOOT partition, which is probably not what you wanted.

A specialized HDMI dongle is made specifically to make the bootloader on this box boot whatever is in the microSD card, supposedly for emergency / download mode.

To check whether this HDMI dongle is exactly what we wanted, we can use i2cdetect (installable via i2c-tools) to check the HDMI bus:

First, we will want to know which bus is the bus for the HDMI port in my laptop:

yonle@yonle:~$ sudo i2cdetect -l
i2c-0 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-1 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-2 i2c i915 gmbus dpa I2C adapter
i2c-3 i2c i915 gmbus dpb I2C adapter
i2c-4 i2c i915 gmbus dpc I2C adapter

On the above example, my bus is at i2c-2, which is i915 gmbus dpa (notice the dpX prefix). From the 2 at the end of i2c-2, add it by +1, which then: 3.

So now we plug our HDMI dongle to our HDMI port in our laptop:

yonle@yonle:~$ sudo i2cdetect -y -r 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- 52 -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

If this dongle is what we are looking for, in 0x50, there should have 52 in the third column just like shown above.

Then verify what's inside:

yonle@yonle:~$ sudo i2cdump -y -r 0xf8-0xff 3 0x52
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
0123456789abcdef
f0: 62 6f 6f 74 40 53 44 43  boot@SDC

The string value must be boot@SDC.

Now that we know that the dongle is exactly what we're looking for, let's begin the installation process:

Now unplug the box from any power source:

  • Insert the microSD card that we flashed earlier to the microSD card slot.
  • Plug the HDMI dongle to the box.

Then plug it to the power source, and pay attention to the power LED indicator. The green indicator must have turned into orange on this phase.

Keep in mind that the indicator MUST STAY on orange LED light for as long as 15 seconds (it mustn't turn green on this phase; if it did, then you're flashing it wrong!).

If after 15 seconds passed the LED is staying orange, you can now unplug the HDMI dongle and plug an HDMI cable from your TV/Monitor/Capture Card to your box. You must see something resembling TTY.

From there, once you get into a phase where Armbian asks you for setup, there are two methods you can do this:

  1. Keyboard way: Plug your keyboard to the STB, and do set up from here.
  2. Networking: You want to set this box up via SSH: plug a LAN cable from your router to the box, check for its IP address on the router page, and SSH into it:
ssh root@10.42.x.x

The default password is 1234. You will be asked for setup and a new password setup.

Once you're done, then that's it. You're done installing Armbian to your microSD via your box. However, you will still need to use that HDMI dongle to force it using U-Boot.

Making U-Boot Permanent

Just like earlier, send the earlier u-boot.bin to the box via network:

scp u-boot.bin r***@10.42.xx.xx:u-boot.bin

Get into the shell, and check which MMC is our eMMC:

root@armbian:~# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk1     179:0    0  58.6G  0 disk
├─mmcblk1p1 179:1    0   511M  0 part /boot
└─mmcblk1p2 179:2    0  58.1G  0 part /
mmcblk2     179:32   0   7.3G  0 disk
├─mmcblk2p1 179:33   0   511M  0 part
└─mmcblk2p2 179:34   0   6.1G  0 part
mmcblk2boot0 179:64   0     4M  1 disk
mmcblk2boot1 179:96   0     4M  1 disk

In this case, since we're booting from SD card, mmcblk2 is our target. So:

sudo dd if=u-boot.bin of=/dev/mmcblk2 conv=fsync,notrunc bs=1 count=442
sudo dd if=u-boot.bin of=/dev/mmcblk2 conv=fsync,notrunc bs=512 skip=1 seek=1

Caution: This will permanently wipe the Android bootloader in the eMMC. If you plan to install Armbian to eMMC, do armbian-install and reflash U-Boot to the eMMC via steps above again.

Installing to eMMC

Caution: Doing the following will wipe what's in the eMMC, which includes the Android base itself.

Assuming you have been in the shell, run armbian-install as root:

root@armbian:~# armbian-install
[ STEPS ] Installing Armbian to internal eMMC...
[ STEPS ] Checking dependencies...
[ INFO ] Dependency check completed. Proceeding installation...
[ STEPS ] Initializing the environment...
[ INFO ] Use mainline u-boot: [ no ]
[ INFO ] Use ampart tool: [ no ]
[ INFO ] Show all devices: [ no ]
[ INFO ] Detected eMMC device: [ /dev/mmcblk2 ]
[ STEPS ] Start selecting device...
-----------------------------------------------------------------------------------------------------
 ID  SOC      MODEL                    DTB
-----------------------------------------------------------------------------------------------------
 101 s905d    Phicomm-N1               meson-gxl-s905d-phicomm-n1.dtb
 102 s905d    Phicomm-N1(DMA-thresh)   meson-gxl-s905d-phicomm-n1-thresh.dtb
 103 s905d    MECOOL-KI-Pro            meson-gxl-s905d-mecool-ki-pro.dtb
 104 s905d    SML-5442TW               meson-gxl-s905d-sml5442tw.dtb
 105 s905x    HG680P                   meson-gxl-s905x-p212.dtb
 106 s905x    B860H                    meson-gxl-s905x-b860h.dtb
 107 s905x    Nexbox-a95x              meson-gxl-s905x-nexbox-a95x.dtb
 108 s905x    TX9                      meson-gxl-s905x-tx9.dtb
 109 s905x    T95,XiaoMI-3S,X96,BTV9   meson-gxl-s905x-p212.dtb
 110 s905x    TBee                     meson-gxl-s905x-tbee.dtb
-----------------------------------------------------------------------------------------------------
 111 s905w    TX3-Mini,MeCool-m8s-pro-W meson-gxl-s905w-tx3-mini.dtb
 112 s905w    W95                      meson-gxl-s905w-p281.dtb
 113 s905w    X96-Mini                 meson-gxl-s905w-x96-mini.dtb
 114 s905w    X96W,FunTV,MXQ-Pro-4K    meson-gxl-s905w-x96w.dtb
 115 s905l    UNT402A,M201-S,MiBox-4C,IP108H,B860AV2.1 meson-gxl-s905l3b-m302a.dtb
 116 s905l    MG101,Mibox-4,E900V21C,XiaoMI-4C meson-gxl-s905l-venz-v10.dtb
 117 s905l    Tencent-Aurora-1s        meson-gxl-s905x-p212.dtb
 118 s905l    ZXV10-B860AV2.1U,HM201   meson-gxl-s905x-tx9.dtb
 119 s905l2   MGV2000,MGV3000,M301A,CM201-1,IP108H meson-gxl-s905l2-x7-5g.dtb
 120 s905l2   E900v21E,MGV2000-K,e900v21d meson-gxl-s905l2-x7-5g.dtb
-----------------------------------------------------------------------------------------------------
 121 s905l2   Wojia-TV-IPBS9505        meson-gxl-s905l2-ipbs9505.dtb
 122 s905l3   CM311-1,HG680-LC,M401A,UNT402A,CM201-1-6-YS meson-gxl-s905l2-x7-5g.dtb
 123 s905l3   CM211-1,M411A,B860AV3.2M,B860AV2.1U,M301A meson-gxl-s905l3b-m302a.dtb
 124 s905l3   UNT400G1,E900V22D-2,UNT400G,IP108H meson-gxl-s905l2-x7-5g.dtb
 125 s905l3   UNT402A,UNT400G          meson-gxl-s905l3b-m302a.dtb
 126 s905l3b  E900V21E,E900V22E,MGV2000/CW,M411A meson-gxl-s905l3b-e900v22e.dtb
 127 s905l3b  M302A,M304A,CM201-1,CM211-1,CM311-1 meson-gxl-s905l3b-m302a.dtb
 128 s905l3b  UNT403A                  meson-gxl-s905l3b-m302a.dtb
 129 s905l3b  RG020ET-CA               meson-gxl-s905l3b-e900v22e.dtb
 130 s905l3b  IP103H,TY1608,BV310,B860AV-2.1M meson-gxl-s905l3b-m302a.dtb
-----------------------------------------------------------------------------------------------------
 131 s905l3b  E900V22D,TY1608          meson-gxl-s905l2-x7-5g.dtb
 132 s905l3b  E900V21D,B860AV2.1-A     meson-gxl-s905l2-x7-5g.dtb
 133 s905mb   S65                      meson-gxl-s905x-p212.dtb
 134 s905lb   BesTV-R3300L,SumaVision-Q7,MG101 meson-gxl-s905x-p212.dtb
 135 s905lb   Q96-mini                 meson-gxl-s905x-p212.dtb
 136 s905lb   IPBS9505                 meson-gxl-s905l2-x7-5g.dtb
 0   Other    Customize                Enter-custom-dtb-name
-----------------------------------------------------------------------------------------------------
[ OPTIONS ] Please Input ID: 106

Pick 106, or B860H. Pressing Enter will tell you to pick filesystem type:

[ INFO ] Input Box ID: [ 106 ]
[ INFO ] Model Name: [ B860H ]
[ INFO ] FDTFILE: [ meson-gxl-s905x-b860h.dtb ]
[ INFO ] MAINLINE_UBOOT: [ ]
[ INFO ] BOOTLOADER_IMG: [ ]
[ INFO ] UBOOT_OVERLOAD: [ u-boot-p212.bin ]
[ INFO ] NEED_OVERLOAD: [ no ]
[ STEPS ] Selecting root filesystem type...
-----------------------------------------------
 ID TYPE
-----------------------------------------------
 1 ext4
 2 btrfs
-----------------------------------------------
[ OPTIONS ] Please Input ID (1/2):

Depending on your workload, you can use either ext4 or btrfs for your eMMC. But if you're unsure, I'd recommend ext4. It has received plenty of improvements over the years, so it's not the same ext4 people might remember from years ago. It's still a very solid choice for eMMC.

From there, it will install the system to the eMMC from SD card, which will take several minutes until it's finished.

After it's finished, reflash U-Boot to the eMMC like how we flash it to microSD:

sudo dd if=u-boot.bin of=/dev/mmcblk2 conv=fsync,notrunc bs=1 count=442
sudo dd if=u-boot.bin of=/dev/mmcblk2 conv=fsync,notrunc bs=512 skip=1 seek=1
sync

So:

[ INFO ] Copying ROOTFS partition data...
[ INFO ] Copying [ etc ] ...
[ INFO ] Copying [ home ] ...
[ INFO ] Copying [ opt ] ...
[ INFO ] Copying [ root ] ...
[ INFO ] Copying [ selinux ] ...
[ INFO ] Copy
Read on Hacker News ↗ ← Back to News

Comments

No comments yet. Start the discussion.