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
@joske
Copy link
Author

joske commented Sep 11, 2024

@weoses you probably want to use this branch: https://github.com/jhovold/linux/tree/wip/x1e80100-6.11-rc7

Linus' tree still misses bits

@weoses
Copy link

weoses commented Sep 12, 2024

Do you have the graphic firmware files in the initrd?

I have a lot of firmware in initrd (i even disabled autodetect in mkinitcpio), and i really not sure which of it is for gpu part for this soc....

try with this initrd (replace the kernel modules and repack)

I tried boot from it as is (i thought we build kernels from same sources, but got strange error, and stuck in initramfs without keyboard)
And I merged firmware from it to my laptop, not helps

@weoses you probably want to use this branch: https://github.com/jhovold/linux/tree/wip/x1e80100-6.11-rc7

After building jhovold`s kernel and disabling kms i got boot with systemd logs few seconds after initramfs and with working keyboard (i am not sure that exactly this helps), looks like it is really graphics driver fault
Likely i really missed firmware somewhere

So i rebuilt kernel from https://github.com/jhovold/linux/tree/wip/x1e80100-6.11-rc7 using defconfig from author ( commit jhovold/linux@b9c3748),
added some kernel cmdline parameters as described in https://github.com/jhovold/linux/wiki/X13s
added firmwares from @joske initrd image
and gpu still fails

I will try to setup ssh server on laptop and at least check logs

@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

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