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
95 lines
4.0 KiB
Markdown
95 lines
4.0 KiB
Markdown
# Fedora for the Lenovo Yoga C630 13Q50
|
|
|
|
Builds a ready-to-write Fedora aarch64 disk image for the Lenovo Yoga C630
|
|
(model 81JL, Qualcomm SDM850), using Gitea Actions.
|
|
|
|
The approach is borrowed from [aarch64-laptops/build][aal], but the heavy
|
|
lifting that project had to do in 2019 is now unnecessary: mainline Linux has
|
|
carried `sdm850-lenovo-yoga-c630.dts` since 5.5, and Fedora ships it in
|
|
`kernel-core`. There is no kernel to patch and no GRUB to compile. What is left
|
|
is assembling a disk image that boots on hardware whose firmware hands Linux no
|
|
device tree.
|
|
|
|
[aal]: https://github.com/aarch64-laptops/build
|
|
|
|
## What you get
|
|
|
|
`output/fedora-44-<variant>-lenovo-yoga-c630-<date>-<ref>.img.zst` — a GPT disk
|
|
image with an ESP, a `/boot` partition and an ext4 root. Decompress, write it to
|
|
a USB stick or microSD card, and boot. The root filesystem grows to fill the
|
|
medium on first boot.
|
|
|
|
Two variants:
|
|
|
|
| Variant | Size | Contents |
|
|
|---------------|-------|----------------------------------------------|
|
|
| `minimal` | 8 GiB | Console, sshd, and enough tools to debug the machine |
|
|
| `workstation` | 16 GiB| GNOME desktop |
|
|
|
|
Default login is `fedora` / `fedora`, and the password must be changed at first
|
|
login. Root is locked.
|
|
|
|
## Hardware status
|
|
|
|
| Works out of the box | Needs firmware from Windows | Not supported |
|
|
|---------------------------------|-----------------------------|---------------|
|
|
| UFS storage, USB, keyboard, touchpad, touchscreen | Audio | LTE modem |
|
|
| WiFi + Bluetooth (ath10k WCN3990) | Sensor hub — lid switch, accelerometer, auto-rotate | |
|
|
| Graphics (freedreno, Adreno 630) | Hardware video decode (venus) | |
|
|
| Battery and charging | | |
|
|
|
|
Qualcomm allows the Adreno and ath10k firmware to be redistributed, so Fedora
|
|
ships it and this image includes it. The SDM850 DSP and display blobs are signed
|
|
per model and exist only in your machine's Windows partition. Run
|
|
`sudo c630-firmware` once after installing — see [docs/firmware.md](docs/firmware.md).
|
|
|
|
## Building
|
|
|
|
CI does this on every push to `main`. To run it yourself:
|
|
|
|
```sh
|
|
./build/build-image.sh --variant minimal
|
|
```
|
|
|
|
You need `podman` and, on an x86_64 host, aarch64 emulation:
|
|
|
|
```sh
|
|
sudo dnf install -y qemu-user-static-aarch64
|
|
sudo systemctl restart systemd-binfmt
|
|
```
|
|
|
|
`build/build-image.sh` runs on the host and only sets up the container.
|
|
`build/stage2.sh` runs inside an aarch64 Fedora container and does everything
|
|
else: `dnf --installroot`, the overlay, dracut, and the disk assembly. It builds
|
|
filesystems from directory trees with `mke2fs -d` and `mcopy` rather than
|
|
mounting loop devices, so it does not need `/dev/loop-control` — which CI
|
|
runners generally will not hand out.
|
|
|
|
## Repository layout
|
|
|
|
```
|
|
config/device.env C630 parameters: DTB path, kernel command line, geometry
|
|
config/packages/*.pkgs Package lists — base plus one file per variant
|
|
overlay/ Files copied into the root filesystem (*.in are templated)
|
|
build/build-image.sh Host driver: emulation checks, podman invocation
|
|
build/stage2.sh The actual build, inside an aarch64 container
|
|
firmware/local/ Optional drop-in for firmware you extracted yourself (gitignored)
|
|
.gitea/workflows/ CI
|
|
docs/ Installation, firmware, runner setup
|
|
```
|
|
|
|
## Documentation
|
|
|
|
- [docs/install.md](docs/install.md) — writing the image and booting the laptop
|
|
- [docs/firmware.md](docs/firmware.md) — what needs extracting from Windows and why
|
|
- [docs/runner-setup.md](docs/runner-setup.md) — one-time Gitea runner preparation
|
|
|
|
## Caveats
|
|
|
|
The build has not yet been confirmed to boot on real hardware. The device tree,
|
|
kernel command line and firmware layout are taken from Fedora's Snapdragon WoA
|
|
documentation and the aarch64-laptops project; the parts specific to the C630's
|
|
older SDM850 are reasoned from those rather than tested. Expect to spend a boot
|
|
or two adjusting `DEVICE_CMDLINE` in `config/device.env`. Findings belong in
|
|
this README.
|