Skip to content

Instantly share code, notes, and snippets.

@joske
Last active February 15, 2025 21:24
Show Gist options
  • Save joske/52be3f1e5d0239706cd5a4252606644b to your computer and use it in GitHub Desktop.
Save joske/52be3f1e5d0239706cd5a4252606644b to your computer and use it in GitHub Desktop.
Arch Linux Arm on Lenovo Yoga Slim 7x (X elite)

Arch

This is the method I used to install Arch on the yoga slim 7x. This is from memory so I may have forgotten things

prerequisites

  • disable bitlocker in windows
  • resize the windows partition
  • disable secure boot in BIOS

installation

  • Download the Debian 12 image from https://git.codelinaro.org/linaro/qcomlt/demos/debian-12-installer-image
  • write it to USB, use gparted to resize the partition
  • download the latest (ancient) arch linux arm generic image from https://archlinuxarm.org/platforms/armv8/generic
  • unpack the initrd and add this tarball
  • also add some tools like mkfs.ext4 and fdisk (I downloaded debian 12 versions and unpacked the necessary libs and binaries)
  • boot from the USB (use F12)
  • once in installer, press Fn+alt+F2 to get to another TTY
  • create a wpa_supplicant file and start wpa_supplicant
  • back on tty1, continue the installer until it has setup networking
  • return to tty2
  • create /boot and / partitions (and any other you want)
  • mount / on /mnt
  • unpack the tarball into /mnt
  • mount /boot on /mnt/boot
  • bind mount /sys, /dev, /proc and /run in /mnt
  • chroot in /mnt
  • set the date with the date command (otherwise signature verification fails)
  • use
pacman-key --init
pacman-key --populate archlinuxarm
  • update with pacman -Syyu
  • copy kernel, initrd and device tree from the USB
  • do the rest of Arch setup
  • do some of the steps outlined by linaro, in particular the zink environment
  • exit the chroot
  • edit the USB grub to load from the nvme
  • reboot with F12 and boot from the nvme
  • build newer kernel, initrd and dtb
  • get firmware from https://github.com/Seraphin-/linux-firmware-x1e80100-lenovo-yoga-slim7x

post installation

  • I replaced the windows nvme with a bigger one that has only linux, that way I was able to update the UEFI boot manager to load Arch without the USB stick
    • Download shellaa64.efi and place it on USB stick
    • use the following grub entry:
    menuentry "UEFI Shell" {
      insmod fat
      insmod chain
      search --no-floppy --set=root --file /shellaa64.efi
      chainloader /shellaa64.efi
    }
    
    • boot to UEFI shell
    • use the commands in the debian 12 image explanation to set Arch as first boot entry
  • install mesa from this PKGBUILD https://github.com/joske/PKGBUILDs-x1e/tree/master/mesa
@smedir
Copy link

smedir commented Sep 12, 2024

The latest kernel gives working keyboard, touchscreen and trackpad.

Now working- bluetooth, sound, microphone, camera and battery monitoring. Also now real suspend and hiberante.

@joske
Copy link
Author

joske commented Sep 12, 2024

@smedir how did you get sound working? Do you mean using USB headphones or bluetooth?

For battery monitoring you need a pd-mapper, either in userspace or in kernel. For the userspace one, you need to find the jsn files from windows in firmware folder. The in-kernel one has issues.

@smedir
Copy link

smedir commented Sep 12, 2024

Whoops!, that was a typo- It is Not working, sound, microphone and bluetooth. I wanted to see if anybody else got it working and how 😄 suspend and hibernate also not working.

Thanks for the tip into pd_mapper. I will look into it. I am using gnome, which gives a red battery with no levels, uses upowerd. I see messages in the log from upower - it is getting NaN readings.

@anonymix007
Copy link

anonymix007 commented Sep 12, 2024

Here's the image I used for installation: x1e-endeavouros.img.7z
I've built Calamares while booted from USB from this PKGBUILD with only slight modifications and a dirty hack described here. After pacman -U I overwrote the configs in /etc/calamares/ with configs from calamares_config.tar.gz (same GDrive folder as the image) and installed with systemd-boot.
The partitioning is the following:

  1. ESP (stock from Windows) -> /efi
  2. Other Windows partitions
  3. Separate /boot (XBOOTLDR)
  4. Separate /root (needs to have endeavouros label and be f2fs)
  5. Separate /home

AFAIR it was necessary to create /home/liveuser for Calamares to work,
These configs still need some work (probably eos_bootloader module needs to be dropped), so after installation succeeds, it won't boot.
So one would need to chroot into the installed system, manually install linux-x1e and x1e-uki packages (second is optional; both packages are available in my repo) and create a simple systemd-boot config in /boot/loader/entries/ and then it should boot.
If installing x1e-uki, make sure to first create /etc/kernel/cmdline file:

efi=novamap pd_ignore_unused clk_ignore_unused fw_devlink=off cma=128M root=PARTLABEL=endeavouros rootfstype=f2fs rootwait rw loglevel=7

@kmeaw
Copy link

kmeaw commented Nov 25, 2024

Does KVM virtualization work on those machines?

@kuruczgy
Copy link

@kmeaw: It's... not impossible, but I don't know if anyone has tried it on the slim7x yet. The main difficulty is that by default these machines boot into EL1, and you have to jump through some hoops to boot them in EL2. See here: https://github.com/TravMurav/slbounce

Hardware support in EL2 is currently worse, because the default hypervisor provides some services that are missing when booting into EL2 using slbounce.

Also I don't know how much of KVM support is upstream yet, but I have heard that (with some unmerged patches) both normal and nested virt are working. (The person developing this is doing so on the DevKit AFAIK.)

@kuruczgy
Copy link

@kmeaw just to give an update, in the last 5 days I made a lot of progress. I can now boot my machine in EL2, and run QEMU VMs without issues. Steps that are needed (also see this draft PR for my NixOS repo):

The things that don't work compared to EL1 are the battery indicator and DP altmode.

(There is also a patch that makes slbounce detect whether you are loading an overlayed device tree (see my PR for that), and only do SL if that's the case. This way you can select between EL1 and EL2 mode from the boot menu without having to go through an EFI shell.)

@kmeaw
Copy link

kmeaw commented Nov 30, 2024

@kuruczgy Thank you for the update! I think this information would be really useful for someone considering buying a Snapdragon laptop and running Linux on it.

@KeithCu
Copy link

KeithCu commented Dec 21, 2024

It would be great to have a new Endeavour OS image with kernel 6.13, simpler and more streamlined. I hope it happens soon!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment