Skip to content

Commit

Permalink
Bootable OPI 5b image with kernel 6.3
Browse files Browse the repository at this point in the history
  • Loading branch information
Si Dao committed Jun 14, 2023
1 parent 15198f1 commit 110cfae
Show file tree
Hide file tree
Showing 6 changed files with 227 additions and 0 deletions.
27 changes: 27 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

97 changes: 97 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
{
description = "NixOS Installer AArch64";

inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05-small";
};

outputs = { self, nixpkgs }:
let
pkgs = import nixpkgs { system = "aarch64-linux"; };
rk3588s-atf-blob = pkgs.stdenvNoCC.mkDerivation {
pname = "rk3588s-atf-blob";
version = "0.0.1";

src = pkgs.fetchFromGitHub {
owner = "armbian";
repo = "rkbin";
rev = "5d409529dbbc12959111787e77c349b3e832bc52";
sha256 = "sha256-cLBn7hBhVOKWz0bxJwRWyKJ+Au471kzQNoc8d8sVqlM=";
};

installPhase = ''
mkdir $out && cp rk35/*.* $out/
'';
};

rk3588s-uboot = pkgs.stdenv.mkDerivation {
pname = "rk3588s-uboot";
version = "2017.09-rk3588";

src = pkgs.fetchFromGitHub {
owner = "orangepi-xunlong";
repo = "u-boot-orangepi";
rev = "v2017.09-rk3588";
sha256 = "sha256-J05zNWwZ26JhYWnUvj/VDYUKaXKEc4Im8KB9NwfBdVU=";
};
patches = [ ./patches/uboot/f1.patch ./patches/uboot/f2.patch ./patches/uboot/f3.patch ];

buildInputs = [ rk3588s-atf-blob pkgs.bc pkgs.dtc pkgs.python2 ];

configurePhase = ''
make ARCH=arm orangepi_5b_defconfig
'';

buildPhase = ''
patchShebangs arch/arm/mach-rockchip
make ARCH=arm BL31=${rk3588s-atf-blob}/rk3588_bl31_v1.32.elf \
spl/u-boot-spl.bin u-boot.dtb u-boot.itb
tools/mkimage -n rk3588 -T rksd -d \
${rk3588s-atf-blob}/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.08.bin:spl/u-boot-spl.bin \
idbloader.img
'';

installPhase = ''
mkdir $out
cp u-boot.itb idbloader.img $out
'';
};
in rec
{
nixosConfigurations.rk3588s = nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
modules = [
"${nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix"
( { pkgs, lib, ...}: {
boot.kernelPackages = pkgs.linuxPackages_6_3;
boot.kernelParams = [ "console=ttyS2,1500000" "console=tty1" ];
boot.supportedFilesystems = lib.mkForce [ "vfat" "ext4" "btrfs" ];

hardware = {
deviceTree = {
name = "rockchip/rk3588s-rock-5a.dtb";
};
};

users.users.nixos = {
initialPassword = "nixos";
isNormalUser = true;
description = "NixOS User";
extraGroups = [ "users" "networkmanager" "wheel" ];
};

# 32 MiB offset, should be enough for bootloader
sdImage.firmwarePartitionOffset = 32;
sdImage.compressImage = false;
sdImage.postBuildCommands = ''
dd if=\${rk3588s-uboot}/idbloader.img of=$img seek=64 conv=notrunc
dd if=\${rk3588s-uboot}/u-boot.itb of=$img seek=16384 conv=notrunc
'';
})
];
};

images.rk3588s = nixosConfigurations.rk3588s.config.system.build.sdImage;
};
}
11 changes: 11 additions & 0 deletions patches/uboot/f1.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- a/drivers/mmc/rockchip_dw_mmc.c 1970-01-01 08:00:01.000000000 +0800
+++ b/drivers/mmc/rockchip_dw_mmc.c 2023-06-14 01:33:09.737030250 +0800
@@ -42,7 +42,7 @@
{
struct rockchip_dwmmc_priv *priv = dev_get_priv(dev);

- if (!priv || !&priv->clk)
+ if (!priv)
return 0;

if (!memcmp(dev->name, "dwmmc", strlen("dwmmc")))
80 changes: 80 additions & 0 deletions patches/uboot/f2.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
--- a/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c 1970-01-01 08:00:01.000000000 +0800
+++ b/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c 2023-06-14 01:56:23.364063607 +0800
@@ -40,7 +40,7 @@
{
struct rockchip_pinctrl_priv *priv = bank->priv;
struct rockchip_pin_ctrl *ctrl = priv->ctrl;
- struct rockchip_mux_recalced_data *data;
+ struct rockchip_mux_recalced_data *data = NULL;
int i;

for (i = 0; i < ctrl->niomux_recalced; i++) {
@@ -64,7 +64,7 @@
{
struct rockchip_pinctrl_priv *priv = bank->priv;
struct rockchip_pin_ctrl *ctrl = priv->ctrl;
- struct rockchip_mux_route_data *data;
+ struct rockchip_mux_route_data *data = NULL;
int i;

for (i = 0; i < ctrl->niomux_routes; i++) {
@@ -423,14 +423,14 @@
u32 cells[MAX_ROCKCHIP_PINS_ENTRIES * 4];
u32 bank, pin, mux, conf, arg, default_val;
int ret, count, i;
- const char *prop_name;
- const void *value;
+ const char *prop_name = NULL;
+ const void *value = NULL;
int prop_len, param;
- const u32 *data;
+ const u32 *data = NULL;
ofnode node;
#if CONFIG_IS_ENABLED(OF_LIVE)
- const struct device_node *np;
- struct property *pp;
+ const struct device_node *np = NULL;
+ struct property *pp = NULL;
#else
int property_offset, pcfg_node;
const void *blob = gd->fdt_blob;
--- a/drivers/pinctrl/pinctrl-rockchip.c 1970-01-01 08:00:01.000000000 +0800
+++ b/drivers/pinctrl/pinctrl-rockchip.c 2023-06-14 01:59:46.814286888 +0800
@@ -829,7 +829,7 @@
{
struct rockchip_pinctrl_priv *priv = bank->priv;
struct rockchip_pin_ctrl *ctrl = priv->ctrl;
- struct rockchip_mux_recalced_data *data;
+ struct rockchip_mux_recalced_data *data = NULL;
int i;

for (i = 0; i < ctrl->niomux_recalced; i++) {
@@ -1561,7 +1561,7 @@
{
struct rockchip_pinctrl_priv *priv = bank->priv;
struct rockchip_pin_ctrl *ctrl = priv->ctrl;
- struct rockchip_mux_route_data *data;
+ struct rockchip_mux_route_data *data = NULL;
int i;

for (i = 0; i < ctrl->niomux_routes; i++) {
@@ -2940,14 +2940,14 @@
u32 cells[MAX_ROCKCHIP_PINS_ENTRIES * 4];
u32 bank, pin, mux, conf, arg, default_val;
int ret, count, i;
- const char *prop_name;
- const void *value;
+ const char *prop_name = NULL;
+ const void *value = NULL;
int prop_len, param;
- const u32 *data;
+ const u32 *data = NULL;
ofnode node;
#if defined(CONFIG_OF_LIVE) && !defined(CONFIG_SPL_BUILD)
- const struct device_node *np;
- struct property *pp;
+ const struct device_node *np = NULL;
+ struct property *pp = NULL;
#else
int property_offset, pcfg_node;
const void *blob = gd->fdt_blob;
11 changes: 11 additions & 0 deletions patches/uboot/f3.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- a/configs/orangepi_5b_defconfig 1970-01-01 08:00:01.000000000 +0800
+++ b/configs/orangepi_5b_defconfig 2023-06-14 11:52:08.375102774 +0800
@@ -208,7 +208,7 @@
CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_DM_VIDEO=y
CONFIG_DISPLAY=y
-CONFIG_DRM_ROCKCHIP=y
+CONFIG_DRM_ROCKCHIP=n
CONFIG_DRM_MAXIM_MAX96745=y
CONFIG_DRM_MAXIM_MAX96752F=y
CONFIG_DRM_MAXIM_MAX96755F=y
1 change: 1 addition & 0 deletions scripts/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
NIXPKGS_ALLOW_INSECURE=1 nix --extra-experimental-features 'nix-command flakes' build .#images.rk3588s --impure

0 comments on commit 110cfae

Please sign in to comment.