Systems & embedded · FreeBSD

Getting FreeBSD onto the boards it doesn't run on yet.

SoC bring-up, kernel and driver work, and ports maintenance — developed in the open, tested on the hardware in front of me, and submitted upstream.

  • arm64 / armv7
  • MediaTek
  • Rockchip
  • Broadcom
  • device trees
  • ports
console — bpi-r2pro sample

      
3 boards in bring-up
560+ ports commits
3 SoC vendors
2 open arenas

01 — About

Martin Fx — systems & embedded developer

I work where the operating system meets the silicon: getting FreeBSD to boot on hardware that has only ever run vendor Linux, writing the drivers that make its peripherals usable, and keeping the ports tree building across architectures.

Most of what I do starts with a board on the desk, a serial cable, and no working device tree. From there it's clocks, pinctrl, MMC, USB and Ethernet until there's a login prompt — then the same work again, cleaned up, for upstream. I run SoCBSD so that effort doesn't die on one person's branch, and I maintain FreeBSD ports so there is software to install once a board boots.

Open to collaboration on driver work, board bring-up and ports maintenance — including contract and long-term maintenance work.

What I work on

Kernel & drivers
Device trees, clocks, pinctrl, MMC/SD, USB, Ethernet and switch blocks, interrupt controllers
Silicon
MediaTek MT7622 · MT7623 · Rockchip RK3568 · Broadcom BCM2837 / BCM2712
Architectures
arm64 / aarch64, armv7, cross-builds from amd64
Boot & debug
U-Boot, serial console bring-up, KDB / DDB, boot-log triage
Ports & packaging
FreeBSD ports, Makefiles, dependency bumps, build-failure and cross-arch fixes
Languages
C, shell, make

02 — Projects

What I build and maintain

Three tracks that feed each other: a fork where board support is grown, the ports tree that makes the result usable, and the upstream trees where it lands.

main project

SoCBSD

A FreeBSD fork dedicated to SoC board bring-up — a playground, not a distro. Far more SoC boards run vendor Linux than run FreeBSD. SoCBSD is a place to work on that: bring a board up, stabilise it, then submit the work upstream.

  • orgSoCBSD
  • treesocbsd-src
  • basefreebsd/freebsd-src
kernelarm64bring-up

FreeBSD Ports

New ports, build-failure fixes, dependency bumps and cross-architecture cleanups for the FreeBSD ports tree — from dev tooling to multimedia and system utilities.

  • repoMartinfx/FreeBSD-Ports
  • scopenew ports · fixes · upstreaming
portspackagingmakefiles

freebsd-src patches

My working tree against FreeBSD main: per-board support branches for MediaTek and Rockchip platforms, plus standalone fixes such as the Bluetooth stack patch. Each branch is self-contained — one board, built against FreeBSD main.

  • repoMartinfx/freebsd-src
  • branchesmax-support-*
driversdtsupstream

04 — Upstream

From branch to upstream

The fork is a staging area, not a destination. Board support starts on a branch, stabilises in a SoCBSD arena, goes through review, and is submitted to the FreeBSD trees and wiki pages.

  1. 01

    Branch

    A per-board branch in Martinfx/freebsd-src, built and booted on real hardware.

  2. 02

    Arena

    Promoted into a SoCBSD arena so other owners of the same board can contribute.

  3. 03

    Review

    Automated checks and human review on Phabricator and GitHub — clean provenance, real names, boot logs.

  4. 04

    Upstream

    Submitted to freebsd-src or the ports tree, with the wiki board page updated to match.

The FreeBSD ecosystem this work sits in

05 — How SoCBSD works

The rules of the fork

Work happens in seasonal games: boards are the arenas, contributors are the players. The rules exist so that everything merged can survive the trip upstream.

  1. 01

    Bring-up only

    Scope is SoC board support. Not a distro, not a desktop, not a rewrite of FreeBSD.

  2. 02

    Own the hardware

    You must physically have the device. Support is written against boards, not datasheets.

  3. 03

    Verify, then claim

    Untested code is not merged. A claim about hardware needs a boot log behind it.

  4. 04

    Clean provenance

    No copying GPL code. Everything must be relicensable and safe to send upstream.

  5. 05

    Real names

    Upstream FreeBSD wants attributable authorship, so the fork asks for it from day one.

  6. 06

    Review is expected

    Automated and AI-assisted review runs on every change, then a human signs it off.

06 — FAQ

Frequently asked questions

The questions that come up most often by e-mail and in the FreeBSD forums.

Does FreeBSD run on the Banana Pi BPI-R64?

Not out of the box — there is no BPI-R64 image on the FreeBSD download page. Support for its MediaTek MT7622 SoC is what the max-support-mediatek-7622-bananapir64 branch adds: device tree, clocks, pinctrl and the drivers needed to reach a console. Build that branch for TARGET=arm64 and you get a bootable system on the board.

Which SoC boards are being brought up right now?

Three on my own bench: Banana Pi BPI-R64 (MediaTek MT7622, arm64), BPI-R2 Pro (Rockchip RK3568, arm64) and BPI-R2 (MediaTek MT7623, armv7). Two more are open SoCBSD arenas waiting for a contributor with the board: Raspberry Pi 3 (BCM2837) and Raspberry Pi 5 (BCM2712). Each has its own branch — see Boards and open arenas.

What is SoCBSD and how does it differ from FreeBSD?

SoCBSD is a FreeBSD fork with exactly one job: SoC board bring-up. It is a playground, not a distribution — no installer, no desktop, no divergent userland. Work lands there first because merging is fast, then goes upstream into FreeBSD once it is stable. Everything is written to be relicensable and upstream-ready from the first commit.

How do I build FreeBSD for an arm64 SoC board?

Clone the tree, check out the branch for your board, then cross-build world and kernel:

git clone https://github.com/SoCBSD/socbsd-src.git
cd socbsd-src
git checkout arena/raspberry-pi-3
make -j$(sysctl -n hw.ncpu) buildworld buildkernel \
     TARGET=arm64 TARGET_ARCH=aarch64

Then write the result to an SD card, attach a serial console and capture the boot log — that log is what a pull request needs.

Can I contribute support for a board I own?

Yes — that is the whole point. Open an arena for your board or join an existing one. The rules are short: you must physically own the hardware, you must verify what you claim (untested code is not merged), no GPL code may be copied in, and you commit under a real name so the work can go upstream. See how SoCBSD works.

Does any of this reach upstream FreeBSD?

Upstream is the destination, not a side effect. A change starts on a per-board branch, stabilises in a SoCBSD arena, goes through review on Phabricator and GitHub, and is submitted to freebsd-src or the ports tree. Ports work takes the same route; my ports repository holds over 560 commits of new ports, build-failure fixes and cross-architecture cleanups.

Are you available for embedded or driver work?

Yes — board bring-up, device drivers, device trees, ports maintenance and long-term support contracts around FreeBSD on embedded hardware. Platforms I work on day to day are MediaTek, Rockchip and Broadcom. Write to freebsd@sysctl.cz or reach me on GitHub.

07 — Collaborate

Got a board? Let's boot it.

I'm open to collaboration on driver work, board bring-up, ports maintenance and anything low-level around FreeBSD on embedded hardware. Contract work and long-term maintenance included.

  • 1
    Pick an arena

    Take an open board, or propose a new one you own.

  • 2
    Build and boot it

    Clone the tree, cut a branch, get to a console.

  • 3
    Send the PR

    Boot log attached — that is what makes the change reviewable.

  • 4
    Upstream it

    Once it is stable, it is submitted to FreeBSD.