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
98 lines
3.9 KiB
Markdown
98 lines
3.9 KiB
Markdown
# 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
|
|
|
|
```sh
|
|
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:
|
|
|
|
```sh
|
|
sudo c630-firmware
|
|
sudo reboot
|
|
```
|
|
|
|
See [firmware.md](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.
|