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 Jan 22, 2025
1 parent a8a520f commit 409ed0c
Show file tree
Hide file tree
Showing 7 changed files with 145 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
84 changes: 84 additions & 0 deletions radxa/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# 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";
};
outputs = inputs@{
self,
disko,
nixos-hardware,
nixpkgs,
}: {
nixosConfigurations = {
radxa = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; };
system = "aarch64-linux";
modules = [
nixos-hardware.nixosModules.rock-4c-plus # Need to be replaced with the real device you are using.
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"
{
disko = {
imageBuilder = {
# This is to avoid double emulation. Adjust 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";
};
devices.disk.main.imageSize = "2G"; # 2G is enough for a basic CLI system while being small enough to flash
};
users.users.radxa = {
isNormalUser = true;
initialPassword = "radxa";
extraGroups = [ "wheel" ];
};
services.openssh.enable = true;
networking.hostName = "radxa";
system.stateVersion = "24.11";
}
];
};
};
};
}
```
22 changes: 22 additions & 0 deletions radxa/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{ lib
, pkgs
, config
, ...
}:
let
cfg = config.hardware.radxa;
in {
options.hardware.radxa = {
enable = lib.mkEnableOption "Radxa system support";
};

config = lib.mkIf cfg.enable {
boot = {
# Currently enable bcachefs automatically set
# kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;
kernelPackages = lib.mkOverride 990 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
];
}
24 changes: 24 additions & 0 deletions radxa/rock-4c-plus/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{ lib
, pkgs
, config
, ...
}:
let
cfg = config.hardware.rockchip;
in {
imports = [
../.
../../rockchip/rk3399
];

hardware = {
radxa.enable = true;
rockchip = {
rk3399.enable = true;
diskoExtraPostVM = ''
dd conv=notrunc,fsync if=${pkgs.ubootRock4CPlus}/idbloader.img of=$out/${cfg.diskoImageName} bs=512 seek=64
dd conv=notrunc,fsync if=${pkgs.ubootRock4CPlus}/u-boot.itb of=$out/${cfg.diskoImageName} bs=512 seek=16384
'';
};
};
}
1 change: 1 addition & 0 deletions tests/flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"raspberry-pi-3"
"raspberry-pi-4"
"raspberry-pi-5"
"rock-4c-plus"
];

matchArch =
Expand Down

0 comments on commit 409ed0c

Please sign in to comment.