106 lines
4.8 KiB
Markdown
106 lines
4.8 KiB
Markdown
# android_local_manifest
|
|
|
|
Local manifest for building [LineageOS 23.2](https://lineageos.org/) (Android TV) for the **Orange Pi 5 Ultra** (Rockchip RK3588).
|
|
|
|
## Prerequisites
|
|
|
|
- A Linux build host with [LineageOS build dependencies](https://wiki.lineageos.org/requirements) installed
|
|
- ~250GB free disk space
|
|
- `repo` tool installed
|
|
- An SD card (or other block device) at least 20GB, plus `sfdisk`/`kpartx`/`mkfs.vfat`/`mkfs.ext4` (all standard `util-linux`/`e2fsprogs` tools) for creating the flashable image
|
|
|
|
## Setup
|
|
|
|
```bash
|
|
# Initialize LineageOS 23.2 source tree
|
|
repo init -u https://github.com/LineageOS/android.git -b lineage-23.2
|
|
|
|
# Add this local manifest
|
|
curl -o .repo/local_manifests/manifest.xml -L https://git.bscubed.dev/lineage-rockchip/android_local_manifest/raw/branch/lineage-23.2/manifest.xml --create-dirs
|
|
|
|
# Sync the full source tree (including local manifest overrides)
|
|
repo sync -c -j$(nproc)
|
|
```
|
|
|
|
### Updating the local manifest
|
|
|
|
```bash
|
|
curl -o .repo/local_manifests/manifest.xml -L https://git.bscubed.dev/lineage-rockchip/android_local_manifest/raw/branch/lineage-23.2/manifest.xml --create-dirs
|
|
repo sync --force-sync
|
|
```
|
|
|
|
## Building
|
|
|
|
```bash
|
|
# Set up build environment
|
|
source build/envsetup.sh
|
|
|
|
# Select the Android TV target
|
|
breakfast tart
|
|
|
|
# Build
|
|
mka
|
|
```
|
|
|
|
Use plain `mka` (no target — this builds the default `droid` goal), **not** `mka bacon`. This device has no Android recovery (`TARGET_NO_RECOVERY := true`, U-Boot/extlinux boots it directly), which means `INTERNAL_OTA_PACKAGE_TARGET` is never assigned by the build system. `bacon`'s OTA-zip packaging rule depends on that variable and has no other build dependencies, so it fails almost instantly and aborts the whole build before `system.img`/`vendor.img` are even produced. Plain `mka` builds everything this device actually needs — `boot.img`, `system.img`, `vendor.img`, `ramdisk.img` — without ever touching that broken rule.
|
|
|
|
## Creating a flashable image
|
|
|
|
Once the build finishes, `device/rockchip/tart/mkimg.sh` assembles a bootable GPT image (U-Boot + FAT32 boot partition with `extlinux.conf`/kernel/DTB/ramdisk + system/vendor/metadata/userdata partitions):
|
|
|
|
```bash
|
|
# Run in the same shell you built in (needs TARGET_PRODUCT / ANDROID_PRODUCT_OUT
|
|
# from `breakfast`), from the root of the source tree. Do NOT prefix with sudo —
|
|
# root wouldn't see those env vars; the script escalates privileges internally
|
|
# per-command only where needed:
|
|
device/rockchip/tart/mkimg.sh
|
|
```
|
|
|
|
This produces `out/target/product/tart/lineage-<LINEAGE_VERSION>.img`. Write it to an SD card:
|
|
|
|
```bash
|
|
sudo dd if=out/target/product/tart/lineage-*.img of=/dev/sdX bs=4M status=progress
|
|
```
|
|
|
|
(Replace `/dev/sdX` with your SD card's device node — **not** a partition like `/dev/sdX1`.)
|
|
|
|
### Fast re-flashing during development
|
|
|
|
`device/rockchip/tart/wrimg.sh` writes individual partition images directly to an already-flashed physical device, without rebuilding the whole GPT image — useful when iterating on `system`/`vendor` without wanting to recreate the boot partition each time:
|
|
|
|
```bash
|
|
device/rockchip/tart/wrimg.sh # writes boot + system + vendor
|
|
device/rockchip/tart/wrimg.sh system # writes system only
|
|
device/rockchip/tart/wrimg.sh vendor # writes vendor only
|
|
device/rockchip/tart/wrimg.sh boot # writes boot only
|
|
device/rockchip/tart/wrimg.sh wipe # reformats userdata
|
|
device/rockchip/tart/wrimg.sh wipe-metadata # reformats metadata
|
|
```
|
|
|
|
It auto-detects the target device by matching partition labels/sizes against `mkimg.sh`'s layout (`boot`/`system`/`vendor`/`metadata`/`userdata`), so the device must already have been flashed with an image from `mkimg.sh` at least once.
|
|
|
|
## Repositories
|
|
|
|
This local manifest pulls in the following repositories from `git.bscubed.dev/lineage-rockchip/`:
|
|
|
|
| Repository | Path | Description |
|
|
|-----------|------|-------------|
|
|
| `android_device_rockchip_tart` | `device/rockchip/tart` | Device tree |
|
|
| `android_device_rockchip_tart-kernel` | `device/rockchip/tart-kernel` | Kernel boot artifacts (U-Boot, ramdisks) |
|
|
| `android_kernel_rockchip_tart` | `kernel/rockchip/tart` | Kernel source (built from source) |
|
|
| `android_vendor_rockchip_tart` | `vendor/rockchip/tart` | Vendor blobs (firmware) |
|
|
| `android_external_drm_hwcomposer` | `external/drm_hwcomposer` | DRM hwcomposer |
|
|
| `android_external_ffmpeg` | `external/ffmpeg` | FFmpeg media library |
|
|
| `android_external_ffmpeg_codec2` | `external/ffmpeg_codec2` | FFmpeg C2 codec HAL |
|
|
| `android_external_alsa-lib` | `external/alsa-lib` | ALSA library |
|
|
| `android_external_alsa-utils` | `external/alsa-utils` | ALSA utilities |
|
|
| `android_external_libudev-zero` | `external/libudev-zero` | libudev compatibility |
|
|
|
|
## Branch
|
|
|
|
All repositories use the `lineage-23.2` branch.
|
|
|
|
## License
|
|
|
|
Device tree and build scripts: Apache-2.0
|
|
External repositories retain their original licenses.
|