Skip to content
View in the app

A better way to browse. Learn more.

Armbian Community Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

How to install armbian in h618?

Featured Replies

@Nick AIs it possible to configure the front display using the Linux header you provided and the pin details I shared above? I know this is a big request, but if it's possible, it would make this setup complete. Since I am not a programmer, I tried using Google's AI, but it just took me in circles and landed me nowhere. If you require any additional log or configuration details please let me know. 

@sr4armbian You could try building your own X98H image and use the kernel headers from your build. Your kernel headers will be in the build/output/debs directory, and the image will be in the build/output/images directory. I would recommend starting with a fresh install with this new image and kernel headers.

 

git clone https://github.com/NickAlilovic/build.git --branch v20250306

cd build

./compile.sh

choose "Do not change kernel configuration"

choose "Show CSC/WIP/EOS/TVB"

choose "I understand and agree"

choose "X98H"

choose "edge"
rest is up to you...

 

I used this method to get my display working. But that was a while ago.

 

 

Edited by Nick A

trying to build armbian image using v20250306 for vontar-h618 but getting error:

 

Could not find package filename for 'base-files' in distro repo [ looking for base-files, found_package_filename is  ]
[🚸] Command failed, retrying in 15s [ apt_find_upstream_package_version_and_download_url base-files ]
[🚸] Command failed 10 times, giving up [ apt_find_upstream_package_version_and_download_url base-files ]
[💥] Cleaning up [ please wait for cleanups to finish ]

 

 

Edited by firepower

will do, 

I also trying official armbian build for tanix-tx6s-axp313 which boots but freezes after few minutes, where as your older build is stable.

any chance of your builds making it into mainline armbian ?

looking forward to a newer build. I see now Radxa Cubie A7A/A7Z is the new favourite.

I been having a break from armbian but want to get back into it again.

 

Edited by firepower

@Kajen Did you get HDMI working? I have a box very similar to yours (Transpeed 6K T98 H616) and i have been trying to get HDMI for a couple days without success. For me the only ARM Linux image that boots is a MiniArch image for pendoo x12 pro that has 7.1.1 kernel. The kernel detects the HDMI TX controller v2.12a after which it reports: sun4i-drm display-engine: [drm] Cannot find any crtc or sizes. I also tried to build custom Armbian image with custom CSC and patch files but i didn't get any of the images to boot the kernel.

My specs:

- AXP305 PMIC
- 2 GB DDR3 Micron D9LGX
- 32 GB eMMC KMR21000BM-B809 

- AW859A Wireless module

Pic of PCB:

https://imgur.com/a/higrm6v

just today I got hdmi signal, I turn on pin PI8, 

 

leds {
		compatible = "gpio-leds";
		status_led {
			label = "blue:pwr";
			gpios = <&pio 7 6 GPIO_ACTIVE_LOW>; /*PH6*/
			linux,default-trigger = "default-on";
		};
		hdmi_pwr_led {
			label = "hdmi-pwr-en";
			gpios = <&pio 8 8 GPIO_ACTIVE_HIGH>; /* Bank I (8), index 8 = PI8 */
			default-state = "on";
		};
	};
	

 

here is my dts, I still need to tune for my board, to get audio, right now I am using https://github.com/jernejsk/linux-1/commits/h616-integration-v1 for my kernel 

Spoiler


/dts-v1/;

#include "sun50i-h616.dtsi"
#include "sun50i-h616-cpu-opp.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/leds/common.h>

