Ubuntu 24.04 on Tachyon - Early Access & Open Development

Well the fixes in the Ubuntu 20 die not handle the camera for me (which I need). Can someone tell me if this build here in it’s current state includes a camera stack (QMMF + kernel V4L2 driver) and is funtional?

Giving up on this as I can't make this work. Certainly doesn't work on Linux Mint. I had to force the GID and UID by explicitly expressing the value in the Dockerfile. But still can't get this process to finish. Any idea when we'll have a fully healed Ubuntu 24 to flash to the Tachyon?

Hi @mrlambchop, thanks for the updates and for making the WIP available! However, many of us are still waiting on important features, like a full 24.04 desktop release with the proper display overlays that utilise hardware acceleration. Are we still looking at a 2025 release for that, or has it been pushed back? I would like to update my supply chain roadmap with something approaching realistic :slight_smile:

Hi all. For folks contributing to the Ubuntu 24.04 development, if you would like to purchase a second discounted (40% off) Tachyon for testing and development, please PM me. Thanks!

Hi I have been trying to connect bluetooth but the difference between 20 and 24 is to heavy for user end patch.
Try this small patch it is ‘maybe’ working.From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tachyon Workaround tachyon@example.com
Date: Sun, 5 Oct 2025 12:45:00 +0200
Subject: [PATCH] bluetooth: qca: remove RAW quirk and force BDADDR when unset

  • Clear HCI_QUIRK_RAW_DEVICE so the controller registers on mgmt.
  • If the controller reports an all-zero or placeholder BDADDR, program a
    locally administered test address (02:5A:AD:00:00:01) via qca_set_bdaddr.

This is a temporary workaround for Android/AOSP flavored kernels running
with Ubuntu 24 userspace (BlueZ 5.72), where serdev QCA devices show as
RAW and BlueZ exposes no controller.

Signed-off-by: Tachyon Workaround tachyon@example.com

drivers/bluetooth/hci_qca.c | 44 +++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)

diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index 111111111111..222222222222 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -xx,6 +xx,7 @@
#include <linux/firmware.h>
#include <linux/of.h>
#include <net/bluetooth/hci_core.h>
+#include "btqca.h"

/*

  • … existing includes and declarations …
    @@ -yyyy,6 +yyyy,45 @@ static int qca_setup(struct hci_uart hu)
    /
    At this point firmware/NVM should be in place */
    bt_dev_info(hdev, "QCA setup on UART is completed");

  •   /*
    
  •    * Some Android-based BSPs mark QCA devices as RAW, which prevents
    
  •    * BlueZ/mgmt from seeing any controller index. Clear that quirk here.
    
  •    */
    

+#ifdef HCI_QUIRK_RAW_DEVICE

  •   clear_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
    
  •   bt_dev_info(hdev, "Cleared HCI_QUIRK_RAW_DEVICE (workaround)");
    

+#endif
+

  •   /*
    
  •    * Force a usable BDADDR if the controller comes up with an invalid
    
  •    * address (all zeros) or the observed placeholder 00:00:00:00:5A:AD.
    
  •    *
    
  •    * We use a locally administered address: 02:5A:AD:00:00:01.
    
  •    * NOTE: This is for lab/testing only. A proper unique address must
    
  •    * come from NVM or device tree (local-bd-address) in production.
    
  •    */
    
  •   do {
    
  •           static const u8 invalid_all_zero[6] = { 0, 0, 0, 0, 0, 0 };
    
  •           static const u8 invalid_placeholder[6] = { 0x00, 0x00, 0x00, 0x00, 0x5A, 0xAD };
    
  •           /* bdaddr_t is little-endian; 02:5A:AD:00:00:01 -> {01,00,00,AD,5A,02} */
    
  •           static const u8 forced_le[6] = { 0x01, 0x00, 0x00, 0xAD, 0x5A, 0x02 };
    
  •           bdaddr_t addr;
    
  •           if (memcmp(&hdev->bdaddr, invalid_all_zero, sizeof(invalid_all_zero)) &&
    
  •               memcmp(&hdev->bdaddr, invalid_placeholder, sizeof(invalid_placeholder))) {
    
  •                   break; /* looks valid; do nothing */
    
  •           }
    
  •           memcpy(&addr.b, forced_le, sizeof(forced_le));
    
  •           bt_dev_info(hdev, "Forcing BDADDR to 02:5A:AD:00:00:01 (workaround)");
    
  •           /*
    
  •            * Program the BDADDR using QCA vendor command helper.
    
  •            * If this fails, we still continue; mgmt may reject power on.
    
  •            */
    
  •           qca_set_bdaddr(hdev, &addr);
    
  •   } while (0);
    
  •   return 0;
    

