Files
c630/docs/install.md
rob thijssen 280874f564 Build Fedora aarch64 images for the Lenovo Yoga C630
Assembles a ready-to-write disk image via Gitea Actions. Mainline has carried
sdm850-lenovo-yoga-c630.dts since 5.5 and Fedora ships it in kernel-core, so
unlike aarch64-laptops/build there is no kernel or GRUB to compile — what is
left is producing an image that boots on firmware which hands Linux no device
tree.

The build runs in an aarch64 container under qemu-user and builds filesystems
from directory trees with mke2fs -d and mcopy rather than mounting loop
devices, so it works on runners that will not hand out /dev/loop-control.

A kernel-install hook writes the devicetree line into each BLS entry; without
it the first `dnf update kernel` would produce an unbootable system.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XWRjNJMistCy6ngXH5aJLS
2026-07-27 11:24:53 +03:00

3.9 KiB

Installing on the Yoga C630

Before you start

Leave Windows in place. Lenovo ships firmware updates only through Windows, and the per-model Qualcomm blobs Linux needs live in that partition — wiping it means losing audio and the sensor hub permanently. Update everything through Lenovo Vantage first.

Disable Secure Boot. The image is not signed for it:

  • Press Fn+F2 during startup, go to Security → Secure Boot → Disabled, or
  • Settings → Update & Security → Recovery → Advanced startup → UEFI Firmware Settings

Write the image

zstd -d fedora-44-minimal-lenovo-yoga-c630-*.img.zst
sudo dd if=fedora-44-minimal-lenovo-yoga-c630-*.img of=/dev/sdX bs=4M status=progress oflag=direct conv=fsync

Check /dev/sdX twice. An 8 GiB stick is enough for minimal, 16 GiB for workstation; the root filesystem expands to fill whatever you use.

First boot

Insert the stick and power on holding Fn+F12 for the boot menu, or enter setup with Fn+F2 and put USB ahead of the internal drive.

GRUB should appear with one entry. It has already been told which device tree to load — the C630's UEFI does not supply one, which is the whole reason the devicetree line exists in the boot loader entry.

First boot does two slow things: it relabels the filesystem for SELinux and grows the root partition. Several minutes on a USB stick is normal. Log in as fedora / fedora and set a new password when prompted.

Extract the Qualcomm firmware

Audio, the sensor hub and video decode do not work until you do this:

sudo c630-firmware
sudo reboot

See firmware.md if it cannot find the Windows partition.

Installing to internal storage

Once the USB image is behaving, copy it onto the internal UFS.

Shrink the Windows partition from within Windows (Disk Management → Shrink Volume) rather than from Linux — Windows is fussy about its own filesystem being moved underneath it.

Then, booted from USB, write the image to the free space. The simplest approach that keeps Windows intact is to create the partitions by hand and copy the filesystems across rather than dd-ing the whole image, since dd would overwrite the existing GPT and the Windows ESP:

  1. sudo gdisk /dev/sda — add a /boot partition (1 GiB, type 8300) and a root partition (type 8300) in the free space. Keep the existing Windows ESP.
  2. mkfs.ext4 -O ^orphan_file,^metadata_csum_seed /dev/sdaN for both.
  3. Copy the running system across with rsync -aHAX --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/run --exclude=/boot, then /boot separately.
  4. Copy EFI/fedora from the USB stick's ESP onto the Windows ESP, and edit EFI/fedora/grub.cfg so the --fs-uuid matches the new /boot.
  5. Update /etc/fstab and the root=UUID= in /boot/loader/entries/c630-*.conf to the new UUIDs.

Finally, point the firmware at GRUB from an Administrator command prompt in Windows:

bcdedit /set {bootmgr} path \EFI\fedora\grubaa64.efi

Windows resets this on some updates. To get back, boot the USB stick and run it again, or use efibootmgr from Linux.

If it does not boot

The kernel command line is the first thing to change. It lives in options in /boot/loader/entries/c630-*.conf, and GRUB lets you edit it for one boot by pressing e.

Symptom Try
Hangs immediately after GRUB, no kernel output Wrong or missing device tree — check the devicetree line points at a file that exists in /boot/dtb-*/qcom/
Boots then freezes partway Drop efi=noruntime, or add pd_ignore_unused if it is missing
USB dies during boot Add modprobe.blacklist=qcom_q6v5_pas
Cannot find root filesystem The initramfs is missing the UFS drivers — see overlay/etc/dracut.conf.d/10-c630.conf
90-second stall early in boot Add systemd.tpm2_wait=0

Adding earlycon and ignore_loglevel will tell you a great deal more about which of these it is.