/ {
    model = "Transpeed T98 616";
    compatible = "transpeed,t98-616", "allwinner,sun50i-h616";

    aliases {
        mmc0 = &mmc0;
        mmc2 = &mmc2;
        ethernet0 = &emac1;
        ethernet1 = &wlan;
        serial0 = &uart0;
    };

    chosen {
        stdout-path = "serial0:115200n8";
    };
    
    leds {
        compatible = "gpio-leds";
        status_led {
            label = "blue:pwr";
            gpios = <&pio 7 6 GPIO_ACTIVE_LOW>; /*PH6*/
            linux,default-trigger = "default-on";
        };
        hdmi_pwr_led {
            label = "hdmi-pwr-en";
            gpios = <&pio 8 8 GPIO_ACTIVE_HIGH>; /* Bank I (8), index 8 = PI8 */
            default-state = "on";
        };
    };
    
    connector {
        compatible = "hdmi-connector";
        type = "a";

        port {
            hdmi_con_in: endpoint {
                remote-endpoint = <&hdmi_out_con>;
            };
        };
    };

    // Add bit-banged I2C for the FD650 Front Panel Display
    fd650 {
        compatible = "i2c-gpio";
        sda-gpios = <&pio 8 12 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; /* PI12 (268) */
        scl-gpios = <&pio 8 11 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; /* PI11 (267) */
        i2c-gpio,delay-us = <2>; /* ~100 kHz */
        #address-cells = <1>;
        #size-cells = <0>;

        /* You can map your open-source fd650 / openvfd driver node here if compiled into kernel */
    };
    
    reg_vcc5v: vcc5v {
        /* board wide 5V supply directly from the USB-C socket */
        compatible = "regulator-fixed";
        regulator-name = "vcc-5v";
        regulator-min-microvolt = <5000000>;
        regulator-max-microvolt = <5000000>;
        regulator-always-on;
        regulator-boot-on;
    };

    reg_usb1_vbus: usb1-vbus {
        compatible = "regulator-fixed";
        regulator-name = "usb1-vbus";
        regulator-min-microvolt = <5000000>;
        regulator-max-microvolt = <5000000>;
        vin-supply = <&reg_vcc5v>;
        enable-active-high;
        /* gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; PC16 */
        status = "okay";
    };


    reg_vcc3v3: vcc3v3 {
        /* discrete 3.3V regulator */
        compatible = "regulator-fixed";
        regulator-name = "vcc-3v3";
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
        regulator-always-on;
    };
    
    wifi_pwrseq: wifi_pwrseq {
        compatible = "mmc-pwrseq-simple";
        clocks = <&rtc 1>;
        clock-names = "ext_clock";
        reset-gpios = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */
        post-power-on-delay-ms = <200>;
    };
};

&cpu0 {
    cpu-supply = <&reg_dcdca>;
    status = "okay";
};

&gpu {
    mali-supply = <&reg_dcdcc>;
    status = "okay";
};

&de {status = "okay";};

&hdmi_out {
    hdmi_out_con: endpoint {
        remote-endpoint = <&hdmi_con_in>;
    };
};

&hdmi {
    #sound-dai-cells = <0>;
    hvcc-supply = <&bldo1>;
    phy-supply = <&cldo1>;
    status = "okay";
};
&hdmi_phy {
    phy-supply = <&aldo1>;
    hvcc-supply = <&bldo1>;
    status = "okay";
};
&ohci1 {status = "okay";};
&ehci1 {status = "okay";};
&ohci2 {status = "okay";};
&ehci2 {status = "okay";};

&emac1 {
    pinctrl-names = "default";
    pinctrl-0 = <&rmii_pins>;
    phy-mode = "rmii";
    phy-handle = <&rmii_phy>;
    phy-supply = <&aldo1>;
    allwinner,rx-delay-ps = <3100>;
    allwinner,tx-delay-ps = <700>;
    status = "okay";
};

&mdio1 {
    rmii_phy: ethernet-phy@1 {
        compatible = "ethernet-phy-ieee802.3-c22";
        reg = <1>;
    };
};

&mmc0 {
    vmmc-supply = <&reg_dcdce>;
    cd-gpios = <&pio 8 16 GPIO_ACTIVE_LOW>;    /* PI16 */
    disable-wp;
    bus-width = <4>;
    status = "okay";
};

&mmc1 {
    vmmc-supply = <&reg_dcdce>; /* 3.3v */
    vqmmc-supply = <&bldo1>; /* 1.8v */
    mmc-pwrseq = <&wifi_pwrseq>;
    bus-width = <4>;
    non-removable;
    status = "okay";

    wlan: wifi@1 {
        reg = <1>;
    };
};

&mmc2 { 
    vmmc-supply = <&reg_dcdce>;
    vqmmc-supply = <&bldo1>;
    bus-width = <8>;
    non-removable;
    cap-mmc-hw-reset;
    mmc-hs200-1_8v;
    status = "okay";
};

&uart0 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart0_ph_pins>;
    status = "okay";
};

&uart1 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
    uart-has-rtscts;
    status = "okay";
};

&ir {
    linux,rc-map-name = "rc-beelink-gs1";
    status = "okay";
};