err:

2.43.0

I've tried building on the Tachyon itself and the script still fails at step 4. I don't understand how you guys are getting this to work.

Great to see that you opened the beta development with the community. Big like :+1:

Building Ubuntu image is not my hobby project but I installed the pre-built variant and started to test it. Below my findings.

Missing memory

After a fresh install I can see only 5GB of memory from the 8GB.

root@localhost:/# free
               total        used        free      shared  buff/cache   available
Mem:         5327244      719828     3653412        2240     1122652     4607416
Swap:              0           0           0

I checked the dmesg and found some mem reserve OVERLAP errors (might be independent issue though):

[    0.000000] Machine model: Particle Tachyon
[    0.000000] efi: EFI v2.11 by Das U-Boot
[    0.000000] efi: ESRT=0x1eec69040 RTPROP=0x1eec6b040 SMBIOS 3.0=0x1efe70000 MOKvar=0x1da110000 INITRD=0x1d10b8040 RNG=0x1d10b7040 MEMRESERVE=0x1d10b6040
[    0.000000] random: crng init done
[    0.000000] secureboot: Secure boot disabled
[    0.000000] esrt: Reserving ESRT space from 0x00000001eec69040 to 0x00000001eec69078.
[    0.000000] OF: reserved mem: OVERLAP DETECTED!
               xbl@80600000 (0x0000000080600000--0x0000000080800000) overlaps with xbl_aop_mem@80700000 (0x0000000080700000--0x0000000080860000)
[    0.000000] OF: reserved mem: OVERLAP DETECTED!
               xbl_aop_mem@80700000 (0x0000000080700000--0x0000000080860000) overlaps with aop@80800000 (0x0000000080800000--0x0000000080860000)
