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.

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.