Current Software Specifications: Difference between revisions
Hiiripollo (talk | contribs) No edit summary |
Hiiripollo (talk | contribs) |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
= Software Stack: From First Boot to Full Distribution = | = Software Stack: From First Boot to Full Distribution = | ||
'''Note: This is an initial draft of the software roadmap for the PowerPC Notebook project. | '''Note: This is an initial draft of the software roadmap for the PowerPC Notebook project. At this stage, this is more of brain dump, rather than a polished roadmap. Contributions and comments are welcome.''' | ||
'''Target architecture: | |||
'''Target architecture: PPC64 Big Endian.''' | |||
== Introduction == | == Introduction == | ||
The software stack for the PowerPC Notebook is a critical enabler for the hardware. Our challenge is to bring up a modern, open-source Linux system on non-mainstream architecture (PowerPC), using a custom motherboard based on the NXP T2080 SoC. That means: | The software stack for the PowerPC Notebook is a critical enabler for the hardware. Our challenge is to bring up a modern, open-source Linux system on non-mainstream architecture (PowerPC), using a custom motherboard based on the NXP T2080 (?) SoC. That means: | ||
* Bootstrapping software from scratch, with limited upstream support | * Bootstrapping software from scratch, with limited upstream support | ||
* Building and testing a minimal Linux system to prove hardware works | * Building and testing a minimal Linux system to prove hardware works | ||
* Gradually evolving toward a user-friendly, maintainable Linux distribution | * Gradually evolving toward a user-friendly, maintainable Linux distribution | ||
We outline a '''progressive roadmap''': from booting the board to building our own distro, using modern infrastructure and tools wherever possible. | We outline a '''progressive roadmap''': from booting the board to building our own distro, using modern infrastructure and tools wherever possible. | ||
| Line 21: | Line 21: | ||
{| class="wikitable" | {| class="wikitable" | ||
! Task !! Description | ! Task !! Description | ||
|- | |- | ||
| Set up cross toolchain || Use NXP’s PowerPC GCC SDK for T2080 | | Set up cross toolchain || Use NXP’s PowerPC GCC SDK for T2080 | ||
|- | |- | ||
| Build U-Boot || Start from <code>T2080RDB_defconfig</code>, customize for our board | | Build U-Boot || Start from <code>T2080RDB_defconfig</code>, customize for our board | ||
|- | |- | ||
| Write Device Tree (DTS) || Tailor the .dts to our motherboard’s peripherals | | Write Device Tree (DTS) || Tailor the .dts to our motherboard’s peripherals | ||
|- | |- | ||
| Build kernel || Use NXP's patched or mainline kernel with minimal config | | Build kernel || Use NXP's patched or mainline kernel with minimal config | ||
|- | |- | ||
| Load root filesystem || Use Initramfs, NFS, SD card or TFTP | | Load root filesystem || Use Initramfs, NFS, SD card or TFTP | ||
|- | |- | ||
| Test via serial console || Use UART for logs and early debugging | | Test via serial console || Use UART for logs and early debugging | ||
|} | |} | ||
| Line 37: | Line 37: | ||
=== Why === | === Why === | ||
* Validates CPU, memory, and power circuitry | * Validates CPU, memory, and power circuitry | ||
* Enables testing and debugging of other peripherals | * Enables testing and debugging of other peripherals | ||
* Serves as foundation for OS bring-up and userland development | * Serves as foundation for OS bring-up and userland development | ||
| Line 48: | Line 48: | ||
{| class="wikitable" | {| class="wikitable" | ||
! Component !! Functionality | ! Component !! Functionality | ||
|- | |- | ||
| U-Boot || Initialize CPU, memory, load kernel | | U-Boot || Initialize CPU, memory, load kernel | ||
|- | |- | ||
| Linux kernel || Hardware detection and device drivers | | Linux kernel || Hardware detection and device drivers | ||
|- | |- | ||
| Root filesystem || BusyBox or minimal Debian NFS root | | Root filesystem || BusyBox or minimal Debian NFS root | ||
|- | |- | ||
| Serial console || Primary I/O for early interaction | | Serial console || Primary I/O for early interaction | ||
|- | |- | ||
| Storage access || SD, SATA, or USB (at least one working path) | | Storage access || SD, SATA, or USB (at least one working path) | ||
|- | |- | ||
| Device tree blob || Custom for motherboard | | Device tree blob || Custom for motherboard | ||
|} | |} | ||
| Line 64: | Line 64: | ||
=== Goal === | === Goal === | ||
* Boot into a shell prompt | * Boot into a shell prompt | ||
* Validate basic system resources (<code>/proc/cpuinfo</code>, <code>dmesg</code>, etc.) | * Validate basic system resources (<code>/proc/cpuinfo</code>, <code>dmesg</code>, etc.) | ||
* Confirm networking, storage, and peripheral availability | * Confirm networking, storage, and peripheral availability | ||
== 3. Nice-to-Haves: Editors, Tools, and Utilities == | == 3. Nice-to-Haves: Editors, Tools, and Utilities == | ||
| Line 75: | Line 75: | ||
{| class="wikitable" | {| class="wikitable" | ||
! Category !! Tools | ! Category !! Tools | ||
|- | |- | ||
| Editors || nano, vim | | Editors || nano, vim | ||
|- | |- | ||
| Networking || curl, wget, ping, ssh | | Networking || curl, wget, ping, ssh | ||
|- | |- | ||
| Debugging || gdb, strace, perf, valgrind | | Debugging || gdb, strace, perf, valgrind | ||
|- | |- | ||
| System info || htop, lshw, i2c-tools, lsusb | | System info || htop, lshw, i2c-tools, lsusb | ||
|- | |- | ||
| Disk tools || fdisk, parted, e2fsprogs, btrfs-progs | | Disk tools || fdisk, parted, e2fsprogs, btrfs-progs | ||
|- | |- | ||
| Package management || apt, dpkg, or apk (depending on base) | | Package management || apt, dpkg, or apk (depending on base) | ||
|} | |} | ||
| Line 96: | Line 96: | ||
{| class="wikitable" | {| class="wikitable" | ||
! Component !! Details | ! Component !! Details | ||
|- | |- | ||
| Base System || Debian PPC64, Gentoo, or Void PPC | | Base System || Debian PPC64, Gentoo, or Void PPC | ||
|- | |- | ||
| Kernel || Custom-built with PowerPC Notebook config | | Kernel || Custom-built with PowerPC Notebook config | ||
|- | |- | ||
| Init system || systemd or OpenRC | | Init system || systemd or OpenRC | ||
|- | |- | ||
| Package management || apt (Debian), emerge (Gentoo), xbps (Void) | | Package management || apt (Debian), emerge (Gentoo), xbps (Void) | ||
|- | |- | ||
| Desktop environment || XFCE, MATE, GNOME (PPC64 builds) | | Desktop environment || XFCE, MATE, GNOME (PPC64 builds) | ||
|- | |- | ||
| Installer || CLI or graphical installer image | | Installer || CLI or graphical installer image | ||
|- | |- | ||
| Update system || apt repos or rsync-based delta updates | | Update system || apt repos or rsync-based delta updates | ||
|- | |- | ||
| Branding || Custom themes, logos, powerpcnotebook.org | | Branding || Custom themes, logos, powerpcnotebook.org | ||
|} | |} | ||
| Line 116: | Line 116: | ||
=== Distro Build Systems to Consider === | === Distro Build Systems to Consider === | ||
* debootstrap / live-build (Debian-based builds) | * debootstrap / live-build (Debian-based builds) | ||
* Buildroot (for minimal rootfs + kernel images) | * Buildroot (for minimal rootfs + kernel images) | ||
* Yocto Project (flexible meta-distribution) | * Yocto Project (flexible meta-distribution) | ||
* Gentoo Catalyst (for full ISO or stage builds) | * Gentoo Catalyst (for full ISO or stage builds) | ||
== 5. CI/CD Pipelines and Build Infrastructure == | == 5. CI/CD Pipelines and Build Infrastructure == | ||
| Line 127: | Line 127: | ||
=== CI/CD Goals === | === CI/CD Goals === | ||
* Automatically build U-Boot, kernel, and rootfs images | * Automatically build U-Boot, kernel, and rootfs images | ||
* Run tests on emulated environments (QEMU PPC64) | * Run tests on emulated environments (QEMU PPC64) | ||
* Deploy daily/weekly builds for community testing | * Deploy daily/weekly builds for community testing | ||
* Detect regressions early and validate commits | * Detect regressions early and validate commits | ||
=== Tools === | === Tools === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Use Case !! Toolchain | ! Use Case !! Toolchain | ||
|- | |- | ||
| CI/CD pipelines || GitHub Actions, GitLab CI, Buildbot | | CI/CD pipelines || GitHub Actions, GitLab CI, Buildbot | ||
|- | |- | ||
| Emulated testing || QEMU PowerPC64 + expect/serial scripts | | Emulated testing || QEMU PowerPC64 + expect/serial scripts | ||
|- | |- | ||
| Cross-builds || Docker + <code>powerpc64-linux-gnu-gcc</code> toolchains | | Cross-builds || Docker + <code>powerpc64-linux-gnu-gcc</code> toolchains | ||
|- | |- | ||
| Image hosting || GitHub Pages, Netlify, custom CDN | | Image hosting || GitHub Pages, Netlify, custom CDN | ||
|- | |- | ||
| Build orchestration || cbuild, Yocto Autobuilder, Jenkins | | Build orchestration || cbuild, Yocto Autobuilder, Jenkins | ||
|} | |} | ||
| Line 149: | Line 149: | ||
=== Example CI Flow === | === Example CI Flow === | ||
# Push to <code>main</code> branch | # Push to <code>main</code> branch | ||
# GitHub Actions builds U-Boot, kernel, and rootfs | # GitHub Actions builds U-Boot, kernel, and rootfs | ||
# QEMU boots the image and verifies UART output | # QEMU boots the image and verifies UART output | ||
# Artifacts are uploaded to <code>artifacts.powerpcnotebook.org</code> | # Artifacts are uploaded to <code>artifacts.powerpcnotebook.org</code> | ||
| Line 160: | Line 160: | ||
=== Use Cases === | === Use Cases === | ||
* Build U-Boot or Linux kernel from any host | * Build U-Boot or Linux kernel from any host | ||
* Package testing in isolated environments | * Package testing in isolated environments | ||
* Running PPC-specific tools in reproducible containers | * Running PPC-specific tools in reproducible containers | ||
=== Example Images === | === Example Images === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Image Name !! Description | ! Image Name !! Description | ||
|- | |- | ||
| powerpc-dev-env || Full dev env with toolchain and make | | powerpc-dev-env || Full dev env with toolchain and make | ||
|- | |- | ||
| powerpc-kernel-builder || Kernel-specific builder and configs | | powerpc-kernel-builder || Kernel-specific builder and configs | ||
|- | |- | ||
| powerpc-debian-chroot || Debootstrap PPC64 rootfs for package test | | powerpc-debian-chroot || Debootstrap PPC64 rootfs for package test | ||
|} | |} | ||
| Line 181: | Line 181: | ||
=== Relevant Debian Practices === | === Relevant Debian Practices === | ||
* Reproducible Builds | * Reproducible Builds | ||
* Debian Ports infrastructure | * Debian Ports infrastructure | ||
* <code>live-build</code> and <code>debootstrap</code> | * <code>live-build</code> and <code>debootstrap</code> | ||
* Debian Installer (<code>d-i</code>) | * Debian Installer (<code>d-i</code>) | ||
* QA tools: lintian, piuparts, autopkgtest | * QA tools: lintian, piuparts, autopkgtest | ||
=== Related Projects to Watch === | === Related Projects to Watch === | ||
{| class="wikitable" | This information may be outdated as it is not easy to keep up with all the developments. Feel free to update the wiki in case of errors or omissions. | ||
! | {| class="wikitable sortable" style="height: 948px;" | ||
|+ Open Source Distributions Supporting PowerPC (Including Less Mainstream Projects) | |||
|- style="height: 51px;" | |||
! style="height: 51px; width: 437.406px;" | Distribution Name !! style="height: 51px; width: 154.828px;" | Based On !! style="height: 51px; width: 111.594px;" | Active Status !! style="height: 51px; width: 197.031px;" | Last Release !! style="height: 51px; width: 280.281px;" | Source Code Repository !! style="height: 51px; width: 238.719px;" | Endian Support !! style="height: 51px; width: 90.6406px;" | 32-bit Support !! style="height: 51px; width: 90.6406px;" | 64-bit Support !! style="height: 51px; width: 467.109px;" | Notes | |||
|- style="height: 28px;" | |||
! style="height: 28px; width: 437.406px;" | Linux Distributions (Including Less Mainstream/Historical) | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | Adélie Linux || style="height: 28px; width: 169.078px;" | Independent || style="height: 28px; width: 125.844px;" | Active || style="height: 28px; width: 211.281px;" | December 20, 2024 (1.0-BETA6) || style="height: 28px; width: 294.531px;" | https://git.adelielinux.org/ || style="height: 28px; width: 252.969px;" | Big Endian || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | Supports G3, G4, and G5 PowerPC. | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | Arch Power || style="height: 51px; width: 169.078px;" | Independent || style="height: 51px; width: 125.844px;" | Active (unofficial port) || style="height: 51px; width: 211.281px;" | January 1, 2025 (2025.01.01) || style="height: 51px; width: 294.531px;" | https://github.com/kth5/archpower/wiki || style="height: 51px; width: 252.969px;" | Big Endian (powerpc), Little Endian (ppc64el) || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 481.359px;" | Unofficial port. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | Chimera Linux || style="height: 28px; width: 169.078px;" | Independent || style="height: 28px; width: 125.844px;" | Beta || style="height: 28px; width: 211.281px;" | April 20, 2025 (Rolling Release) || style="height: 28px; width: 294.531px;" | https://github.com/chimera-linux/ || style="height: 28px; width: 252.969px;" | Both (ppc, ppc64le) || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | Uses musl libc and FreeBSD userland. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | CruxPPC || style="height: 28px; width: 169.078px;" | CRUX || style="height: 28px; width: 125.844px;" | Inactive || style="height: 28px; width: 211.281px;" | Unknown || style="height: 28px; width: 294.531px;" | https://cruxppc.org/ || style="height: 28px; width: 252.969px;" | Big Endian || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{cross}} || style="height: 28px; width: 481.359px;" | A port of the lightweight CRUX distribution to PowerPC. Status uncertain. | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | Debian || style="height: 51px; width: 169.078px;" | Debian || style="height: 51px; width: 125.844px;" | Active || style="height: 51px; width: 211.281px;" | May 17, 2025 (Debian 12.11) || style="height: 51px; width: 294.531px;" | https://www.debian.org/ports/powerpc/inst/install || style="height: 51px; width: 252.969px;" | Big Endian (powerpc), Little Endian (ppc64el) || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 481.359px;" | Development for ppc64 (big-endian) is mostly stalled. | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | Fedora || style="height: 51px; width: 169.078px;" | Fedora || style="height: 51px; width: 125.844px;" | Active || style="height: 51px; width: 211.281px;" | April 15, 2025 (Fedora 42) || style="height: 51px; width: 294.531px;" | https://src.fedoraproject.org/ || style="height: 51px; width: 252.969px;" | Big Endian (ppc64), Little Endian (ppc64le) || style="height: 51px; width: 104.891px;" | {{cross}} || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 481.359px;" | Dropped 32-bit PowerPC support after Fedora 22. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | Fienix || style="height: 28px; width: 169.078px;" | Debian || style="height: 28px; width: 125.844px;" | Active || style="height: 28px; width: 211.281px;" | Rolling || style="height: 28px; width: 294.531px;" | https://gitlab.com/fienix || style="height: 28px; width: 252.969px;" | Both || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | A derivative of Debian tailored for PowerPC. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | Gentoo Linux || style="height: 28px; width: 169.078px;" | Source-based || style="height: 28px; width: 125.844px;" | Active || style="height: 28px; width: 211.281px;" | Rolling || style="height: 28px; width: 294.531px;" | https://gitweb.gentoo.org/ || style="height: 28px; width: 252.969px;" | Both (ppc, ppc64) || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | Requires compiling from source. ppc64 profile is bi-endian. | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | MkLinux || style="height: 51px; width: 169.078px;" | Microkernel (Mach) / Linux || style="height: 51px; width: 125.844px;" | Inactive || style="height: 51px; width: 211.281px;" | 1998 || style="height: 51px; width: 294.531px;" | https://www.mklinux.org/development/cvs.html || style="height: 51px; width: 252.969px;" | Big Endian || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{cross}} || style="height: 51px; width: 481.359px;" | Early port of Linux to PowerPC Macintosh. Development ceased. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | MintPPC || style="height: 28px; width: 169.078px;" | Linux Mint/Debian || style="height: 28px; width: 125.844px;" | Active || style="height: 28px; width: 211.281px;" | Rolling || style="height: 28px; width: 294.531px;" | https://github.com/MintPPC || style="height: 28px; width: 252.969px;" | Both || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | Specifically designed for PowerPC (Old World and New World Macs). | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | openSUSE || style="height: 51px; width: 169.078px;" | SUSE || style="height: 51px; width: 125.844px;" | Active || style="height: 51px; width: 211.281px;" | Rolling (Tumbleweed), Stable (Leap) || style="height: 51px; width: 294.531px;" | https://build.opensuse.org/ || style="height: 51px; width: 252.969px;" | Both || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 481.359px;" | Offers both stable and rolling releases. | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | OpenPPC || style="height: 51px; width: 169.078px;" | Independent || style="height: 51px; width: 125.844px;" | Inactive || style="height: 51px; width: 211.281px;" | 2006 || style="height: 51px; width: 294.531px;" | (Likely archived) || style="height: 51px; width: 252.969px;" | Big Endian || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{cross}} || style="height: 51px; width: 481.359px;" | Aimed to be a user-friendly PowerPC Linux distribution. Development ceased. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | Ubuntu || style="height: 28px; width: 169.078px;" | Debian || style="height: 28px; width: 125.844px;" | Active || style="height: 28px; width: 211.281px;" | Rolling || style="height: 28px; width: 294.531px;" | https://git.launchpad.net/ubuntu || style="height: 28px; width: 252.969px;" | Both || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | Check specific release notes for architecture support. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | Void Linux (PPC) || style="height: 28px; width: 169.078px;" | Independent || style="height: 28px; width: 125.844px;" | Inactive || style="height: 28px; width: 211.281px;" | 2023 || style="height: 28px; width: 294.531px;" | https://github.com/void-ppc || style="height: 28px; width: 252.969px;" | Both || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | Community-led effort. | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | Yellow Dog Linux || style="height: 51px; width: 169.078px;" | Red Hat/Fedora || style="height: 51px; width: 125.844px;" | Inactive || style="height: 51px; width: 211.281px;" | August 6, 2009 (6.2) || style="height: 51px; width: 294.531px;" | (Likely archived, e.g., via WayBack Machine) || style="height: 51px; width: 252.969px;" | Both || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 481.359px;" | Historically significant for PlayStation 3 and PowerPC Macs. Development ceased. | |||
|- | |- | ||
| | | style="width: 451.656px;" | T2 SDE<br> | ||
| style="width: 169.078px;" | - | |||
| style="width: 125.844px;" | Active | |||
| style="width: 211.281px;" | <br> | |||
| style="width: 294.531px;" | https://t2sde.org/documentation/ | |||
| style="width: 252.969px;" | Both | |||
| style="width: 104.891px;" | {{check}} | |||
| style="width: 104.891px;" | {{check}} | |||
| style="width: 481.359px;" | System to create new distributions. Similar to Yotco. | |||
|- | |- | ||
| | | style="width: 451.656px;" | Bedrock Linux | ||
|- | | style="width: 169.078px;" | - | ||
| | | style="width: 125.844px;" | <br> | ||
|- | | style="width: 211.281px;" | <br> | ||
| | | style="width: 294.531px;" | https://bedrocklinux.org/ | ||
|- | | style="width: 252.969px;" | <br> | ||
| | | style="width: 104.891px;" | {{check}} | ||
| style="width: 104.891px;" | {{check}} | |||
| style="width: 481.359px;" | Sytem to create a new distribution by picking and choosing components from various distributions. | |||
|- style="height: 28px;" | |||
! style="height: 28px; width: 437.406px;" | FreeBSD Distributions (Including Less Mainstream/Historical) | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | FreeBSD || style="height: 51px; width: 169.078px;" | BSD || style="height: 51px; width: 125.844px;" | Active || style="height: 51px; width: 211.281px;" | March 11, 2025 (13.5-RELEASE) || style="height: 51px; width: 294.531px;" | https://cgit.freebsd.org/src/ || style="height: 51px; width: 252.969px;" | Both || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 481.359px;" | Tier 2 support for 32-bit and 64-bit PowerPC. 32-bit support deprecated in 15.0. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | MidnightBSD || style="height: 28px; width: 169.078px;" | FreeBSD || style="height: 28px; width: 125.844px;" | Active || style="height: 28px; width: 211.281px;" | Rolling || style="height: 28px; width: 294.531px;" | https://github.com/midnightbsd || style="height: 28px; width: 252.969px;" | Both || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | Aims to adapt FreeBSD for desktop usage. | |||
|- style="height: 28px;" | |||
| style="height: 28px; width: 451.656px;" | NetBSD || style="height: 28px; width: 169.078px;" | BSD || style="height: 28px; width: 125.844px;" | Active || style="height: 28px; width: 211.281px;" | Rolling || style="height: 28px; width: 294.531px;" | https://github.com/netbsd/src || style="height: 28px; width: 252.969px;" | Both || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 104.891px;" | {{check}} || style="height: 28px; width: 481.359px;" | Known for portability. MacPPC is Tier II. | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | OpenBSD || style="height: 51px; width: 169.078px;" | BSD || style="height: 51px; width: 125.844px;" | Active || style="height: 51px; width: 211.281px;" | Rolling || style="height: 51px; width: 294.531px;" | https://github.com/openbsd/src || style="height: 51px; width: 252.969px;" | Big Endian || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 481.359px;" | Focuses on security and has official support for Apple's Mac-based PowerPC hardware. | |||
|- style="height: 51px;" | |||
! style="height: 51px; width: 437.406px;" | Other Open Source Distributions (Including Less Mainstream/Historical) | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- style="height: 51px;" | |||
| style="height: 51px; width: 451.656px;" | Haiku || style="height: 51px; width: 169.078px;" | Independent (BeOS inspired) || style="height: 51px; width: 125.844px;" | Beta || style="height: 51px; width: 211.281px;" | Rolling || style="height: 51px; width: 294.531px;" | https://github.com/haiku/haiku || style="height: 51px; width: 252.969px;" | Little Endian || style="height: 51px; width: 104.891px;" | {{check}} || style="height: 51px; width: 104.891px;" | {{cross}} || style="height: 51px; width: 481.359px;" | Has a PowerPC port, may require manual compilation. | |||
|} | |} | ||
== 8. Build Tooling (WIP | == 8. Build Tooling (WIP/Placeholders) == | ||
This section will document the exact steps, tools, and workflows needed to build every part of the software stack. | This section will document the exact steps, tools, and workflows needed to build every part of the software stack. | ||
| Line 216: | Line 299: | ||
* Secure image signing (U-Boot SPL, FIT images, secure boot) | * Secure image signing (U-Boot SPL, FIT images, secure boot) | ||
* Emulator-based validation and test harnesses | * Emulator-based validation and test harnesses | ||
'''Note:''' Details for each item will be populated progressively as we finalize architecture and test results. | '''Note:''' Details for each item will be populated progressively as we finalize architecture and test results. | ||
Latest revision as of 18:29, 19 May 2025
Software Stack: From First Boot to Full Distribution
[edit | edit source]Note: This is an initial draft of the software roadmap for the PowerPC Notebook project. At this stage, this is more of brain dump, rather than a polished roadmap. Contributions and comments are welcome.
Target architecture: PPC64 Big Endian.
Introduction
[edit | edit source]The software stack for the PowerPC Notebook is a critical enabler for the hardware. Our challenge is to bring up a modern, open-source Linux system on non-mainstream architecture (PowerPC), using a custom motherboard based on the NXP T2080 (?) SoC. That means:
- Bootstrapping software from scratch, with limited upstream support
- Building and testing a minimal Linux system to prove hardware works
- Gradually evolving toward a user-friendly, maintainable Linux distribution
We outline a progressive roadmap: from booting the board to building our own distro, using modern infrastructure and tools wherever possible.
1. Basic Plan: Booting the First Prototype
[edit | edit source]The first goal is to ensure our hardware can boot into a minimal Linux environment.
What Needs to Be Done
[edit | edit source]| Task | Description |
|---|---|
| Set up cross toolchain | Use NXP’s PowerPC GCC SDK for T2080 |
| Build U-Boot | Start from T2080RDB_defconfig, customize for our board
|
| Write Device Tree (DTS) | Tailor the .dts to our motherboard’s peripherals |
| Build kernel | Use NXP's patched or mainline kernel with minimal config |
| Load root filesystem | Use Initramfs, NFS, SD card or TFTP |
| Test via serial console | Use UART for logs and early debugging |
Why
[edit | edit source]- Validates CPU, memory, and power circuitry
- Enables testing and debugging of other peripherals
- Serves as foundation for OS bring-up and userland development
2. Essentials: Proving the Prototype Works
[edit | edit source]Once we can boot, we need a minimal userland to interact with the system.
Components Required
[edit | edit source]| Component | Functionality |
|---|---|
| U-Boot | Initialize CPU, memory, load kernel |
| Linux kernel | Hardware detection and device drivers |
| Root filesystem | BusyBox or minimal Debian NFS root |
| Serial console | Primary I/O for early interaction |
| Storage access | SD, SATA, or USB (at least one working path) |
| Device tree blob | Custom for motherboard |
Goal
[edit | edit source]- Boot into a shell prompt
- Validate basic system resources (
/proc/cpuinfo,dmesg, etc.) - Confirm networking, storage, and peripheral availability
3. Nice-to-Haves: Editors, Tools, and Utilities
[edit | edit source]Once the system is up, we add tools to support development, testing, and usability.
Suggested Additions
[edit | edit source]| Category | Tools |
|---|---|
| Editors | nano, vim |
| Networking | curl, wget, ping, ssh |
| Debugging | gdb, strace, perf, valgrind |
| System info | htop, lshw, i2c-tools, lsusb |
| Disk tools | fdisk, parted, e2fsprogs, btrfs-progs |
| Package management | apt, dpkg, or apk (depending on base) |
4. Distro: Building Our Own PowerPC Linux Distribution
[edit | edit source]Eventually, we want a user-facing Linux distribution specifically optimized for the PowerPC Notebook.
Building Blocks
[edit | edit source]| Component | Details |
|---|---|
| Base System | Debian PPC64, Gentoo, or Void PPC |
| Kernel | Custom-built with PowerPC Notebook config |
| Init system | systemd or OpenRC |
| Package management | apt (Debian), emerge (Gentoo), xbps (Void) |
| Desktop environment | XFCE, MATE, GNOME (PPC64 builds) |
| Installer | CLI or graphical installer image |
| Update system | apt repos or rsync-based delta updates |
| Branding | Custom themes, logos, powerpcnotebook.org |
Distro Build Systems to Consider
[edit | edit source]- debootstrap / live-build (Debian-based builds)
- Buildroot (for minimal rootfs + kernel images)
- Yocto Project (flexible meta-distribution)
- Gentoo Catalyst (for full ISO or stage builds)
5. CI/CD Pipelines and Build Infrastructure
[edit | edit source]To ensure maintainability, reproducibility, and collaboration, we aim to adopt continuous integration and modern DevOps practices.
CI/CD Goals
[edit | edit source]- Automatically build U-Boot, kernel, and rootfs images
- Run tests on emulated environments (QEMU PPC64)
- Deploy daily/weekly builds for community testing
- Detect regressions early and validate commits
Tools
[edit | edit source]| Use Case | Toolchain |
|---|---|
| CI/CD pipelines | GitHub Actions, GitLab CI, Buildbot |
| Emulated testing | QEMU PowerPC64 + expect/serial scripts |
| Cross-builds | Docker + powerpc64-linux-gnu-gcc toolchains
|
| Image hosting | GitHub Pages, Netlify, custom CDN |
| Build orchestration | cbuild, Yocto Autobuilder, Jenkins |
Example CI Flow
[edit | edit source]- Push to
mainbranch - GitHub Actions builds U-Boot, kernel, and rootfs
- QEMU boots the image and verifies UART output
- Artifacts are uploaded to
artifacts.powerpcnotebook.org
6. Docker Images for Build and Dev Environments
[edit | edit source]Pre-configured Docker images help developers build and test quickly across any host system.
Use Cases
[edit | edit source]- Build U-Boot or Linux kernel from any host
- Package testing in isolated environments
- Running PPC-specific tools in reproducible containers
Example Images
[edit | edit source]| Image Name | Description |
|---|---|
| powerpc-dev-env | Full dev env with toolchain and make |
| powerpc-kernel-builder | Kernel-specific builder and configs |
| powerpc-debian-chroot | Debootstrap PPC64 rootfs for package test |
7. Inspirations from Debian and Other Projects
[edit | edit source]We aim to reuse and adapt ideas from existing projects to accelerate development.
Relevant Debian Practices
[edit | edit source]- Reproducible Builds
- Debian Ports infrastructure
live-buildanddebootstrap- Debian Installer (
d-i) - QA tools: lintian, piuparts, autopkgtest
Related Projects to Watch
[edit | edit source]This information may be outdated as it is not easy to keep up with all the developments. Feel free to update the wiki in case of errors or omissions.
| Distribution Name | Based On | Active Status | Last Release | Source Code Repository | Endian Support | 32-bit Support | 64-bit Support | Notes |
|---|---|---|---|---|---|---|---|---|
| Linux Distributions (Including Less Mainstream/Historical) | ||||||||
| Adélie Linux | Independent | Active | December 20, 2024 (1.0-BETA6) | https://git.adelielinux.org/ | Big Endian | ✅ | ✅ | Supports G3, G4, and G5 PowerPC. |
| Arch Power | Independent | Active (unofficial port) | January 1, 2025 (2025.01.01) | https://github.com/kth5/archpower/wiki | Big Endian (powerpc), Little Endian (ppc64el) | ✅ | ✅ | Unofficial port. |
| Chimera Linux | Independent | Beta | April 20, 2025 (Rolling Release) | https://github.com/chimera-linux/ | Both (ppc, ppc64le) | ✅ | ✅ | Uses musl libc and FreeBSD userland. |
| CruxPPC | CRUX | Inactive | Unknown | https://cruxppc.org/ | Big Endian | ✅ | ❌ | A port of the lightweight CRUX distribution to PowerPC. Status uncertain. |
| Debian | Debian | Active | May 17, 2025 (Debian 12.11) | https://www.debian.org/ports/powerpc/inst/install | Big Endian (powerpc), Little Endian (ppc64el) | ✅ | ✅ | Development for ppc64 (big-endian) is mostly stalled. |
| Fedora | Fedora | Active | April 15, 2025 (Fedora 42) | https://src.fedoraproject.org/ | Big Endian (ppc64), Little Endian (ppc64le) | ❌ | ✅ | Dropped 32-bit PowerPC support after Fedora 22. |
| Fienix | Debian | Active | Rolling | https://gitlab.com/fienix | Both | ✅ | ✅ | A derivative of Debian tailored for PowerPC. |
| Gentoo Linux | Source-based | Active | Rolling | https://gitweb.gentoo.org/ | Both (ppc, ppc64) | ✅ | ✅ | Requires compiling from source. ppc64 profile is bi-endian. |
| MkLinux | Microkernel (Mach) / Linux | Inactive | 1998 | https://www.mklinux.org/development/cvs.html | Big Endian | ✅ | ❌ | Early port of Linux to PowerPC Macintosh. Development ceased. |
| MintPPC | Linux Mint/Debian | Active | Rolling | https://github.com/MintPPC | Both | ✅ | ✅ | Specifically designed for PowerPC (Old World and New World Macs). |
| openSUSE | SUSE | Active | Rolling (Tumbleweed), Stable (Leap) | https://build.opensuse.org/ | Both | ✅ | ✅ | Offers both stable and rolling releases. |
| OpenPPC | Independent | Inactive | 2006 | (Likely archived) | Big Endian | ✅ | ❌ | Aimed to be a user-friendly PowerPC Linux distribution. Development ceased. |
| Ubuntu | Debian | Active | Rolling | https://git.launchpad.net/ubuntu | Both | ✅ | ✅ | Check specific release notes for architecture support. |
| Void Linux (PPC) | Independent | Inactive | 2023 | https://github.com/void-ppc | Both | ✅ | ✅ | Community-led effort. |
| Yellow Dog Linux | Red Hat/Fedora | Inactive | August 6, 2009 (6.2) | (Likely archived, e.g., via WayBack Machine) | Both | ✅ | ✅ | Historically significant for PlayStation 3 and PowerPC Macs. Development ceased. |
| T2 SDE |
- | Active | https://t2sde.org/documentation/ | Both | ✅ | ✅ | System to create new distributions. Similar to Yotco. | |
| Bedrock Linux | - | https://bedrocklinux.org/ | ✅ | ✅ | Sytem to create a new distribution by picking and choosing components from various distributions. | |||
| FreeBSD Distributions (Including Less Mainstream/Historical) | ||||||||
| FreeBSD | BSD | Active | March 11, 2025 (13.5-RELEASE) | https://cgit.freebsd.org/src/ | Both | ✅ | ✅ | Tier 2 support for 32-bit and 64-bit PowerPC. 32-bit support deprecated in 15.0. |
| MidnightBSD | FreeBSD | Active | Rolling | https://github.com/midnightbsd | Both | ✅ | ✅ | Aims to adapt FreeBSD for desktop usage. |
| NetBSD | BSD | Active | Rolling | https://github.com/netbsd/src | Both | ✅ | ✅ | Known for portability. MacPPC is Tier II. |
| OpenBSD | BSD | Active | Rolling | https://github.com/openbsd/src | Big Endian | ✅ | ✅ | Focuses on security and has official support for Apple's Mac-based PowerPC hardware. |
| Other Open Source Distributions (Including Less Mainstream/Historical) | ||||||||
| Haiku | Independent (BeOS inspired) | Beta | Rolling | https://github.com/haiku/haiku | Little Endian | ✅ | ❌ | Has a PowerPC port, may require manual compilation. |
8. Build Tooling (WIP/Placeholders)
[edit | edit source]This section will document the exact steps, tools, and workflows needed to build every part of the software stack.
Build Tooling Overview
[edit | edit source]- Cross-toolchain setup (e.g. NXP SDK, crosstool-ng, LLVM)
- U-Boot build and customization
- Linux kernel configuration and build
- Root filesystem generation methods (debootstrap, Buildroot, Yocto)
- Build orchestration (Makefiles, shell scripts, CI runners)
- Packaging tools for our distro (dpkg, xbps, etc.)
- Secure image signing (U-Boot SPL, FIT images, secure boot)
- Emulator-based validation and test harnesses
Note: Details for each item will be populated progressively as we finalize architecture and test results.