Chiều Nhạt Nắng Posted April 15 Posted April 15 (edited) DISCLAIMERS (PLEASE READ): - Everything in this post is provided AS-IS. This is not an official Armbian-supported target, and neither the Armbian project nor I am responsible for any damage, data loss, or broken devices caused by flashing or testing these images. - As with other TV boxes, please assume there may be board variants, undocumented hardware changes, weak power supplies, and marginal NAND/eMMC chips. Test carefully before writing anything to internal storage. - Please keep discussion and support in the forum thread, not in the official Armbian issue tracker. Hi all, I would like to share my work on bringing Armbian to Rockchip RK3128 TV boxes. These boxes are quite old now, and I do not think they are especially common anymore. Still, I suspect a lot of people may have one lying around somewhere in a drawer, unused after Android updates stopped or the original firmware became too slow to care about. I also had several of them lying around at home, which is what pushed me to start this project in the first place. Since I could not find an RK3128 Armbian effort comparable to the RK322x one, I decided to try doing the port myself. Another important motivation was simply to reduce e-waste: if even some of these old boxes can be turned into usable Linux machines again instead of being thrown away, that already feels worthwhile to me. First and foremost, I want to send special thanks to @jock and @fabiobassa for their RK322x TV box work on this forum. Their work was the foundation that made this RK3128 effort much easier to start from. 1. Main references and source code: Blog post with the full write-up: https://chieunhatnang.de/p/building-armbian-for-rockchip-rk3128/ Follow-up post for kernel 6.6.89 work: https://chieunhatnang.de/p/building-armbian-for-rockchip-rk3128-part-2/ Build scripts and releases: https://github.com/chieunhatnang-personal/RK3128-Linux-SupportingScripts RK3128 kernel 4.4 tree: https://github.com/chieunhatnang-personal/linux-kernel-4.4-rk3128-tvbox RK3128 kernel 6.6 tree: https://github.com/chieunhatnang-personal/linux-kernel-6.6-rk3128-tvbox 2. Current status At the moment I have two kernel lines: `4.4.194`, the older vendor-based line, which is already usable in practice `6.6.89`, the newer line, which allows these boxes to run a more up-to-date Armbian userspace What works in the current build: Custom U-Boot based on Rockchip U-Boot 2017.09 All four CPU cores, up to 1.2 GHz CPU frequency scaling and governors DRAM frequency control, both dynamic and fixed NAND, eMMC, SD card, and USB booting. The booting order is: USB >> SD Card >> NAND/eMMC (NAND and eMMC cannot be enabled at the same time because they share pins) OTG and EHCI/OHCI USB support Ethernet Wi-Fi support for SSV6051P, ESP8089, and several Realtek chips GPU acceleration UART1 and UART2, configurable Kernel `6.6.89` status in a bit more detail: CPU DVFS is stable after replacing the inherited/leakage-based OPP assumptions with a board-specific RK3128-safe table. The stable points I ended up using are `216 / 408 / 600 / 816 / 1008 / 1200 MHz` DMC / RAM devfreq works. In practice, simply enabling `dmc` works much better than I first expected, and boards can settle at different normal rates such as `396 MHz` or `456 MHz` GPU on `6.6.89` uses `Lima`, not the old Mali blob stack. That gives a maintainable Mesa/DRM path and hardware-accelerated OpenGL ES instead of depending on a legacy userspace blob VPU/video decode is still the weak point. I tried both `RKMPP` and `Hantro/V4L2` directions, but video processing is still limited, so I do not consider this a polished media-playback setup yet What does not work yet / known limitations: Bluetooth: not implemented or at least not validated, because I do not have a board with Bluetooth to test VPU / hardware video decoding is not in good shape yet SD card and SDIO Wi-Fi are currently using PIO mode on both kernel lines. This is slower than DMA, but stable enough for normal use 3. Image implementation I also made two RK3128 Armbian images based on existing RK322x Armbian images rather than building everything from scratch: Armbian 22.02: Based on the build provided by @jock, running kernel 4.4.189 Armbian 26.02: Based on the official Armbian build for rk322x, running kernel 6.6.89 In both cases, the idea was the same: keep the working RK322x Armbian userspace as a base, then replace the RK322x-specific parts with RK3128 ones, while the kernels themselves are based on Rockchip kernel sources. Compared with the original RK322x images, the RK3128 work mainly replaces or adds: boot.cmd / boot.scr changes so the boot flow can handle NAND and USB properly RK3128-specific Wi-Fi drivers and boot-time module loading logic rk3128-config a delayed Wi-Fi loader service RK3128-specific motd information the RK3128 kernel, DTB, and overlays For the `6.6.89` image specifically, there is some extra image-level cleanup and repackaging: remove the RK322x kernel / dtb / u-boot / BSP packages from the donor image pin those RK322x packages so they do not come back on upgrade install the RK3128 `6.6.89` Debian kernel packages rebuild the BSP package under the RK3128 name 4. Quick installation notes All required files are available from the releases page: The releaes page: https://github.com/chieunhatnang-personal/RK3128-Linux-SupportingScripts/releases Armbian 26.02 image: https://github.com/chieunhatnang-personal/RK3128-Linux-SupportingScripts/releases/download/kernel-6.6-armbian-26-v1.0/A26-release-20260415.zip Armbian 22.02 image: https://github.com/chieunhatnang-personal/RK3128-Linux-SupportingScripts/releases/download/kernel-4.4-armbian-22-v1.1/release-20260412.zip There are three installation layouts that are currently supported: 1. SD card only Pros: safest option, does not touch internal storage, easy to test and easy to remove, and if a board has an SD slot it can still be useful even when NAND/eMMC is completely dead Cons: slower than internal storage, and not every board has an SD slot Best for: first boot, testing, and boards where you want to keep the original Android install untouched 2. Full install to NAND / eMMC Pros: fastest and cleanest setup, uses the internal storage already present on the board Cons: overwrites the original Android install, and old NAND/eMMC may already be unreliable Best for: boards with healthy internal storage when you want a fully self-contained install 3. Hybrid install: bootloader on NAND / eMMC, rootfs on USB or SD card Pros: usually the most practical option for old TV boxes, works well when internal storage is only reliable enough for bootloader pieces, and can also help on boxes with problematic Android boot behavior Cons: more manual than the other methods, still depends on internal storage for the bootloader, and performance depends on the USB drive or SD card used Best for: boxes with weak or aging internal NAND/eMMC, or boxes where you want to avoid a full install to internal storage I describe each method in more detail below. 4.1. Install and boot from SD card Prepare: idbloader.img uboot.img trust.img rootfs.img Create an MBR partition table on the SD card, leave the first 16 MB empty, create one Linux partition, then write: idbloader.img to the raw device at seek=64 uboot.img to the raw device at seek=16384 trust.img to the raw device at seek=24576 rootfs.img to the first partition, not to the whole disk Example: DEV=/dev/sdX sudo parted -s "$DEV" mklabel msdos sudo parted -s "$DEV" mkpart primary ext4 16MB 100% sudo partprobe "$DEV" sudo dd if=idbloader.img of="$DEV" seek=64 conv=fsync sudo dd if=uboot.img of="$DEV" seek=16384 conv=fsync sudo dd if=trust.img of="$DEV" seek=24576 conv=fsync sudo dd if=rootfs.img of="${DEV}1" bs=4M status=progress conv=fsync sync I also provide a bootcardmaker.sh helper script in the same release directory to simplify this process. 4. 2. Full install to NAND / eMMC Prepare: rkxx_loader_vx.xx.xxx.bin parameter.txt uboot.img trust.img rootfs.img Then: Boot the board normally Connect a USB cable to the OTG port Open RKDevTool v2.69 In Advanced Function, erase the first 0x10000 sectors with Start LBA = 0x0 and Count = 0x10000 Press ResetDevice Wait for the board to return in MaskROM mode Go to Download Image Flash Loader, parameter, U-Boot, Trust, and rootfs 4. 3. Hybrid install: bootloader on NAND / eMMC, rootfs on USB or SD card This is the layout I use most often, and in practice it is probably the most useful one for old TV boxes. It is especially useful when internal NAND/eMMC is still good enough for Loader / parameter / U-Boot / Trust, but not reliable enough for a full root filesystem. A common symptom on these old boxes is that Android starts to boot and then hangs, or that the internal storage is simply too unreliable to trust with a full install. In this hybrid layout: Internal NAND/eMMC stores Loader, parameter, U-Boot, and Trust The root filesystem lives on USB or SD card Important: rootfs.img is a filesystem image, not a full disk image Write rootfs.img to a partition such as /dev/sdX1, not to the whole device Tools like BalenaEtcher are the wrong fit for this particular image layout Example: sudo dd if=rootfs.img of=/dev/sdX1 bs=4M status=progress conv=fsync sync 4.4. Post-install configuration After the board boots successfully, you can configure it either from the local console over HDMI or remotely over SSH if Ethernet is connected. Default login: user: root password: 1234 The first login will ask you to change the password. After that, run: rk3128-config This is the board-specific configuration tool for enabling and adjusting hardware features that may differ between RK3128 boxes. The most important options are: Wi-Fi chip selection RAM dynamic frequency: disabled by default. Enabling it can improve performance, but on some boards it may cause kernel hangs. If that happens, switch it back to disabled SD card storage enablement when booting from another device Display resolution OTG mode selection 5. Testing feedback is welcome If anyone here has RK3128 boards and wants to test, feedback would be very useful, especially for: Board photos and PCB markings Whether the board uses NAND or eMMC Boot method that works: SD, USB, NAND, eMMC Which Wi-Fi chip is present Serial logs, dmesg, and failure reports If there is enough interest and enough board coverage, I would be happy to keep improving this, cleaning it up further, and making it easier for other people to test. 6. Credits - @jock and @fabiobassa for the RK322x TV box work on the Armbian forum, which provided the main starting point, the images and practical reference for this RK3128 effort - Rockchip for the original kernel code base used as the foundation for both kernel lines Edited April 15 by Chiều Nhạt Nắng 4 Quote
Ngô Huỳnh Ngọc Khánh Posted April 20 Posted April 20 First of all, a huge thank you for your work on bringing Armbian to RK3128 TV boxes. Your guide is incredibly detailed and practical — not just theoretically correct, but actually usable in real-world scenarios where hardware varies wildly. That’s something many tutorials lack. It’s clear you spent a lot of time testing across different boards, and it really helps people like me who are dealing with these unpredictable cheap TV boxes. I also want to say I truly appreciate how you approached the NAND installation process using rkdeveloptool. The way you structured the workflow, especially handling boot components and low-level flashing, made it much easier to understand what’s actually happening under the hood instead of just blindly following commands. I happen to have a bunch of RK3128 devices myself, and thanks to your work, I’ve successfully brought several of them back to life. Even with different variants of RK3128, I was able to get them running properly on NAND with kernel 4.x, which is honestly impressive given how inconsistent these boards can be. That said, I’d like to ask if you might consider extending your approach to RK3228/RK3229 devices using rkdeveloptool on Windows, similar to what you’ve done for RK3128. I’ve been trying to replicate a similar workflow based on your guide and also by studying the multitool source, especially the step-nand function. So far, I’ve attempted: Reusing trust.img and legacy U-Boot from the multitool BSP folder Manually creating a GPT at 0x8000 Writing the image with dd while skipping the first 4MB (similar to step-nand logic) Unfortunately, none of these attempts have worked so far. The main challenge is that many RK3229 boards don’t have an accessible SD card slot (or even pads for one), which makes recovery and testing much harder. If SD boot were available, this would be much easier to debug and iterate. Since you’ve already done the hard work of figuring things out for RK3128 using rkdeveloptool, I was wondering if you might be willing to give RK3229 a try using a similar method. Even a partial guide or some hints about differences in bootloader layout, trust image, or NAND handling would be extremely helpful. Thanks again for your contribution — it’s genuinely valuable for the community. Hopefully RK3229 can be the next one to crack Cheers! 2 Quote
Chiều Nhạt Nắng Posted April 30 Author Posted April 30 (edited) I’ve updated the kernel and Armbian image with the following improvements: RKNAND driver enhancements: Significantly improved stability, even on very old and degraded NAND flash. Testing was performed on an 8GB NAND device with over 2TB of writes and more than 3000 erase cycles (as reported by /proc/rknand). The system runs reliably under these conditions, whereas the original Android ROM fails to boot. ESP8089 driver improvements: Increased stability when handling large packets. Docker support added Release Files Kernel 6.6: https://github.com/chieunhatnang-personal/linux-kernel-6.6-rk3128-tvbox/releases/tag/stable-1.1 If you are already running the image, download the .deb packages and place them in a directory (e.g., /tmp). Then run: dpkg -i /tmp/*.deb Reboot after installation. Armbian Image: https://github.com/chieunhatnang-personal/RK3128-Linux-SupportingScripts/releases/tag/kernel-6.6-armbian-26-v1.1 Edited April 30 by Chiều Nhạt Nắng 0 Quote
Chiều Nhạt Nắng Posted April 30 Author Posted April 30 On 4/20/2026 at 9:35 PM, Ngô Huỳnh Ngọc Khánh said: First of all, a huge thank you for your work on bringing Armbian to RK3128 TV boxes. Your guide is incredibly detailed and practical — not just theoretically correct, but actually usable in real-world scenarios where hardware varies wildly. That’s something many tutorials lack. It’s clear you spent a lot of time testing across different boards, and it really helps people like me who are dealing with these unpredictable cheap TV boxes. I also want to say I truly appreciate how you approached the NAND installation process using rkdeveloptool. The way you structured the workflow, especially handling boot components and low-level flashing, made it much easier to understand what’s actually happening under the hood instead of just blindly following commands. I happen to have a bunch of RK3128 devices myself, and thanks to your work, I’ve successfully brought several of them back to life. Even with different variants of RK3128, I was able to get them running properly on NAND with kernel 4.x, which is honestly impressive given how inconsistent these boards can be. That said, I’d like to ask if you might consider extending your approach to RK3228/RK3229 devices using rkdeveloptool on Windows, similar to what you’ve done for RK3128. I’ve been trying to replicate a similar workflow based on your guide and also by studying the multitool source, especially the step-nand function. So far, I’ve attempted: Reusing trust.img and legacy U-Boot from the multitool BSP folder Manually creating a GPT at 0x8000 Writing the image with dd while skipping the first 4MB (similar to step-nand logic) Unfortunately, none of these attempts have worked so far. The main challenge is that many RK3229 boards don’t have an accessible SD card slot (or even pads for one), which makes recovery and testing much harder. If SD boot were available, this would be much easier to debug and iterate. Since you’ve already done the hard work of figuring things out for RK3128 using rkdeveloptool, I was wondering if you might be willing to give RK3229 a try using a similar method. Even a partial guide or some hints about differences in bootloader layout, trust image, or NAND handling would be extremely helpful. Thanks again for your contribution — it’s genuinely valuable for the community. Hopefully RK3229 can be the next one to crack Cheers! Thank you for your kind words. For RK3229, I thought it's supported by mainline kernel and you can easily install using method provided by Jock? 0 Quote
hmoob Posted May 31 Posted May 31 On 4/15/2026 at 5:03 PM, Chiều Nhạt Nắng said: Could you please provide more detailed instructions, or perhaps make a video tutorial? 0 Quote
Chiều Nhạt Nắng Posted June 4 Author Posted June 4 @hmoob What part do you need clarify? I can help you but I need more information. 0 Quote
hmoob Posted June 15 Posted June 15 I tried but failed because I didn't understand at first, but now I understand part of it, and my TV box is malfunctioning. The problem is that when I plug in the power cord with the adapter, no lights or anything come on, but when I plug in the USB cable near the LAN port, it starts up normally (because I initially followed method 4.2. Full install to NAND / eMMC). Now I've flashed the Android firmware and it's working, but the error is as I described above. So, is the power IC dead or is the problem somewhere else? 1 Quote
hmoob Posted June 19 Posted June 19 Hi there, I followed the instructions in section 4.1 to install it onto the memory card, but when I plug it into the TV box, it won't boot from the card. Could you please provide instructions again? 0 Quote
Chiều Nhạt Nắng Posted Thursday at 11:29 AM Author Posted Thursday at 11:29 AM (edited) On 6/15/2026 at 7:26 PM, hmoob said: I tried but failed because I didn't understand at first, but now I understand part of it, and my TV box is malfunctioning. The problem is that when I plug in the power cord with the adapter, no lights or anything come on, but when I plug in the USB cable near the LAN port, it starts up normally (because I initially followed method 4.2. Full install to NAND / eMMC). Now I've flashed the Android firmware and it's working, but the error is as I described above. So, is the power IC dead or is the problem somewhere else? It seems the DC port is malfunctioning. This type of board can run with both power port and the USB although I prefer the DC port because it may provider more power. You can try replacing the DC jack (5.5x2.1) or check somewhere near it, there may be issues with the power IC. On 6/19/2026 at 4:37 PM, hmoob said: Hi there, I followed the instructions in section 4.1 to install it onto the memory card, but when I plug it into the TV box, it won't boot from the card. Could you please provide instructions again? Yeah currently it cannot dual boot Android and Armbian. To install Armbian, you must install the custom U-boot. Can you post the image of your board and your RKDevTool setting? Edited Thursday at 11:31 AM by Chiều Nhạt Nắng 0 Quote
hmoob Posted 23 hours ago Posted 23 hours ago Could you provide more detailed instructions? I tried methods 4.1 and 4.2, but neither worked: with 4.1, the board wouldn't boot from the USB to install Armbian, and with 4.2, there was absolutely no response—just a red light. I used RKDevTool with the file provided in your post. Images of my main https://ibb.co/VY4LKwrv https://ibb.co/x8SBCnm0 https://ibb.co/N28XWqxF 0 Quote
0757myt Posted 5 hours ago Posted 5 hours ago After finally getting my TV box to boot Armbian, I'd like to provide some beginner-friendly pointers in addition to @Chiều Nhạt Nắng's installation note 4.2, Full install to NAND / eMMC: Quote Boot the board normally Connect a USB cable to the OTG port As someone who's completely new to Android TV box modding, this step took me a while to get through. What it actually means is not to literally boot your TV box into its original firmware, but to enter either Loader Mode or Maskrom Mode. If you've built or tried to poke around your PC, they are sort of like the BIOS or UEFI (technically BIOS and UEFI live on the motherboard, not CPU... but I digress), or if you have done Nintendo Switch modding, it's like entering RCM. It's not the guide's fault because there are so many ways to get your chip to enter a "maintenance/recovery mode" on so many different boards even with the same chip, it's basically impossible to list all the ways to put it into a malleable state. The way to enter Loader or Maskrom mode typically requires you to do something to the TV box while it is actively booting up, which will interrupt the process and enter the respective mode. For my TV Box (2016 - 2020 ish, Huawei EC6108V9A, RK312X), to enter Loader Mode, I need to repeatedly tap the "Front Page" or "Home" button on my TV box remote as soon as I connect the OTG USB port to my PC (the OTG port is typically the USB port that's the closest to the Ethernet port), I didn't need to plug in the barrel power connector since the board draws power through the same USB connection. If you found yourself in an Android system recovery <3e> page, this is not what we want, you might be tapping the wrong button like "Standby" or "Sleep" button. For my board, once I successfully enter Loader Node, aside from the Windows notification and the Bold text saying "Found ____ Device" at the bottom of the RKDevTool/AndriodTool, it was also showing a static logo screen through HDMI. If you do not have the TV Box's remote, or if you have messed up the install and have to redo, you will almost definitely need to take apart the Box's outer shell and gain access to the PCB itself to enter Maskrom Mode instead. (Images found online) To enter Maskrom Mode, you will need to short two specific pins (or pin holes, or capacitor pads like the first image) as you plug the USB connector from the PC to the USB OTG port on your board (The official way is to short Clock (CLK) to Ground (GRD or any metal connector housing) but good luck finding those if they're not labeled). In my experience, tweezers are the best for this. Since everyone's board looks different, there are different ways to do it, but do not try to short anything on your board before you're absolutely certain that the image of the board matches the one on your hand exactly. Unfortunately these info are incredibly niche and hard to find, your best bet is to search your TV Box's model number along with your chip's name (RK3128 in our case) on google and bilibili, there's a good chance you'll end up on a Chinese forum and have to dig through it with google translate. (Do NOT take an AI's word for it!) Quote In Advanced Function, erase the first 0x10000 sectors with Start LBA = 0x0 and Count = 0x10000 Press ResetDevice Wait for the board to return in MaskROM mode In case the first step in the quote isn't clear enough, you have to click the EraseLBA button after typing in these addresses below it to erase sectors. It is also worth noting that you have to be in Loader Mode to EraseLBA or use any "Read____" buttons. If your device is in Maskrom Mode because you lost the remote or botched an install, you can't directly do all that aside from Download Image. The workaround is to hit the "..." button to the right of "Boot:", select rk3128_loader_v2.12.263.bin and hit Download. Now you can use most of the Advanced Functions while in Maskrom! Quote Go to Download Image Flash Loader, parameter, U-Boot, Trust, and rootfs In Chieu's attached image for this step, there is actually an error. If you are using the files from their 20260430 release (A26-release-20260430.zip), you will need to set Boot sector's address at 0x00006000, NOT 0x00010000. I strongly encourage you to open parameter.txt and verify the addresses yourself. My setup looks like this: 0x00000000 | Loader | rk3128_loader_v2.12.263.bin 0x00000000 | parameter | parameter.txt 0x00002000 | uboot | uboot.img 0x00004000 | trust | trust.img 0x00006000 | root | armbian_rootfs_26.2.img By the way, you can click on the empty box to the right of paths to find the files. Right click - Del item to delete any extra default entries you don't need. Now before you click Run, I strongly recommend you to connect the board to a monitor/TV via HDMI and your router via Ethernet with known good cables/connections! Your board's first boot into Armbian happens immediately after Download Image finishes, therefore it's incredibly difficult to monitor the progress without them. I'm honestly not sure if the setup can complete without Ethernet because I tried to flash my board without connecting Ethernet twice and failed twice. Miscellaneous Notes: If you're 100% positive that you have done the steps to enter Loader Mode or Maskrom Mode correctly but your PC is refusing to pick up the connection, try installing the driver "Rockchip_DriverAssitant_v4.2" (should be the first result on google). Some online sources might tell you to diagnose via UART with a USB-to-ttl adapter. It did not work on mine (was completely silent during boot). Conversely, not seeing anything from UART doesn't necessarily mean your board is bricked. The board should always be able to enter Maskrom if you have access to the PCB. After your board has gone through the first boot, you will see a prompt on the HDMI output asking you to set a password for the root user. You can connect to the board via SSH at this point with IP address shown during the boot sequence; you do not need to connect a physical keyboard to the board. A handy software to manage all your UART and SSH connections is MobaXterm. The settings are straightforward and there is a portable version if you don't like installing stuff. From OP's screenshots I think Chieu is using it too! 0 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.