&r_i2c {
    status = "okay";
    clock-frequency = <100000>;

    axp305: pmic@36 {
        compatible = "x-powers,axp305", "x-powers,axp805",
        "x-powers,axp806";
        reg = <0x36>;
        wakeup-source;
        interrupt-controller;
        #interrupt-cells = <1>;

        x-powers,self-working-mode;
        vina-supply = <&reg_vcc5v>;
        vinb-supply = <&reg_vcc5v>;
        vinc-supply = <&reg_vcc5v>;
        vind-supply = <&reg_vcc5v>;
        vine-supply = <&reg_vcc5v>;
        aldoin-supply = <&reg_vcc5v>;
        bldoin-supply = <&reg_vcc5v>;
        cldoin-supply = <&reg_vcc5v>;

        regulators {
            aldo1: aldo1 {
                regulator-always-on;
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                regulator-name = "vcc-sys";
            };

            reg_aldo2: aldo2 { /* Enabled by the Android BSP */
                regulator-always-on;
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                regulator-name = "vcc3v3-ext";
                status = "okay";
            };

            reg_aldo3: aldo3 { /* Enabled by the Android BSP */
                regulator-always-on;
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                regulator-name = "vcc3v3-ext2";
                status = "okay";
            };

            bldo1: bldo1 {
                regulator-always-on;
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
                regulator-name = "vcc1v8";
                status = "okay";
                startup-delay-us = <50000>;
            };

            cldo1: cldo1 {
                regulator-min-microvolt = <2500000>;
                regulator-max-microvolt = <2500000>;
                regulator-name = "vcc2v5";
                regulator-always-on;
                regulator-boot-on;
            };

            reg_dcdca: dcdca {
                regulator-always-on;
                regulator-min-microvolt = <810000>;
                regulator-max-microvolt = <1100000>;
                regulator-name = "vdd-cpu";
            };

            reg_dcdcc: dcdcc {
                regulator-always-on;
                regulator-min-microvolt = <810000>;
                regulator-max-microvolt = <990000>;
                regulator-name = "vdd-gpu-sys";
            };

            reg_dcdcd: dcdcd {
                regulator-always-on;
                regulator-min-microvolt = <1360000>;
                regulator-max-microvolt = <1360000>;
                regulator-name = "vdd-dram";
            };

            reg_dcdce: dcdce {
                regulator-always-on;
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                regulator-name = "vcc-eth-mmc";
            };
        };
    };
};

&usbotg {
    dr_mode = "peripheral";
    status = "okay";
};

&usbphy {
    usb1_vbus-supply = <&reg_usb1_vbus>;
    status = "okay";
};

&codec {
    allwinner,audio-routing = "Line Out", "LINEOUT";
    status = "okay";
};

&pio {
    vcc-pa-supply = <&reg_dcdce>;
    phy-io-supply = <&reg_dcdce>;
    vcc-pc-supply = <&aldo1>;
    vcc-pf-supply = <&aldo1>;
    vcc-pg-supply = <&bldo1>;
    vcc-ph-supply = <&aldo1>;
    vcc-pi-supply = <&aldo1>;
    vcc-pl-supply = <&reg_aldo2>;
};


 

@Kuostiyou can also manually turn on its pin with a script that run after boot

 


echo "264" > "/sys/class/gpio/export"
echo "out" > "/sys/class/gpio/gpio264/direction"
echo 1 > "/sys/class/gpio/gpio264/value"

 

I still need to test it to see if it work on other images, in that case maybe you dont need to compile it, as long it boot, like pendoo x12 pro

Ok, i built an Armbian v25.05 image with kernel 6.12.11-edge-sunxi64. I used the 158-add-pendoo-x12pro-defconfig.patch for uboot and @Kajen DTS above for kernel patch. HDMI still doesn't work, but the system is stable, ethernet works and the blue power led works too.

According to H616 datasheet PI0 is SCL, PI1 SDA, and PI2 is CEC for HDMI so i added them to pinctrl node in dtb to claim them

hdmi-pins {
	pins = "PI0\0PI1\0PI2";
	function = "hdmi";
	phandle = <0x90>;
};

And then these to hdmi@6000000

pinctrl-names = "default";
pinctrl-0 = <0x90>;

But i still get "Cannot find any crtc or sizes", and when i force the HDMI on with extraargs=video=HDMI-A-1:1920x1080@60e in /boot/armbianEnv.txt i get "PHY PLL failed to lock". Maybe this board needs some specific kernel fixes? Im a total n00b at tv boxes and Linux kernel so my knowledge is extremely limited...