[    0.000000] OF: reserved mem: 0x00000000004cd000..0x00000000004cdfff (4 KiB) nomap non-reusable wlan-ce@4cd000
[    0.000000] OF: reserved mem: 0x0000000080000000..0x00000000805fffff (6144 KiB) nomap non-reusable hyp@80000000
[    0.000000] OF: reserved mem: 0x0000000080600000..0x00000000807fffff (2048 KiB) nomap non-reusable xbl@80600000
[    0.000000] OF: reserved mem: 0x0000000080700000..0x000000008085ffff (1408 KiB) nomap non-reusable xbl_aop_mem@80700000
[    0.000000] OF: reserved mem: 0x0000000080800000..0x000000008085ffff (384 KiB) nomap non-reusable aop@80800000
[    0.000000] OF: reserved mem: 0x0000000080860000..0x000000008087ffff (128 KiB) nomap non-reusable aop-cmd-db@80860000
[    0.000000] OF: reserved mem: 0x0000000080880000..0x0000000080893fff (80 KiB) nomap non-reusable xbl-uefi-res@80880000
[    0.000000] OF: reserved mem: 0x00000000808ff000..0x00000000808fffff (4 KiB) nomap non-reusable sec-apps@808ff000
[    0.000000] OF: reserved mem: 0x0000000080900000..0x0000000080afffff (2048 KiB) nomap non-reusable smem@80900000
[    0.000000] OF: reserved mem: 0x0000000080b00000..0x0000000080bfffff (1024 KiB) nomap non-reusable cpucp@80b00000
[    0.000000] OF: reserved mem: 0x0000000080c00000..0x00000000817fffff (12288 KiB) nomap non-reusable wlan-fw@80c00000
[    0.000000] OF: reserved mem: 0x0000000081800000..0x00000000835fffff (30720 KiB) nomap non-reusable cdsp_secure_heap@81800000
[    0.000000] OF: reserved mem: 0x0000000086200000..0x00000000866fffff (5120 KiB) nomap non-reusable camera@86200000
[    0.000000] OF: reserved mem: 0x0000000086700000..0x0000000088efffff (40960 KiB) nomap non-reusable adsp@86700000
[    0.000000] OF: reserved mem: 0x0000000088f00000..0x000000008acfffff (30720 KiB) nomap non-reusable cdsp@88f00000
[    0.000000] OF: reserved mem: 0x000000008ad00000..0x000000008b1fffff (5120 KiB) nomap non-reusable video@8ad00000
[    0.000000] OF: reserved mem: 0x000000008b200000..0x000000008b6fffff (5120 KiB) nomap non-reusable video@8b200000
[    0.000000] OF: reserved mem: 0x000000008b700000..0x000000008b70ffff (64 KiB) nomap non-reusable ipa-fw@8b700000
[    0.000000] OF: reserved mem: 0x000000008b710000..0x000000008b719fff (40 KiB) nomap non-reusable ipa_gsi@8b710000
[    0.000000] OF: reserved mem: 0x000000008b71a000..0x000000008b71bfff (8 KiB) nomap non-reusable zap@8b71a000
[    0.000000] OF: reserved mem: 0x000000008b800000..0x000000009adfffff (251904 KiB) nomap non-reusable mpss@8b800000
[    0.000000] OF: reserved mem: 0x000000009ae00000..0x000000009c6fffff (25600 KiB) nomap non-reusable wpss@9ae00000
[    0.000000] OF: reserved mem: 0x00000000c0000000..0x00000000c50fffff (82944 KiB) nomap non-reusable removed_region@c0000000
[    0.000000] OF: reserved mem: 0x00000000d0800000..0x00000000d7ef6fff (121820 KiB) nomap non-reusable pil_trustedvm_region@d0800000
[    0.000000] OF: reserved mem: 0x00000000d7ef7000..0x00000000d7efffff (36 KiB) nomap non-reusable qrtr-shmem
[    0.000000] OF: reserved mem: 0x00000000d7f00000..0x00000000d7f7ffff (512 KiB) nomap non-reusable neuron_block@0
[    0.000000] OF: reserved mem: 0x00000000d7f80000..0x00000000d7ffffff (512 KiB) nomap non-reusable neuron_block@1
[    0.000000] OF: reserved mem: 0x00000000e3300000..0x00000000e33fffff (1024 KiB) map non-reusable dfps@e3300000
[    0.000000] OF: reserved mem: 0x00000000fc200000..0x00000000fc47ffff (2560 KiB) nomap non-reusable rmtfs@fc200000

This is too low level to me so I gave up further troubleshooting and root cause analysis. Sorry :frowning:

WiFi configuration is missing

The WiFi configuration during the setup is not saved to the OS. I logged in via adb and added the configuration with nmtui command.

Note that I did the setup twice so unlikely that I entered wrong WiFi data twice (that was my first thought).

Note2, my WiFi SSID contains a hypen “-”. Maybe it caused the issue but it worked during the 20.04 setup.

After I have WiFi connection then the status LED doesn’t change to magenta but still it is a gloving green.

High CPU usage

The NetworkManger, dbus-daemon and the particled processes have relatively high CPU usage when the board is in idle. All of them around 10-15%

Tasks: 285 total,   1 running, 284 sleeping,   0 stopped,   0 zombie
%Cpu(s):  9.7 us,  5.9 sy,  0.0 ni, 84.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   5202.4 total,   2357.4 free,    832.3 used,   2192.1 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   4370.1 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   1251 root      20   0  335536  18472  15656 S  17.5   0.3   3:51.23 NetworkManager
   1116 message+  20   0   11096   5120   3840 S  13.5   0.1   3:01.39 dbus-daemon
   1409 root      20   0   20.8g 158536  43648 S  13.2   3.0   3:41.63 particled

Those were the same even before the proper WiFi configuration would have been done via adb.

Running the dbus-monitor --system

I found continuous spamming with this message:

signal time=1760713704.414966 sender=org.freedesktop.DBus -> destination=(null destination) serial=145702 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.72998"
   string ""
   string ":1.72998"

Update: the particle-linux service is the guilty. I stopped it and it solved the dbus and cpu load related issues.

This is my temporary workaround:

particle@inci:~$ sudo systemctl stop particle-linux.service 
particle@inci:~$ sudo systemctl disable particle-linux.service 
Removed "/etc/systemd/system/multi-user.target.wants/particle-linux.service".

As this process is responsible to set the WiFi hence likely it is broken and that’s the root cause of the missing WiFi config as well.

No Particle console connection

Even after I set up the network properly then the device doesn’t register to the Particle cloud. This might be the root cause of the previous issue. E.g.: the particled tries to connect but it just retries and burns a bit of CPU.

Wrong link in doc

You have a wrong forum link on this page: How to Get Involved | Particle Developer

…or the thread is not public: https://community.particle.io/t/ubuntu-24-04-development

Working Kubernetes

Finally a good news. I could install Kubernetes which didn’t work on 20.04 due to the old Kernel :partying_face:

I finally made some progress with this but only because I should have examined the sample command given in the instructions, which has a typo and an omission, the typo is mixing headless overlay with the desktop package, also INPUT_VARIANT is completely missing:

Now I just have to figure out why at the end of compiling I'm getting a MAKE error 2.

Did you get anywhere with your error? I'm getting the same error when it tries to set up the loop device. I'm compiling on the tachyon.

Unfortunately not. I had to stop all experiments with the Tachyon 4 weeks ago due to heavy workload.. last thing i did was trying to fully ditch the dockerized build stuff as it did neither work on my tachyon nor my arch system.

Ok thanks for the update. I guess I'll just hurry up and wait rather than beat my head against the wall.

1 Like

Hello, I wanted to upgrade to Ubuntu24.04, so I tried to build it along the developer guide and tachyon-composer github. I'm building it on tachyon board. But I failed to build the image. Are there any other prerequisites for building Ubuntu images?

The build log is below, please help.

root@tachyon-5f1841b0:~/devel/tachyon-composer-default# make build_24.04   VERSIONS_FILE=./versions.json   INPUT_REGION=RoW   INPUT_VARIANT=desktop

Using versions file ./versions.json to override versions
Tachyon System Image Composer v1.1.17




                                           *

   Tachyon System Image — Configuration    *

                                           *




Source:            versions.json: ./versions.json
Version Tag:       1.1.17

Inputs (resolved)
Base 20.04 Ver:  1.0.175
24.04 Build ID:  18-32fd4db
Region:          RoW
Variant:         desktop
U-Boot Ver:      1.0.5
Overlays Ref:    HEAD

Paths
Tmp Input Dir:   ./.tmp/input
Tmp Output Dir:  ./.tmp/output
Overlay Path:    input/tachyon-overlays
Overlay Dir OV:
U-Boot Dir OV:

Output
System Image:    tachyon-ubuntu-24.04-RoW-desktop-formfactor_dvt-9.9.999.zip
Debug:           false
Input Env:        PKG_particle_linux=0.22.0-1,PKG_particle_tachyon_desktop_setup=2.7.0,PKG_particle_tachyon_ril=0.4.5-1,PKG_particle_tachyon_syscon=1.0.19-1,PIN_PRIORITY=900




==> Fetching tachyon-overlays into /tmp/work/input/tachyon-overlays inside Docker
Unable to find image 'tachyon-system-image-builder:1.3' locally
docker: Error response from daemon: pull access denied for tachyon-system-image-builder, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
Installed tachyon-overlays into /tmp/work/input/tachyon-overlays
==> Setting up tachyon-overlay-tool tool inside Docker
Unable to find image 'tachyon-system-image-builder:1.3' locally
docker: Error response from daemon: pull access denied for tachyon-system-image-builder, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
make: *** [Makefile:397: /tmp/work/tools/tachyon-overlay-tool/.installed] Error 125

You haven't logged into Docker, re access denied.
I got a similar message, logged in and able to start the build.

Yes the INPUT_VARIANT is required adn desktop/headless is confusing.
I just started a build on the Mac and used headless for variant etc. and disk space out killed the build. I had to increase the docker rootfs_size as it was 100% full when it stopped.

Oh I wonder if that's what is happening for me, because I was building right on the Tachyon so it should have had lots of space to build on. I was exiting the script with Make Error 2 but looking back it seems it was running into permission problems creating the loop mounts. But maybe it was just running out of space. Can you tell me the procedure for the rootfs_size command? Where did you change that?

Thanks reply!
when you log in into Docker, do you use your docker account, right?
or, is there another method??

$ docker login -u [docker_username]

I did the following to build on the tachyon board itself.

  • RoW, delete .tmp, "make clean", docker login

The build of docker image part is able to pass through.
By the way, GPT partitioning error occurs, is there no way to solve this part?

==> Partitioning GPT (single Linux fs 'system_a') ...
Creating new GPT entries in memory.
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Creating new GPT entries in memory.
Setting name!
partNum is 0
The operation has completed successfully.
partx: /dev/loop1: error adding partition 1
make: *** [Makefile:315: apply] Error 1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Command failed (exit 2): make apply INPUT_OVERLAY_PATH="$INPUT_OVERLAY_PATH" INPUT_STACK_NAME="$INPUT_OVERLAY_STACK" INPUT_SYSTEM_IMAGE="$SYSDIR" DEBUG="$OVERLAY_DEBUG" INPUT_SYSTEM_IMAGE_MODE="inplace" TMP_ROOT_DIR="/tmp/work/output/overlay_work" $( [ -n "$OVERLAY_ENV" ] && printf "%s" "INPUT_ENV_VARS=$OVERLAY_ENV" )
Working dir: /tmp/work/tools/tachyon-overlay-tool
User: builder (uid=5006), groups: builder sudo
Kernel: Linux 3bbf3d48a0c7 5.4.219 #1 SMP PREEMPT Fri Sep 26 14:24:28 UTC 2025 aarch64 aarch64 aarch64 GNU/Linux
losetup -a:
/dev/loop0: [2059]:393760 (/tmp/work/input/tachyon-ubuntu-24.04-desktop-image-18-32fd4db.img)
lsblk (all):
NAME       MAJ:MIN   SIZE TYPE MOUNTPOINT                                           FSTYPE LABEL
loop0        7:0      12G loop
|-loop0p1    7:1    11.9G part /tmp/deps/particle-iot-inc/tachyon-ubuntu-24.04/root
-loop0p15 259:35     99M part /tmp/deps/particle-iot-inc/tachyon-ubuntu-24.04/efi          sda          8:0   116.7G disk                                                              |-sda1       8:1     512K part                                                              |-sda2       8:2     512K part                                                              |-sda3       8:3     512K part                                                              |-sda4       8:4       8K part                                                              |-sda5       8:5       1M part                                                              |-sda6       8:6     256M part                                                              |-sda7       8:7       8M part                                                              |-sda8       8:8      64M part                                                              |-sda9       8:9     256M part                                                              |-sda10      8:10      4G part                                                              -sda11      8:11  112.2G part /etc/hosts
sdb          8:16      8M disk
|-sdb1       8:17    3.5M part
-sdb2       8:18    232K part                                                              sdc          8:32      8M disk                                                              |-sdc1       8:33    3.5M part                                                              -sdc2       8:34    232K part
sdd          8:48    128M disk
|-sdd1       8:49    104K part
|-sdd2       8:50    128K part
-sdd3       8:51      1M part                                                              sde          8:64    128M disk                                                              |-sde1       8:65      1M part                                                              |-sde2       8:66      1M part                                                              -sde3       8:67    512K part
sdf          8:80    144M disk
|-sdf1       8:81    104K part
|-sdf2       8:82    128K part
|-sdf3       8:83      4M part
|-sdf4       8:84      4M part
|-sdf5       8:85      4M part
|-sdf6       8:86    1.5M part
|-sdf7       8:87    1.5M part
|-sdf8       8:88     32M part
|-sdf9       8:89      4M part
|-sdf10      8:90      4M part
|-sdf11      8:91    512K part
|-sdf12      8:92    512K part
|-sdf13      8:93      1M part
|-sdf14      8:94      1M part
|-sdf15      8:95    128K part
|-sdf16    259:15    128K part
|-sdf17    259:16    128K part
|-sdf18    259:17    128K part
|-sdf19    259:18      8M part
|-sdf20    259:19      8M part
|-sdf21    259:20    512K part
|-sdf22    259:21    512K part
|-sdf23    259:22     32K part
|-sdf24    259:23     32K part
|-sdf25    259:24     16M part
|-sdf26    259:25     80K part
|-sdf27    259:26     80K part
|-sdf28    259:27    256K part
|-sdf29    259:28    256K part
|-sdf30    259:29    128K part
|-sdf31    259:30    128K part
|-sdf32    259:31      4M part
|-sdf33    259:32      4M part
|-sdf34    259:33      2M part
-sdf35    259:34      2M part                                                              sdg          8:96    1.8G disk                                                              |-sdg1       8:97    220M part                                                              |-sdg2       8:98    220M part                                                              |-sdg3       8:99     64M part                                                              |-sdg4       8:100    64M part                                                              |-sdg5       8:101     4K part                                                              |-sdg6       8:102     1M part                                                              |-sdg7       8:103     4K part                                                              |-sdg8       8:104     4K part                                                              |-sdg9       8:105     1M part                                                              |-sdg10      8:106    40M part                                                              |-sdg11      8:107    64M part                                                              |-sdg12      8:108    30M part                                                              |-sdg13      8:109   512K part                                                              |-sdg14      8:110     1M part                                                              |-sdg15      8:111  32.6M part                                                              |-sdg16    259:0      20M part                                                              |-sdg17    259:1     128K part                                                              |-sdg18    259:2     128K part                                                              |-sdg19    259:3     512K part                                                              |-sdg20    259:4     256K part                                                              |-sdg21    259:5       8M part                                                              |-sdg22    259:6     128K part                                                              |-sdg23    259:7      28K part                                                              |-sdg24    259:8      96M part                                                              |-sdg25    259:9      96M part                                                              |-sdg26    259:10     24M part                                                              |-sdg27    259:11     24M part                                                              |-sdg28    259:12      2M part                                                              |-sdg29    259:13      2M part                                                              -sdg30    259:14   32.6M part
md0          9:0       0B md
zram0      253:0     3.6G disk [SWAP]
Mounts (grep deps):
/dev/sda11 on /tmp/work type ext4 (rw,relatime)
/dev/loop0p1 on /tmp/deps/particle-iot-inc/tachyon-ubuntu-24.04/root type ext4 (rw,relatime)
/dev/loop0p15 on /tmp/deps/particle-iot-inc/tachyon-ubuntu-24.04/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
make: *** [Makefile:497: build_24.04] Error 2
1 Like

This is where I'm at. Can anyone attest to building this image properly?

I tried it out and built it on the nvidia jetson board. Then the build was successful and the image was created. When I set it up with that image, it was recognized as Ubuntu 24.04 in the particle console. Is there a difference between doing it on the nvidia jetson and doing it on the tachyon board?

=======================================================================
==> COMPLETED

EDL 24.04 path     : /tmp/deps/image/unpacked_24_04/images/qcm6490/edl
Rootfs output      : /tmp/deps/image/unpacked_24_04/images/qcm6490/edl/qti-ubuntu-robotics-image-qcs6490-odk-sysfs_1.ext4
EFI output         : /tmp/deps/image/unpacked_24_04/images/qcm6490/edl/efi.img
Package output     : /tmp/work/output/tachyon-ubuntu-24.04-RoW-desktop-formfactor_dvt-9.9.999.zip
==> Compose 24.04 image: completed.

Build completed successfully!
Output: /home/aaa/devel/particle_tachyon/tachyon-composer/.tmp/output/tachyon-ubuntu-24.04-RoW-desktop-formfactor_dvt-9.9.999.zip

I tried to activate opencl after I flash it to Ubuntu 24.04. By the way, I can't see any files related to kgsl. If Ubuntu 24.04's image was created properly, should there be some related to kgsl like Ubuntu 20.04 (default)?
Or does Ubuntu 24.04 not support it yet?

#### in the default tachyon board (ubuntu 20.04)

~# ls -l /dev/kgsl-3d0 
crw-rw-rw- 1 root root 510, 0 Jun 18  2024 /dev/kgsl-3d0