Skip to content

Instantly share code, notes, and snippets.

@joske
Last active November 5, 2024 11:54
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
@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

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