How to configure VFD

Thanks, that did the trick!
Great work! :partying_face:

Some questions still remain:

  1. Is there any use for the clock symbol? I noticed that it is now turned off. Not that I do mind but just wondering.
  2. It seems that the gxl_p212_2g.dtb file is not entirely compatible with the z69 2GB, should an alternative be made?
  3. Should we add the vfd config to here?
  1. The issue was the order of the characters.
    The clock icon is not used in CE, but you can use it for other things. I used it as the storage access indicator.
  2. Right, the DTB will need to be adjusted. It’s possible to do that using an script.
  3. I will once it’s finalized.

Edit: Can you verify that wifi still works? That we didn’t break anything in the functionality with the dtb changes.

but you can use it for other things. I used it as the storage access indicator.

Ah I see, was hoping to use it as a network activity indicator as I do not use local attached storage, but seems the plugin does not (yet) support this.

It’s possible to do that using an script.

But without documentation users probably won’t find that?

Can you verify that wifi still works?

Sure, personally I do not WiFI.
But the adapter is found and is able to see some SSID’s in CoreELEC:

wlan0     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

At first I thought WiFI was removed since the dtb file specifically had nowifi it its name :stuck_out_tongue:

Ok, here’s the file.
Can you please try it with the default CE DTB and let me know if it works and if the instructions are clear?

Sure, but I have some questions.

  1. It seems that only triggers when /wifi/ pinctrl-names is set to default? yet /dev-bt is removed in the process? Is that correct? What if the dtb file contains no /wifi/ pinctrl-names?
  2. Why is the /flash filesystem remounted? The manpage of ftdput is very brief, but to my understanding this changes the DeviceTree at runtime and not the dtb.img file itself :thinking:?
    Ah ftdput does indeed change the dtb file when I look at these examples.
  3. One off-topic question, according to the Device Trees page all devices running the S905W soc use some version of the gxl_p281_xx file. Since my Z69 Pro uses the S905W instead of the S905X as the Z69 (without pro) does. Shouldn’t I be really using the gxl_p281_2g instead?

Edit: I’ve tried your file, but I think dev-bt should be bt-dev?

coreelec:/flash # fdtput -r -t s /flash/dtb.img /dev-bt
Error at '/dev-bt': FDT_ERR_NOTFOUND
coreelec:/flash # fdtput -r -t s /flash/dtb.img /bt-dev
coreelec:/flash #

Edit2: I’ve changed the to:

if [ "$(fdtget -t s /flash/dtb.img /wifi/ pinctrl-names 2> /dev/null)" == "default" ]; then
    echo "DTB file incorrect, patching now..."
    mount -o remount,rw /flash
    fdtput -r -t s /flash/dtb.img /bt-dev
    fdtput -d -t s /flash/dtb.img /wifi/ pinctrl-names
    fdtput -d -t s /flash/dtb.img /wifi/ pinctrl-0
    mount -o remount,ro /flash
    echo "Done"
    echo "DTB file correct, no patching required"

This will redirect stderr so the 2nd time the script runs it won’t output:

coreelec:~/.config # ./
Error at 'pinctrl-names': FDT_ERR_NOTFOUND

And I added some echo statements for user feedback.

Edit3: I’ve now installed gxl_p281_2g.dtb instead of gxl_p212_2g.dtb and applied your script and the LCD screen is working. Am I correct to assume that 281 is a better fit for my mediabox than 212?

Edit4: Correct me if I’m wrong but the sync command is not actually required here? since re-mounting the fs should already trigger a sync operation?

    mount -o remount,ro /flash

Edit5: Hopefully my last edit :stuck_out_tongue:, but don’t forget to add instructions to make the script executable with chmod +x /storage/.config/ otherwise people not so familiar with Linux will probably forget such a step.

  1. Yes, if this entry exists, it’ll run the script and delete the entries we don’t need.
  2. Right.
  3. As long as everything works ok, I don’t think it matters which one you use.


  1. Yes, that was a wrong copy-paste. Fixed now.
  2. This script runs without any kind of user output, we don’t need prints.
    I added your correction to dump the error to /dev/null, but it shouldn’t be a big deal as the user will not see this during normal boot.
  3. These entries are the same in p212 and p281, so the script should work regardless of which device is used.
  4. I’m not sure, better safe than sorry, as it can’t hurt. And it’s only executed once or after an update.
  5. Unnecessary according to Startup & Shutdown -
1 Like doesn’t need to have executable permissions because it is call by sh: CoreELEC/kodi-autostart.service at coreelec-19 · CoreELEC/CoreELEC · GitHub
This way user can add this file over samba and doesn’t need to care for permissions


Hey. Hey. I’d like to ask. I’d like to have my X96max+ box turned on its back. Is it possible to edit the vfd file so that the display is rotated 180°? Thank you.
I am using this vfd.:

# X96 Max (S905X2) configuration





I think it is possible after such information that at the beginning the vfd display shows upside down

Please read through this.

Does anyone know why my clock display black out after resume from standby.

I installed a coreelec update yesterday, and the commend you added:
reboot after an update if the VFD screen is blank.
Is indeed correct, the reboot was required after the update.
The screen is still working to this day, so once again thanks for the help :heart:

PS. I just noticed, why are some of my post marked as spam?

IS there a VFD for the Beelink GTKing Pro?

No, the Beelink GTKing Pro doesn’t have a display.

Here is the information requested for my HK1 RBOX S905X4 with no VFD

 cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 425-511, parent: platform/pinctrl@0xfe004000, periphs-banks:
 gpio-439 (                    |amlsd               ) out hi
 gpio-449 (                    |amlsd               ) in  lo
 gpio-456 (                    |amlsd               ) out lo
 gpio-457 (                    |key                 ) in  hi
 gpio-465 (                    |?                   ) out hi
 gpio-471 (                    |avout_mute          ) out hi
 gpio-481 (                    |sdio_wifi           ) out hi
 gpio-482 (                    |sdio_wifi           ) in  hi
 gpio-492 (                    |bt_rfkill           ) out hi
 gpio-494 (                    |bt_rfkill           ) out hi

CE20 nightly





1 Like

Was that taken in Android? Because you need to take this info in Android, not from CoreELEC.

Was there no gpiochip1 output? There are two GPIO banks on Amlogic SoCs.
The output you posted doesn’t contain the information about which pins are used by the display.
And the vfd file you selected will not work with your box, as there are conflicting pins.

Sorry missed that part about Android I am using that VFD because that was what was asked. Report about Amlogic S905X4 HK1 RBOX X4 - #304 by Betatester

Running as normal and su there is no /sys/kernel/debug.

Android dmesg shows /sys/module/aml_fd655 for vfdsrv if that helps. Seems consistent with comments here GitHub - hkallweit/linux-amlogic-sc2 at sc2 Maybe the source there is needed?

Try this file.
hk1-rbox-vfd.conf (1.2 KB)
Reboot after replacing the other vfd file.

1 Like

Sorry no change, logs here if they help