Skip to content

Commit

Permalink
radxa/rock-4c-plus: init
Browse files Browse the repository at this point in the history
  • Loading branch information
RadxaYuntian committed Feb 5, 2025
1 parent a8a520f commit f0f5a63
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,7 @@ See code for all available configurations.
| [Purism Librem 13v3](purism/librem/13v3) | `<nixos-hardware/purism/librem/13v3>` |
| [Purism Librem 15v3](purism/librem/13v3) | `<nixos-hardware/purism/librem/15v3>` |
| [Purism Librem 5r4](purism/librem/5r4) | `<nixos-hardware/purism/librem/5r4>` |
| [Radxa ROCK 4C+](radxa/rock-4c-plus) | `<nixos-hardware/radxa/rock-4c-plus>` |
| [Raspberry Pi 2](raspberry-pi/2) | `<nixos-hardware/raspberry-pi/2>` |
| [Raspberry Pi 3](raspberry-pi/3) | `<nixos-hardware/raspberry-pi/3>` |
| [Raspberry Pi 4](raspberry-pi/4) | `<nixos-hardware/raspberry-pi/4>` |
Expand Down
1 change: 1 addition & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@
raspberry-pi-3 = import ./raspberry-pi/3;
raspberry-pi-4 = import ./raspberry-pi/4;
raspberry-pi-5 = import ./raspberry-pi/5;
rock-4c-plus = import ./radxa/rock-4c-plus;
kobol-helios4 = import ./kobol/helios4;
samsung-np900x3c = import ./samsung/np900x3c;
slimbook-hero-rpl-rtx = import ./slimbook/hero/rpl-rtx;
Expand Down
94 changes: 94 additions & 0 deletions radxa/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# NixOS support for Radxa devices

Radxa provides the NixOS implementation in the form of `nixos-hardware` modules
for advanced users.

Our goals are:

* Only use `nixpkgs` provided packages.
* Provide a consistent and simple experience to use our NixOS module.
* Targetted audiences are advanced users who care mostly about CPU compute, storage, and network.
* No support guarantee. We are not here to teach people how to use NixOS.

We explicitly want to avoid packaging the entire vendor SDK bootloader and kernel
in Nix. Those are not going to be accepted in `nixpkgs`, and our targetted audiences
like homelabbers generally ignore the additional hardware features.

This also aligns with [NixOS on ARM](https://wiki.nixos.org/wiki/NixOS_on_ARM)'s
definition of "support":

> Support for those board assumes as much is supported as Mainline Linux supports.
## Characteristic of the default profiles

* Using `linuxPackages_latest`
* `bcachefs` rootfs with zstd compression and password-less encryption enabled
* EFI boot chain provided by `systemd-boot`
* Default serial console enabled with baud rate matches the platform firmware
* No automatic partition expansion, as the module is only focusing on hardware

## Common Nix flake pattern

Below is an annoated flake example to create the initial boot image.

```
{
description = "Example NixOS configurations for Radxa product";
# To build, run `nix build .#nixosConfigurations.radxa.config.system.build.diskoImages`
inputs = {
disko.url = "github:nix-community/disko";
disko.inputs.nixpkgs.follows = "nixpkgs";
nixos-hardware.url = "github:NixOS/nixos-hardware";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
nixpkgs-unfree.url = "github:numtide/nixpkgs-unfree/nixos-unstable";
};
outputs = inputs@{
self,
disko,
nixos-hardware,
nixpkgs,
nixpkgs-unfree,
}: {
nixosConfigurations = {
radxa = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; };
system = "aarch64-linux";
modules = [
nixos-hardware.nixosModules.rock-4c-plus # Update the system according to your device.
disko.nixosModules.disko # disko usage is optional in the running system, but we need it to generate the initial boot image.
"${nixos-hardware}/radxa/disko.nix" # Common Radxa Disko profile. it is system-agnostic.
{
disko = {
imageBuilder = {
# Avoid double emulation to significantly speed up image building process.
# Update the system according to your host system.
# See https://github.com/nix-community/disko/issues/856
qemu = nixpkgs.legacyPackages.x86_64-linux.qemu + "/bin/qemu-system-aarch64 -M virt -cpu cortex-a57";
};
# Default image size is 2G for a small basic CLI system.
# devices.disk.main.imageSize = "2G";
};
# Override the default bootloader with a cross built one.
# Use this if you do not have binfmt configured on your system.
# For NixOS, please add `boot.binfmt.emulatedSystems = [ "aarch64-linux" ];` to your system configuration.
# Update the system and the firmware package according to your device.
# hardware.radxa.rock-4c-plus.platformFirmware = nixpkgs-unfree.legacyPackages.x86_64-linux.pkgsCross.aarch64-multiplatform.ubootRock4CPlus;
users.users.radxa = {
isNormalUser = true;
initialPassword = "radxa";
extraGroups = [ "wheel" ];
};
services.openssh.enable = true;
networking.hostName = "radxa";
system.stateVersion = "24.11";
}
];
};
};
};
}
```
20 changes: 20 additions & 0 deletions radxa/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{ lib
, pkgs
, config
, ...
}:
let
cfg = config.hardware.radxa;
in {
options.hardware.radxa = {
enable = lib.mkEnableOption "Radxa system support";
};

config = lib.mkIf cfg.enable {
boot = {
kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;
supportedFilesystems = [ "bcachefs" ];
loader.systemd-boot.enable = lib.mkDefault true;
};
};
}
12 changes: 12 additions & 0 deletions radxa/disko.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{ lib
, pkgs
, config
, ...
}:
let
cfg = config.hardware.radxa;
in {
imports = [
../rockchip/disko.nix
];
}
31 changes: 31 additions & 0 deletions radxa/rock-4c-plus/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{ lib
, pkgs
, config
, ...
}:
let
cfg = config.hardware.radxa.rock-4c-plus;
rkCfg = config.hardware.rockchip;
in {
imports = [
../.
../../rockchip/rk3399
];

options.hardware.radxa.rock-4c-plus = {
platformFirmware = lib.mkPackageOption pkgs "ubootRock4CPlus" { };
};

config = {
hardware = {
radxa.enable = true;
rockchip = {
rk3399.enable = true;
diskoExtraPostVM = ''
dd conv=notrunc,fsync if=${cfg.platformFirmware}/idbloader.img of=$out/${rkCfg.diskoImageName} bs=512 seek=64
dd conv=notrunc,fsync if=${cfg.platformFirmware}/u-boot.itb of=$out/${rkCfg.diskoImageName} bs=512 seek=16384
'';
};
};
};
}

0 comments on commit f0f5a63

Please sign in to comment.