Created
December 23, 2025 13:20
-
-
Save andir/db3ea533ed6331c30aee834e874cb66d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { pkgs, system, inputs, lib, ... }: | |
| let | |
| targetPkgs = import inputs.unstable { inherit system; crossSystem = "aarch64-linux"; config.allowUnfree = true; }; | |
| in | |
| lib.makeScope targetPkgs.newScope (self: with self; { | |
| armTrustedFirmware = (targetPkgs.buildArmTrustedFirmware rec { | |
| extraMakeFlags = [ "bl31" ]; | |
| platform = "rk3568"; | |
| extraMeta.platforms = [ "aarch64-linux" ]; | |
| filesToInstall = [ "build/${platform}/release/bl31/bl31.elf" ]; | |
| platformCanUseHDCPBlob = true; | |
| }).overrideAttrs ({ patches ? [ ], ... }: { | |
| #patches = patches ++ [ | |
| # ( | |
| # let | |
| # raw = targetPkgs.fetchurl { | |
| # url = "https://review.trustedfirmware.org/changes/TF-A%2Ftrusted-firmware-a~16952/revisions/16/patch?download"; | |
| # sha256 = "sha256-fxH63QxOdBwsNX+p4olIfNtH9ecLnl2IMPOWpdW7lRg="; | |
| # }; | |
| # in | |
| # targetPkgs.runCommand "rk3568.patch" { inherit raw; } '' | |
| # base64 -d < $raw > $out | |
| # '' | |
| # ) | |
| #]; | |
| }); | |
| uboot = callPackage ./r5s-uboot.nix { }; | |
| nixos = targetPkgs.nixos { | |
| imports = [ | |
| (targetPkgs.path + "/nixos/modules/installer/sd-card/sd-image-aarch64-new-kernel-no-zfs-installer.nix") | |
| ({ pkgs, config, ... }: { | |
| sdImage = { | |
| populateFirmwareCommands = lib.mkForce ""; | |
| postBuildCommands = '' | |
| dd if=${uboot}/idbloader.img bs=4K of=$img seek=8 conv=notrunc | |
| dd if=${uboot}/u-boot.itb bs=4K of=$img seek=2048 conv=notrunc | |
| ''; | |
| populateRootCommands = | |
| let | |
| dtb = pkgs.runCommand "rk3567-nanopi-r5s.dtb" | |
| rec { | |
| nativeBuildInputs = [ pkgs.dtc pkgs.stdenv.cc ]; | |
| kernelSrc = toString | |
| (pkgs.runCommand "kernel-src-${config.boot.kernelPackages.kernel.version}" | |
| { | |
| src = config.boot.kernelPackages.kernel.src; | |
| } '' | |
| mkdir -p $out | |
| tar -xvf $src -C $out | |
| '') + "/linux-${config.boot.kernelPackages.kernel.version}"; | |
| } '' | |
| echo $PATH | |
| ${pkgs.stdenv.cc.targetPrefix}gcc -I "$kernelSrc/include" -E -nostdinc -undef -D__DTS__ -x assembler-with-cpp -o "rk3568-nanopi-r5s-top.dts" "$kernelSrc/arch/arm64/boot/dts/rockchip/rk3568-nanopi-r5s.dts" | |
| dtc -I dts -O dtb -b0 -Wno-interrupt_provider -Wno-unique_unit_address -Wno-unit_address_vs_reg -Wno-avoid_unnecessary_addr_size -Wno-alias_paths -Wno-graph_child_address -Wno-simple_bus_reg -o $out rk3568-nanopi-r5s-top.dts | |
| ''; | |
| in | |
| '' | |
| mkdir -p files/boot | |
| cp ${dtb} files/boot/rk3568-nanopi-r5s.dtb | |
| ''; | |
| }; | |
| }) | |
| ({ pkgs, ... }: { | |
| boot.loader = { | |
| grub.enable = lib.mkDefault false; | |
| generic-extlinux-compatible = { | |
| enable = lib.mkDefault true; | |
| useGenerationDeviceTree = true; | |
| }; | |
| }; | |
| environment.systemPackages = [ | |
| (pkgs.writeScriptBin "install-uboot" '' | |
| set -ex | |
| ${pkgs.coreutils}/bin/dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=1024 | |
| ${pkgs.coreutils}/bin/dd bs=4K seek=8 if=${uboot}/idbloader.img of=/dev/mmcblk0 conv=notrunc | |
| ${pkgs.coreutils}/bin/dd bs=4K seek=2048 if=${uboot}/u-boot.itb of=/dev/mmcblk0 conv=notrunc | |
| '') | |
| ]; | |
| hardware.deviceTree.name = lib.mkDefault "../../rk3568-nanopi-r5s.dtb"; | |
| #boot.kernelPackages = lib.mkForce pkgs.linuxPackages_6_5; | |
| boot.kernelParams = lib.mkBefore [ | |
| # "console=tty1" | |
| "console=ttyS2,1500000" | |
| "earlycon=uart8250,mmio32,0xfe660000" | |
| ]; | |
| boot.kernelPatches = [ | |
| { | |
| name = "rockchip-config.patch"; | |
| patch = null; | |
| extraConfig = '' | |
| PCIE_ROCKCHIP_EP y | |
| PCIE_ROCKCHIP_DW_HOST y | |
| ROCKCHIP_VOP2 y | |
| LED_TRIGGER_PHY y | |
| USB_LED_TRIG y | |
| LEDS_BRIGHTNESS_HW_CHANGED y | |
| LEDS_TRIGGER_MTD y | |
| ''; | |
| } | |
| ]; | |
| boot.initrd.availableKernelModules = [ | |
| ## Rockchip | |
| ## Storage | |
| "sdhci_of_dwcmshc" | |
| "dw_mmc_rockchip" | |
| "analogix_dp" | |
| "io-domain" | |
| "rockchip_saradc" | |
| "rockchip_thermal" | |
| "rockchipdrm" | |
| "rockchip-rga" | |
| "pcie_rockchip_host" | |
| "phy-rockchip-pcie" | |
| "phy_rockchip_snps_pcie3" | |
| "phy_rockchip_naneng_combphy" | |
| "phy_rockchip_inno_usb2" | |
| "dwmac_rk" | |
| "dw_wdt" | |
| "dw_hdmi" | |
| "dw_hdmi_cec" | |
| "dw_hdmi_i2s_audio" | |
| "dw_mipi_dsi" | |
| ]; | |
| # Most Rockchip CPUs (especially with hybrid cores) work best with "schedutil" | |
| powerManagement.cpuFreqGovernor = "schedutil"; | |
| # Let's blacklist the Rockchips RTC module so that the | |
| # battery-powered HYM8563 (rtc_hym8563 kernel module) will be used | |
| # by default | |
| boot.blacklistedKernelModules = [ "rtc_rk808" ]; | |
| }) | |
| ]; | |
| }; | |
| }) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment