Ubuntu Concept ♥️ Snapdragon X Elite

Are you sure? QEMU reports the kvm module not being found.

qemu-system-aarch64: Could not access KVM kernel module: No such file or directory
qemu-system-aarch64: failed to initialize kvm: No such file or directory

cr ) sudo kvm-ok
INFO: /dev/kvm does not exist
HINT:   sudo modprobe kvm
modprobe: FATAL: Module msr not found in directory /lib/modules/6.17.0-8-qcom-x1e

I have tried loading the kvm driver manually and it does not do anything.

jglathe@t14s-jg:~$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

The system needs to start on EL2 via slbounce, though. I will put an updated Wiki on my repo - it has gotten way easier IMO.

Please send me the wiki post when it’s ready :pray:

1 Like

Has anyone managed to install a kernel via efi stub? I’ve installed this Ubuntu on my surface 7 15 laptop (working okay) and am currently trying to install Gentoo on the same machine. I’ve no problems working inside the chroot using the gentoo arm64 stage3 file and have compiled the whole system.

I can boot a kernel (6.17-rc6 from git-sources) which flashes some boot messages for an instant then the screen goes black though the backlight remains on. I’ve been building the firmware, kernel command-line and drivers into the kernel image but no luck properly booting as of now. I’ve a feeling that I’m missing something related to the display driver as I’m pretty sure the device tree is being found.

I’ve also manually patched this kernel with: https://git.codelinaro.org/linaro/arm64-laptops/linux/-/commit/7719de397eb9b021650aac9c3ae33d6da17ff24b

My current kernel config is here if anyone is interested: Snapdragon-X-Elite-kernel-config/config-linux-6.17-rc6.txt at main · BrannigansLaw/Snapdragon-X-Elite-kernel-config · GitHub

1 Like

people do boot “my” kernel build via EFI stub, I added the requested config a few months ago. I haven’t done so (yet).

Thanks, I’ll check your config and see what I’m missing.

Just curious on why a window manager would affect anything. I have been running Dwm (and Ubuntu’s Gnome) since I first got Ubuntu installed. No problems whatsoever related to window management.

Hola, yo pude arrancar gentoo copiando el último kernel de Ubuntu concept.

cp /boot/vmlinuz-6.17.0-8-qcom-x1e initrd.img-6.17.0-8-qcom-x1e dtb-6.17.0-8-qcom-x1e config-6.17.0-8-qcom-x1e a /boot partición gentoo

Después desde su entorno chroot Gentoo haga un grub-mkconfig -o /boot/grub/grub.cfg

fuera de chroot desde Ubuntu recarga grub

update-grub o grub-mkconfig -o /boot/grub/grub.cfg

Reinicia

Hi, I was able to boot Gentoo by copying the latest Ubuntu Concept kernel.

cp /boot/vmlinuz-6.17.0-8-qcom-x1e initrd.img-6.17.0-8-qcom-x1e dtb-6.17.0-8-qcom-x1e config-6.17.0-8-qcom-x1e to /boot gentoo partition.

Then from your Gentoo chroot, run grub-mkconfig -o /boot/grub/grub.cfg

Outside the chroot, from the Ubuntu shell, reload grub with

update-grub or grub-mkconfig -o /boot/grub/grub.cfg

Reboot

2 Likes

Good to hear, I’m having a weird issue where my kernel panics because it cannot mount my root partition even though I’m using the right partuuid on the kernel command-line. I’ll just try the kernel you mentioned with grub. Thanks

1 Like

That’s good. The same kernel boots with the Ideapad dtbs. Not all devices get enabled (esp. camera), but yay, good enough

1 Like

Thanks @glathe for setting up the plucky-desktop-arm64+x1e-20250827_extended.iso and adding the partition to hold your latest kernel build 6.16-el2-jg-5 files.
The good news for my Asus Vivobook S15 x1p42100 is that the install doesn’t crash and now runs to completion on a second USB-A drive, downloading and installing 6.17.0-8 kernel.
The bad news is that booting it up crashes out quite early, after only about a page of large text displayed on the screen (after the EFI-stub messages). I chrooted into my target USB drive and installed your 6.16-el2-jg-5 kernel but suffered the same boot problem.
It also fails to boot on the iso’s 6.16.0-27 kernel.

1 Like

I finally known that why my arm64 ubuntu install USB always reboot and can’t do any thing. I think may because there is no dtb file for surface pro11 and the watchdog always reboot the OS.
But I found a way to start the kernel. I modified the grubcfg, seted grub timeout equal to 0, and seted fixed use dtb file of Surface Laptop 7. Then the wachtdog and reboot stopped. But a new problem appeared: There was nothing on the screen, and I tried starting text mode or disabling GPU acceleration, but they didn’t work, still nothing on the screen.
Why is that? Because of the dtb file?

1 Like

Hi @satphil, should be enough to:

  • copy over the dtbs from the root of that KERNEL_PKG partition to /boot,
  • add the line

devicetree /boot/x1p42100-asus-vivobook-s15.dtb

on every Linux menu entry in grub.cfg. I would also recommend to make a copy of that modified grub.cfg for future updates / devastations by standard scripts. All three mentioned kernels can boot and operate the laptop afaik, tested with Ideapad 5.

The reason for that pitfall is the new-ish stubble boot loader (which I don’t have). With that, flash-kernel is removed and automatic install of a new kernel (regardless) goes south if the Laptop isn’t supported by stubble.

I’m a bit (or so) behind in documenting things. Still WIP.

Why the dtbs from the KERNEL_PKG partition: They are a bit modified and have lenovo,thinkpad-t14s in the compatible string. This enables scm and efivars access, essential for installing grub or doing stuff in efibootmgr. My kernel packages have a modified qcom_scm driver that doesn’t need it, but Ubuntu Concept kernels don’t.

Thanks for the tip @glathe - I should have let this problem simmer overnight before bothering you as I woke up at 2am and suddenly thought “I bet it is the .dtb file and the devicetree statement like your extended iso uses to boot up”. I did as you suggested and it is booting up just fine. That’s a great achievement being able to do a regular install to an X1P42100 from your iso. Thanks again.

1 Like

I’ve found the firmware for the X1P42100 Adreno X1-45 GPU via poking around the linux-firmware mailing list as suggested. See
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/qcom
which has two files gen71500_sqe.fw and gen71500_gmu.bin at this level and gen71500_zap.mbn in its x1p42100 subdirectory. I’ve also added the ernstp/mesaaco PPA to my apt sources.
However, I’m not sure how to progress. I copied that pair of firmware files and the x1p42100 subdirectory to /lib/firmware/qcom. Note there is only the gen71500_zap.mbn in that x1p42100 subdirectory whereas its sibling x1e80100 has ten or so firmware files.
That mesa PPA could update various existing packages I have. But there is also the snap mesa-2404 package that I have installed. Do I just upgrade the packages the PPA updates and leave the snap as is?
If I install mesa-utils and run
glxinfo | grep “OpenGL renderer”
it just sayas “llvmpipe” rather than “Adreno …” so I’m assume this confirms I’m still using software rendering and not using the GPU at this stage.

1 Like

That’s a lot of questions :grinning: Well, getting the gen71500* firmware was right, and it should be in /lib/firmware/qcom/ or /lib/firmware/updates/qcom/. The first has theadvantage of being overwritten when the files are in the linux-firmware package. Assuming its “more valid” this should be the place.
For the other firmware files, well. As I said its still WIP, the qcom-firmware-extract package naturally doesn’t know this device (and says so). The solution to this would be to use the fetch script I used on the dedicated images. I have uploaded it to the repo. This should be enough when on the nvme, it needs to be executed when booted from the nvme once:

sudo /usr/local/bin/fetch_x1p42100-asus-vivobook-s15_fw.sh

On next reboot it should load the required firmwares.

gen71500_zap.mbn shouldn’t be required, the Vivobook has its own indivdually signed zap firmware. Only that one works.

Regarding ernstp/mesaaco and the mesa snap: This works but is a bit unclean. On a new install it might be worth it to try the 25.10 sudo do-release-upgrade -d, it contains a mesa that directly supports x1p. The renderer in glxinfo should be Adreno, yes.

1 Like

Hello people,

I’ve been going at setting up my T14s gen 6 32GB on Ubuntu 25.04 and I’ve had some trouble getting slbounce to work. I compiled a 6.17 rc7 kernel, the sltest worked and now I’m trying to boot into slbounce. When I try to use the DT overlay Linux doesn’t boot complaining about not loading the cdsp and adsp. I created the DTB overlay using the command in the repository based on the DT that I have created using the extract script.

What am I missing? To boot into slbounce I added a grub entry, I run the load slbounce.efi command, I run exit and then load the appropriate GRUB entry using the DTBO file. When doing the above mentioned procedure with the regular DTB file the OS boots up but kvm-ok, which I’m trying to get out of this, is still not working.

Also a side quest, is cpufreq working for you? My cpu is pegged at 2977MHz based on the dmidecode command and I expect this is what’s hitting the battery runtime hard.

1 Like

Hi, welcome to the forum. I’m afraid the slbounce documentation may not be up to date… I use slbounce regularly on the T14s (among others) and I just use the -el2 dtb generated by building the kernel. Just this way:

  • boot an efi shell
  • in startup.nsh change to the right partition and load slbounce.efi, then exit
  • exit will relinquish control back to the next boot entry (which is grub here).
  • Select the entry to boot and fire

Current slbounce.efi built with make and no additional options will check if the dtb loaded before calling EBS is el2-compatible, and switch to EL2 in this case. So, you can boot EL1 and EL2 menu entries (and Windows and whatnot) without further change.

1 Like

So from what I’m getting I don’t need to create a special grub entry with the -el2 DTB file that I have generated using the fdtoverlay as in the tutorial on the repo? How can I check that I have booted correctly into EL2?

1 Like