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
This commit is contained in:
97
docs/install.md
Normal file
97
docs/install.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user