Also, in /sys/kernel/debug/clk/clk_summary the HDMI clock is apparently 172615385Hz which is too high for 1920x1080@60. It is supposed to be 148500000Hz. I think that would explain why PHY PLL fails to lock but i don't know how to fix this.

you can try this script 

Spoiler

#!/bin/bash

# Script to iterate through unclaimed GPIOs, set them as output,

# toggle them high/low, and test i2cdetect -y 1 for HDMI DDC recovery.

 

SYS_GPIO="/sys/class/gpio"

DELAY=0.2

 

echo "=== Starting GPIO Pin Search and DDC Check ==="

 

# Get lines from gpiochip1 that do NOT have a consumer listed

UNCLAIMED_PINS=$(gpioinfo -c gpiochip1 | grep -E "line +[0-9]+:" | grep -v "consumer=" | awk '{print $2}' | tr -d ':')

 

for pin in $UNCLAIMED_PINS; do

echo "--------------------------------------------------"

echo "[*] Testing GPIO Pin: $pin"

 

# Export GPIO if not already exported

if [ ! -d "$SYS_GPIO/gpio$pin" ]; then

if ! echo "$pin" > "$SYS_GPIO/export" 2>/dev/null; then

echo " └─ [!] Export failed (Resource busy or kernel restricted). Skipping."

continue

fi

fi

 

# Set direction to output

if ! echo "out" > "$SYS_GPIO/gpio$pin/direction" 2>/dev/null; then

echo " └─ [!] Failed to set direction to output. Unexporting and skipping."

echo "$pin" > "$SYS_GPIO/unexport" 2>/dev/null

continue

fi

 

# Toggle HIGH -> LOW -> HIGH

echo 1 > "$SYS_GPIO/gpio$pin/value" 2>/dev/null

sleep $DELAY

echo 0 > "$SYS_GPIO/gpio$pin/value" 2>/dev/null

sleep $DELAY

echo 1 > "$SYS_GPIO/gpio$pin/value" 2>/dev/null

 

# Check i2cdetect output on i2c-1 (HDMI DDC)

# Count how many ACKs (hex addresses) are detected

I2C_COUNT=$(i2cdetect -y 1 | grep -oE " [0-9a-f]{2} " | wc -l)

 

echo " └─ Active addresses on i2c-1: $I2C_COUNT"

 

if [ "$I2C_COUNT" -eq 1 ]; then

echo "=================================================="

echo " SUCCESS! DDC Bus Recovered on GPIO Pin: $pin"

echo "=================================================="

i2cdetect -y 1

# Clean up pin export before exit

echo "$pin" > "$SYS_GPIO/unexport" 2>/dev/null

exit 0

elif [ "$I2C_COUNT" -lt 10 ]; then

echo " └─ [*] Partial bus change detected on GPIO $pin ($I2C_COUNT devices active)."

fi

 

# Unexport to leave sysfs clean

echo "$pin" > "$SYS_GPIO/unexport" 2>/dev/null

done

 

echo "--------------------------------------------------"

echo "Scan complete. No single unclaimed pin cleared the bus ghosting."

 this is from gemini, this helped me find the right pin, check i2cdetect -l for right chip and change line 45, with your count on i2cdetect -y x + 1, you board design is a little different from mine, maybe they use other pin  

Hi @Kajen

I noticed the Jernej h616-integration-v1 branch and had some time today to test it. I’ve been busy with work and other projects lately.

Here’s the Armbian build. It boots, but there are some errors. I’ll have to reconnect the UART pins to see where things went wrong.

 

The build includes Jernej’s patches and the board configuration.  I'm also using Werner's 7.2 Armbian build but with a different patch directory. (jernejsk-7.2)

https://github.com/EvilOlaf/build/tree/sunxi-7.2

 

I haven’t made any modifications to the mainline DTS.

 

I’m not sure when I’ll have more time to work on it, but hopefully I can investigate the issues further when I get a chance.

https://github.com/NickAlilovic/build/tree/sunxi-7.2

Edited by Nick A

Please share your AI skills to translate vendor android DTS into armbian compatible DTS.

The work seems menial and lacks any sort of documentation.

An automated workflow would do wonders, if created by someone who understands it fully.

Hello,

I guess this is the right forum for my topic: I have got a T95zplus H618 TVBox with AW869A. People having this box may know, there exist an armbian image by LYU4662 at github:  https://github.com/LYU4662/t95zplus-h618-build

 

However, after installing it, there is no wifi. I did some analysis with claude, it concluded that there are only some small changes necessary in the dtb  and the wifi is working. These are claude's words: 

"

T95ZPLUS (AW869A / AIC8800) with LYU’s image: fix for mmc1: error -110 whilst initialising SDIO card

Box: T95ZPLUS, H618, AW869A (SDIO 5449:0145, detected as AIC8801). Image: LYU4662’s Armbian build, 6.7.12-edge-sunxi64, with his aic8800 DKMS driver.

Symptom: aic modules load, but modprobe aic8800_fdrv gives “No such device”, /sys/bus/sdio/devices/ is empty, dmesg shows the CIS tuple being read and then mmc1: error -110 whilst initialising SDIO card / Failed to initialize a non-removable card.

I compared LYU’s DTB with the live Android DT. Pins, supplies and power sequence already match (SMHC1 on PG0–PG5, vmmc = DLDO1 3.3 V, vqmmc = ALDO1 1.8 V, 32 kHz clock out on PG10 via &rtc 1, reset PG18 active low). So it’s not a pinning problem.

What fixed it, in the mmc@4021000 node:

max-frequency: 50 MHz -> 25 MHz
removed: cap-sd-highspeed, cap-mmc-highspeed, mmc-ddr-3_3v, mmc-ddr-1_8v
wifi_pwrseq: added post-power-on-delay-ms = <200>

After that both SDIO functions enumerate, firmware loads, wlan0 shows up, nmcli connects, and it comes back after a reboot without the Ethernet cable.

I changed these together and didn’t test them individually, so I don’t know which one is essential. Only tested on this image/kernel and one box; Bluetooth untested. Newer revisions with other chips (e.g. YC8800D) are a different case.

If you use LYU’s image, replacing /boot/dtb/allwinner/T95zPlus-H618.dtb wt95zplus-aw869a-wifi-fix.zipith the patched one and rebooting should be all that’s needed. Happy to share the DTB/DTS if anyone wants it."

 

I tested it at my t95zplus, wifi is working. I attach the dtb and dts claude found out. Simply replace the DTB in /boot/dtb/allwiner/T95zPlus-H618.dtb by the dtb of the zip file.  Here is an instruction according to Claude: 

 

I tested it at my t95zplus, wifi is working. I attach the dtb and dts claude found out. Simply replace the DTB in /boot/dtb/allwiner/T95zPlus-H618.dtb by the dtb of the zip file:

Flash the image at an SD card

unzip the attached file in ~/Downloads

find your SD card sdX1 with lsblk (typically sdX1 is sda1 or sdb1)

then:

sudo mkdir -p /mnt/sd

sudo mount /dev/sdX1 /mnt/sd

ls /mnt/sd/boot/dtb/allwinner/ | grep T95


 

sudo cp /mnt/sd/boot/dtb/allwinner/T95zPlus-H618.dtb /mnt/sd/boot/dtb/allwinner/T95zPlus-H618.dtb.stock

sudo cp ~/Downloads/T95zPlus-H618.dtb /mnt/sd/boot/dtb/allwinner/T95zPlus-H618.dtb


 

sha256sum ~/Downloads//T95zPlus-H618.dtb /mnt/sd/boot/dtb/allwinner/T95zPlus-H618.dtb

sync

sudo umount /mnt/sd


 

Start your t95zplus and do the armbian installation.

Then you can initilize wifi on the box:


 

# 1. Hold kernel packages

sudo apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 linux-u-boot-t95zplus-h618-edge

apt-mark showhold


 

# 2. Optional: back up /boot

sudo cp -a /boot ~/boot-backup-$(date +%F)


 

# 3. Check WiFi state (rfkill needs sudo)

sudo rfkill list

sudo rfkill unblock wifi


 

# 4. Enable WiFi and scan

sudo nmcli radio wifi on

sudo nmcli device wifi rescan

sleep 5

nmcli device wifi list


 

# 5. Connect WiFi

sudo nmcli device wifi connect 'YOUR_WIFI_NAME' password 'YOUR_PASSWORD'


 

# 6. Verify

ip -br addr

ping -c3 -I wlan0 1.1.1.1


 

# 7. Test auto-connect (unplug the LAN cable first)

nmcli connection show

sudo reboot

 

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.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.