mirror of
https://github.com/NixOS/nixos-hardware.git
synced 2025-11-03 16:57:14 +08:00
refactor(nxp): parameterize i.MX platform builders to reduce duplication
This refactoring reduces code duplication across i.MX93, i.MX8MP, and i.MX8MQ platforms by extracting common build logic into parameterized shared builders. This makes it easier to maintain and add new i.MX platforms while ensuring consistency across all platforms.
This commit is contained in:
56
nxp/common/bsp/imx-linux-builder.nix
Normal file
56
nxp/common/bsp/imx-linux-builder.nix
Normal file
@@ -0,0 +1,56 @@
|
||||
# Parameterized Linux kernel builder for i.MX platforms
|
||||
# This builder is used across i.MX93, i.MX8MP, i.MX8MQ and similar platforms
|
||||
{ lib, pkgs, ... }@args:
|
||||
let
|
||||
inherit (pkgs) buildLinux;
|
||||
|
||||
# Import common kernel configuration
|
||||
kernelConfig = import ../lib/kernel-config.nix;
|
||||
in
|
||||
# Platform-specific parameters
|
||||
{
|
||||
pname,
|
||||
version,
|
||||
src,
|
||||
defconfig ? "imx_v8_defconfig",
|
||||
# Optional parameters
|
||||
extraConfig ? "",
|
||||
kernelPatches ? [ ],
|
||||
autoModules ? false,
|
||||
ignoreConfigErrors ? true,
|
||||
extraMeta ? { },
|
||||
}:
|
||||
let
|
||||
# Combine common i.MX kernel config with platform-specific config
|
||||
finalExtraConfig = kernelConfig.imxCommonKernelConfig + extraConfig;
|
||||
in
|
||||
buildLinux (
|
||||
args
|
||||
// rec {
|
||||
inherit
|
||||
version
|
||||
defconfig
|
||||
kernelPatches
|
||||
autoModules
|
||||
ignoreConfigErrors
|
||||
;
|
||||
name = pname;
|
||||
|
||||
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
|
||||
modDirVersion = version;
|
||||
|
||||
extraConfig = finalExtraConfig;
|
||||
|
||||
inherit src;
|
||||
|
||||
meta =
|
||||
with lib;
|
||||
{
|
||||
homepage = "https://github.com/nxp-imx/linux-imx";
|
||||
license = [ licenses.gpl2Only ];
|
||||
platforms = [ "aarch64-linux" ];
|
||||
}
|
||||
// extraMeta;
|
||||
}
|
||||
// (args.argsOverride or { })
|
||||
)
|
||||
89
nxp/common/bsp/imx-optee-builder.nix
Normal file
89
nxp/common/bsp/imx-optee-builder.nix
Normal file
@@ -0,0 +1,89 @@
|
||||
# Parameterized OP-TEE OS builder for i.MX platforms
|
||||
# This builder is used across i.MX93, i.MX8MP, i.MX8MQ and similar platforms
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
# Platform-specific parameters
|
||||
pname,
|
||||
version,
|
||||
platformFlavor,
|
||||
src,
|
||||
# Optional parameters
|
||||
meta ? { },
|
||||
}:
|
||||
let
|
||||
inherit (pkgs.buildPackages) python3;
|
||||
toolchain = pkgs.gccStdenv.cc;
|
||||
binutils = pkgs.gccStdenv.cc.bintools.bintools_bin;
|
||||
cpp = pkgs.gcc;
|
||||
|
||||
# Determine PLATFORM and PLATFORM_FLAVOR from platformFlavor
|
||||
# Format can be either "imx-mx93evk" (full platform string) or "mx8mpevk" (just flavor, platform is "imx")
|
||||
# Check if it starts with "imx-" to determine if it's a full platform string or just a flavor
|
||||
hasFullPlatform = lib.hasPrefix "imx-" platformFlavor;
|
||||
platform = if hasFullPlatform then platformFlavor else "imx";
|
||||
flavor = if hasFullPlatform then null else platformFlavor;
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
inherit pname version src;
|
||||
|
||||
nativeBuildInputs = [
|
||||
python3
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
pycryptodomex
|
||||
pyelftools
|
||||
cryptography
|
||||
];
|
||||
|
||||
# Common postPatch for all i.MX platforms
|
||||
# This is the major source of code duplication - ~60 lines of identical substitutions
|
||||
postPatch = ''
|
||||
# Patch all script shebangs automatically
|
||||
patchShebangs scripts/
|
||||
patchShebangs ta/
|
||||
|
||||
# Patch toolchain paths in mk/gcc.mk
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp
|
||||
'';
|
||||
|
||||
makeFlags =
|
||||
[
|
||||
"PLATFORM=${platform}"
|
||||
]
|
||||
++ lib.optionals (!hasFullPlatform) [
|
||||
"PLATFORM_FLAVOR=${flavor}"
|
||||
]
|
||||
++ [
|
||||
"CFG_ARM64_core=y"
|
||||
"CFG_TEE_TA_LOG_LEVEL=0"
|
||||
"CFG_TEE_CORE_LOG_LEVEL=0"
|
||||
"CROSS_COMPILE=${toolchain}/bin/${toolchain.targetPrefix}"
|
||||
"CROSS_COMPILE64=${toolchain}/bin/${toolchain.targetPrefix}"
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp ./out/arm-plat-imx/core/tee-raw.bin $out/tee.bin
|
||||
'';
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/nxp-imx/imx-optee-os";
|
||||
license = [ lib.licenses.bsd2 ];
|
||||
platforms = [ "aarch64-linux" ];
|
||||
} // meta;
|
||||
}
|
||||
97
nxp/common/bsp/imx-uboot-builder.nix
Normal file
97
nxp/common/bsp/imx-uboot-builder.nix
Normal file
@@ -0,0 +1,97 @@
|
||||
# Parameterized U-Boot builder for i.MX platforms
|
||||
# This builder is used across i.MX93, i.MX8MP, i.MX8MQ and similar platforms
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
buildPackages,
|
||||
# Required dependencies
|
||||
bison,
|
||||
dtc,
|
||||
flex,
|
||||
gnutls,
|
||||
libuuid,
|
||||
ncurses,
|
||||
openssl,
|
||||
perl,
|
||||
efitools,
|
||||
which,
|
||||
# Platform-specific parameters
|
||||
pname,
|
||||
version,
|
||||
src,
|
||||
defconfig,
|
||||
ramdiskAddr,
|
||||
fdtAddr,
|
||||
dtbPath,
|
||||
# Optional parameters
|
||||
extraConfig ? "",
|
||||
extraNativeBuildInputs ? [ ],
|
||||
}:
|
||||
let
|
||||
# Import common U-Boot configuration
|
||||
ubootConfig = import ../lib/uboot-config.nix;
|
||||
|
||||
# Generate the common config with platform-specific memory addresses
|
||||
commonConfig = ubootConfig.imxCommonUbootConfig {
|
||||
inherit ramdiskAddr fdtAddr;
|
||||
};
|
||||
|
||||
# Combine common config with any platform-specific extra config
|
||||
finalExtraConfig = commonConfig + extraConfig;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
inherit pname version src;
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs tools
|
||||
patchShebangs scripts
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
bison
|
||||
flex
|
||||
openssl
|
||||
which
|
||||
ncurses
|
||||
libuuid
|
||||
gnutls
|
||||
perl
|
||||
efitools
|
||||
] ++ extraNativeBuildInputs;
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
hardeningDisable = [ "all" ];
|
||||
enableParallelBuilding = true;
|
||||
|
||||
makeFlags = [
|
||||
"DTC=${lib.getExe buildPackages.dtc}"
|
||||
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
|
||||
];
|
||||
|
||||
extraConfig = finalExtraConfig;
|
||||
|
||||
passAsFile = [ "extraConfig" ];
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
make ${defconfig}
|
||||
cat $extraConfigPath >> .config
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out
|
||||
cp ./u-boot-nodtb.bin $out
|
||||
cp ./spl/u-boot-spl.bin $out
|
||||
cp ${dtbPath} $out
|
||||
cp .config $out
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontStrip = true;
|
||||
}
|
||||
29
nxp/common/lib/kernel-config.nix
Normal file
29
nxp/common/lib/kernel-config.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
# Shared kernel configuration for i.MX platforms
|
||||
# This configuration is used across i.MX93, i.MX8MP, i.MX8MQ and similar platforms
|
||||
{
|
||||
# Common kernel extra configuration for i.MX platforms
|
||||
# Includes: virtualization support, EFI boot, RAID, USB/IP, framebuffer settings
|
||||
imxCommonKernelConfig = ''
|
||||
CRYPTO_TLS m
|
||||
TLS y
|
||||
MD_RAID0 m
|
||||
MD_RAID1 m
|
||||
MD_RAID10 m
|
||||
MD_RAID456 m
|
||||
DM_VERITY m
|
||||
LOGO y
|
||||
FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER n
|
||||
FB_EFI n
|
||||
EFI_STUB y
|
||||
EFI y
|
||||
VIRTIO y
|
||||
VIRTIO_PCI y
|
||||
VIRTIO_BLK y
|
||||
DRM_VIRTIO_GPU y
|
||||
EXT4_FS y
|
||||
USBIP_CORE m
|
||||
USBIP_VHCI_HCD m
|
||||
USBIP_HOST m
|
||||
USBIP_VUDC m
|
||||
'';
|
||||
}
|
||||
33
nxp/common/lib/uboot-config.nix
Normal file
33
nxp/common/lib/uboot-config.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
# Shared U-Boot configuration for i.MX platforms
|
||||
# This configuration is used across i.MX93, i.MX8MP, i.MX8MQ and similar platforms
|
||||
{
|
||||
# Generate common U-Boot extra configuration for i.MX platforms
|
||||
# ramdiskAddr and fdtAddr are platform-specific memory addresses
|
||||
imxCommonUbootConfig =
|
||||
{ ramdiskAddr, fdtAddr }:
|
||||
''
|
||||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="setenv ramdisk_addr_r ${ramdiskAddr}; setenv fdt_addr_r ${fdtAddr}; run distro_bootcmd; "
|
||||
CONFIG_CMD_BOOTEFI_SELFTEST=y
|
||||
CONFIG_CMD_BOOTEFI=y
|
||||
CONFIG_EFI_LOADER=y
|
||||
CONFIG_BLK=y
|
||||
CONFIG_PARTITIONS=y
|
||||
CONFIG_DM_DEVICE_REMOVE=n
|
||||
CONFIG_CMD_CACHE=y
|
||||
'';
|
||||
|
||||
# Common U-Boot native build inputs for i.MX platforms
|
||||
imxCommonUbootNativeBuildInputs = [
|
||||
"bison"
|
||||
"flex"
|
||||
"openssl"
|
||||
"which"
|
||||
"ncurses"
|
||||
"libuuid"
|
||||
"gnutls"
|
||||
"openssl"
|
||||
"perl"
|
||||
"efitools"
|
||||
];
|
||||
}
|
||||
@@ -1,56 +1,20 @@
|
||||
{ pkgs, ... }@args:
|
||||
with pkgs;
|
||||
buildLinux (
|
||||
args
|
||||
// rec {
|
||||
version = "6.12.20";
|
||||
name = "imx8mp-linux";
|
||||
(pkgs.callPackage ../../common/bsp/imx-linux-builder.nix args) {
|
||||
pname = "imx8mp-linux";
|
||||
version = "6.12.20";
|
||||
|
||||
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
|
||||
modDirVersion = version;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "nxp-imx";
|
||||
repo = "linux-imx";
|
||||
# tag: lf-6.12.20-2.0.0
|
||||
rev = "dfaf2136deb2af2e60b994421281ba42f1c087e0";
|
||||
sha256 = "sha256-ITrmj3a5YfXh/PSRTi+Rlto5uEBIAWFWtkTsO1ATXIo=";
|
||||
};
|
||||
|
||||
defconfig = "imx_v8_defconfig";
|
||||
# Platform-specific configuration (if any)
|
||||
extraConfig = "";
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/pull/366004
|
||||
# introduced a breaking change that if a module is declared but it is not being used it will faill.
|
||||
ignoreConfigErrors = true;
|
||||
|
||||
kernelPatches = [
|
||||
];
|
||||
|
||||
autoModules = false;
|
||||
|
||||
extraConfig = ''
|
||||
CRYPTO_TLS m
|
||||
TLS y
|
||||
MD_RAID0 m
|
||||
MD_RAID1 m
|
||||
MD_RAID10 m
|
||||
MD_RAID456 m
|
||||
DM_VERITY m
|
||||
LOGO y
|
||||
FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER n
|
||||
FB_EFI n
|
||||
EFI_STUB y
|
||||
EFI y
|
||||
VIRTIO y
|
||||
VIRTIO_PCI y
|
||||
VIRTIO_BLK y
|
||||
DRM_VIRTIO_GPU y
|
||||
EXT4_FS y
|
||||
USBIP_CORE m
|
||||
USBIP_VHCI_HCD m
|
||||
USBIP_HOST m
|
||||
USBIP_VUDC m
|
||||
'';
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nxp-imx";
|
||||
repo = "linux-imx";
|
||||
# tag: lf-6.12.20-2.0.0
|
||||
rev = "dfaf2136deb2af2e60b994421281ba42f1c087e0";
|
||||
sha256 = "sha256-ITrmj3a5YfXh/PSRTi+Rlto5uEBIAWFWtkTsO1ATXIo=";
|
||||
};
|
||||
}
|
||||
// (args.argsOverride or { })
|
||||
)
|
||||
# https://github.com/NixOS/nixpkgs/pull/366004
|
||||
# introduced a breaking change that if a module is declared but it is not being used it will faill.
|
||||
ignoreConfigErrors = true;
|
||||
}
|
||||
|
||||
@@ -1,69 +1,13 @@
|
||||
{ pkgs }:
|
||||
let
|
||||
inherit (pkgs.buildPackages) python3;
|
||||
toolchain = pkgs.gccStdenv.cc;
|
||||
binutils = pkgs.gccStdenv.cc.bintools.bintools_bin;
|
||||
cpp = pkgs.gcc;
|
||||
in
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
pkgs.callPackage ../../common/bsp/imx-optee-builder.nix {
|
||||
pname = "imx8mp-optee-os";
|
||||
version = "lf-6.12.20-2.0.0";
|
||||
|
||||
nativeBuildInputs = [
|
||||
python3
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
pycryptodomex
|
||||
pyelftools
|
||||
cryptography
|
||||
];
|
||||
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://github.com/nxp-imx/imx-optee-os.git";
|
||||
rev = "87964807d80baf1dcfd89cafc66de34a1cf16bf3";
|
||||
sha256 = "sha256-AMZUMgmmyi5l3BMT84uubwjU0lwNObs9XW6ZCbqfhmc=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace scripts/arm32_sysreg.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace scripts/gen_tee_bin.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace scripts/pem_to_pub_c.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace ta/pkcs11/scripts/verify-helpers.sh \
|
||||
--replace '/usr/bin/env bash' '${pkgs.bash}/bin/bash'
|
||||
substituteInPlace ta/pkcs11/scripts/dump_ec_curve_params.sh \
|
||||
--replace '/usr/bin/env bash' '${pkgs.bash}/bin/bash'
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp
|
||||
'';
|
||||
|
||||
makeFlags = [
|
||||
"PLATFORM=imx"
|
||||
"PLATFORM_FLAVOR=mx8mpevk"
|
||||
"CFG_ARM64_core=y"
|
||||
"CFG_TEE_TA_LOG_LEVEL=0"
|
||||
"CFG_TEE_CORE_LOG_LEVEL=0"
|
||||
"CROSS_COMPILE=${toolchain}/bin/${toolchain.targetPrefix}"
|
||||
"CROSS_COMPILE64=${toolchain}/bin/${toolchain.targetPrefix}"
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp ./out/arm-plat-imx/core/tee-raw.bin $out/tee.bin
|
||||
'';
|
||||
platformFlavor = "mx8mpevk";
|
||||
}
|
||||
|
||||
@@ -1,93 +1,17 @@
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
bison,
|
||||
dtc,
|
||||
fetchgit,
|
||||
flex,
|
||||
gnutls,
|
||||
libuuid,
|
||||
ncurses,
|
||||
openssl,
|
||||
which,
|
||||
perl,
|
||||
buildPackages,
|
||||
efitools,
|
||||
}:
|
||||
let
|
||||
ubsrc = fetchgit {
|
||||
{ pkgs, fetchgit }:
|
||||
pkgs.callPackage ../../common/bsp/imx-uboot-builder.nix {
|
||||
pname = "imx8mp-uboot";
|
||||
version = "2025.04";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://github.com/nxp-imx/uboot-imx.git";
|
||||
# tag: lf-6.12.20-2.0.0
|
||||
rev = "9383f8387dc76524524da69992db96c22195a57c";
|
||||
sha256 = "sha256-httRSwN8NiKOdL7fZEvN/4AbypGQfegYtJgxKIea+Zg=";
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "imx8mp-uboot";
|
||||
version = "2025.04";
|
||||
src = ubsrc;
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs tools
|
||||
patchShebangs scripts
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
bison
|
||||
flex
|
||||
openssl
|
||||
which
|
||||
ncurses
|
||||
libuuid
|
||||
gnutls
|
||||
openssl
|
||||
perl
|
||||
efitools
|
||||
];
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
hardeningDisable = [ "all" ];
|
||||
enableParallelBuilding = true;
|
||||
|
||||
makeFlags = [
|
||||
"DTC=${lib.getExe buildPackages.dtc}"
|
||||
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="setenv ramdisk_addr_r 0x45000000; setenv fdt_addr_r 0x44000000; run distro_bootcmd; "
|
||||
CONFIG_CMD_BOOTEFI_SELFTEST=y
|
||||
CONFIG_CMD_BOOTEFI=y
|
||||
CONFIG_EFI_LOADER=y
|
||||
CONFIG_BLK=y
|
||||
CONFIG_PARTITIONS=y
|
||||
CONFIG_DM_DEVICE_REMOVE=n
|
||||
CONFIG_CMD_CACHE=y
|
||||
'';
|
||||
|
||||
passAsFile = [ "extraConfig" ];
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
make imx8mp_evk_defconfig
|
||||
cat $extraConfigPath >> .config
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out
|
||||
cp ./u-boot-nodtb.bin $out
|
||||
cp ./spl/u-boot-spl.bin $out
|
||||
cp ./dts/upstream/src/arm64/freescale/imx8mp-evk.dtb $out
|
||||
cp .config $out
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontStrip = true;
|
||||
defconfig = "imx8mp_evk_defconfig";
|
||||
ramdiskAddr = "0x45000000";
|
||||
fdtAddr = "0x44000000";
|
||||
dtbPath = "./dts/upstream/src/arm64/freescale/imx8mp-evk.dtb";
|
||||
}
|
||||
|
||||
@@ -1,56 +1,20 @@
|
||||
{ pkgs, ... }@args:
|
||||
with pkgs;
|
||||
buildLinux (
|
||||
args
|
||||
// rec {
|
||||
version = "6.1.55";
|
||||
name = "imx8mq-linux";
|
||||
(pkgs.callPackage ../../common/bsp/imx-linux-builder.nix args) {
|
||||
pname = "imx8mq-linux";
|
||||
version = "6.1.55";
|
||||
|
||||
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
|
||||
modDirVersion = version;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "nxp-imx";
|
||||
repo = "linux-imx";
|
||||
# tag: lf-6.1.55-2.2.0
|
||||
rev = "770c5fe2c1d1529fae21b7043911cd50c6cf087e";
|
||||
sha256 = "sha256-tIWt75RUrjB6KmUuAYBVyAC1dmVGSUAgqV5ROJh3xU0=";
|
||||
};
|
||||
|
||||
defconfig = "imx_v8_defconfig";
|
||||
# Platform-specific configuration (if any)
|
||||
extraConfig = "";
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/pull/366004
|
||||
# introduced a breaking change that if a module is declared but it is not being used it will faill.
|
||||
ignoreConfigErrors = true;
|
||||
|
||||
kernelPatches = [
|
||||
];
|
||||
|
||||
autoModules = false;
|
||||
|
||||
extraConfig = ''
|
||||
CRYPTO_TLS m
|
||||
TLS y
|
||||
MD_RAID0 m
|
||||
MD_RAID1 m
|
||||
MD_RAID10 m
|
||||
MD_RAID456 m
|
||||
DM_VERITY m
|
||||
LOGO y
|
||||
FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER n
|
||||
FB_EFI n
|
||||
EFI_STUB y
|
||||
EFI y
|
||||
VIRTIO y
|
||||
VIRTIO_PCI y
|
||||
VIRTIO_BLK y
|
||||
DRM_VIRTIO_GPU y
|
||||
EXT4_FS y
|
||||
USBIP_CORE m
|
||||
USBIP_VHCI_HCD m
|
||||
USBIP_HOST m
|
||||
USBIP_VUDC m
|
||||
'';
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nxp-imx";
|
||||
repo = "linux-imx";
|
||||
# tag: lf-6.1.55-2.2.0
|
||||
rev = "770c5fe2c1d1529fae21b7043911cd50c6cf087e";
|
||||
sha256 = "sha256-tIWt75RUrjB6KmUuAYBVyAC1dmVGSUAgqV5ROJh3xU0=";
|
||||
};
|
||||
}
|
||||
// (args.argsOverride or { })
|
||||
)
|
||||
# https://github.com/NixOS/nixpkgs/pull/366004
|
||||
# introduced a breaking change that if a module is declared but it is not being used it will faill.
|
||||
ignoreConfigErrors = true;
|
||||
}
|
||||
|
||||
@@ -1,67 +1,13 @@
|
||||
{ pkgs }:
|
||||
let
|
||||
python3 = pkgs.buildPackages.python3;
|
||||
toolchain = pkgs.gcc9Stdenv.cc;
|
||||
binutils = pkgs.gcc9Stdenv.cc.bintools.bintools_bin;
|
||||
cpp = pkgs.gcc;
|
||||
in
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
pkgs.callPackage ../../common/bsp/imx-optee-builder.nix {
|
||||
pname = "imx8mq-optee-os";
|
||||
version = "lf-6.1.55-2.2.0";
|
||||
|
||||
nativeBuildInputs = [
|
||||
python3
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
pycryptodomex
|
||||
pyelftools
|
||||
cryptography
|
||||
];
|
||||
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://github.com/nxp-imx/imx-optee-os.git";
|
||||
rev = "a303fc80f7c4bd713315687a1fa1d6ed136e78ee";
|
||||
sha256 = "sha256-OpyG812DX0c06bRZPKWB2cNu6gtZCOvewDhsKgrGB+s=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace scripts/arm32_sysreg.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace scripts/gen_tee_bin.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace scripts/pem_to_pub_c.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace ta/pkcs11/scripts/verify-helpers.sh \
|
||||
--replace '/bin/bash' '${pkgs.bash}/bin/bash'
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp
|
||||
'';
|
||||
|
||||
makeFlags = [
|
||||
"PLATFORM=imx"
|
||||
"PLATFORM_FLAVOR=mx8mqevk"
|
||||
"CFG_ARM64_core=y"
|
||||
"CFG_TEE_TA_LOG_LEVEL=0"
|
||||
"CFG_TEE_CORE_LOG_LEVEL=0"
|
||||
"CROSS_COMPILE=${toolchain}/bin/${toolchain.targetPrefix}"
|
||||
"CROSS_COMPILE64=${toolchain}/bin/${toolchain.targetPrefix}"
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp ./out/arm-plat-imx/core/tee-raw.bin $out/tee.bin
|
||||
'';
|
||||
platformFlavor = "mx8mqevk";
|
||||
}
|
||||
|
||||
@@ -1,91 +1,17 @@
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
bison,
|
||||
dtc,
|
||||
fetchgit,
|
||||
flex,
|
||||
gnutls,
|
||||
libuuid,
|
||||
ncurses,
|
||||
openssl,
|
||||
which,
|
||||
perl,
|
||||
buildPackages,
|
||||
}:
|
||||
let
|
||||
ubsrc = fetchgit {
|
||||
{ pkgs, fetchgit }:
|
||||
pkgs.callPackage ../../common/bsp/imx-uboot-builder.nix {
|
||||
pname = "imx8mq-uboot";
|
||||
version = "2023.04";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://github.com/nxp-imx/uboot-imx.git";
|
||||
# tag: "lf-6.1.55-2.2.0"
|
||||
rev = "49b102d98881fc28af6e0a8af5ea2186c1d90a5f";
|
||||
sha256 = "sha256-1j6X82DqezEizeWoSS600XKPNwrQ4yT0vZuUImKAVVA=";
|
||||
};
|
||||
in
|
||||
(stdenv.mkDerivation {
|
||||
pname = "imx8mq-uboot";
|
||||
version = "2023.04";
|
||||
src = ubsrc;
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs tools
|
||||
patchShebangs scripts
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
bison
|
||||
flex
|
||||
openssl
|
||||
which
|
||||
ncurses
|
||||
libuuid
|
||||
gnutls
|
||||
openssl
|
||||
perl
|
||||
];
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
hardeningDisable = [ "all" ];
|
||||
enableParallelBuilding = true;
|
||||
|
||||
makeFlags = [
|
||||
"DTC=${lib.getExe buildPackages.dtc}"
|
||||
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="setenv ramdisk_addr_r 0x45000000; setenv fdt_addr_r 0x44000000; run distro_bootcmd; "
|
||||
CONFIG_CMD_BOOTEFI_SELFTEST=y
|
||||
CONFIG_CMD_BOOTEFI=y
|
||||
CONFIG_EFI_LOADER=y
|
||||
CONFIG_BLK=y
|
||||
CONFIG_PARTITIONS=y
|
||||
CONFIG_DM_DEVICE_REMOVE=n
|
||||
CONFIG_CMD_CACHE=y
|
||||
'';
|
||||
|
||||
passAsFile = [ "extraConfig" ];
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
make imx8mq_evk_defconfig
|
||||
cat $extraConfigPath >> .config
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out
|
||||
cp ./u-boot-nodtb.bin $out
|
||||
cp ./spl/u-boot-spl.bin $out
|
||||
cp ./arch/arm/dts/imx8mq-evk.dtb $out
|
||||
cp .config $out
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontStrip = true;
|
||||
})
|
||||
defconfig = "imx8mq_evk_defconfig";
|
||||
ramdiskAddr = "0x45000000";
|
||||
fdtAddr = "0x44000000";
|
||||
dtbPath = "./arch/arm/dts/imx8mq-evk.dtb";
|
||||
}
|
||||
|
||||
@@ -1,62 +1,24 @@
|
||||
{ lib, pkgs, ... }@args:
|
||||
with pkgs;
|
||||
buildLinux (
|
||||
args
|
||||
// rec {
|
||||
version = "6.12.3";
|
||||
name = "imx93-linux";
|
||||
{ pkgs, ... }@args:
|
||||
(pkgs.callPackage ../../common/bsp/imx-linux-builder.nix args) {
|
||||
pname = "imx93-linux";
|
||||
version = "6.12.3";
|
||||
|
||||
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
|
||||
modDirVersion = version;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "nxp-imx";
|
||||
repo = "linux-imx";
|
||||
# tag: lf-6.12.3
|
||||
rev = "37d02f4dcbbe6677dc9f5fc17f386c05d6a7bd7a";
|
||||
sha256 = "sha256-1oJMbHR8Ho0zNritEJ+TMOAyYHCW0vwhPkDfLctrZa8=";
|
||||
};
|
||||
|
||||
defconfig = "imx_v8_defconfig";
|
||||
# Platform-specific configuration (if any)
|
||||
extraConfig = "";
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/pull/366004
|
||||
# introduced a breaking change that if a module is declared but it is not being used it will faill.
|
||||
ignoreConfigErrors = true;
|
||||
# https://github.com/NixOS/nixpkgs/pull/366004
|
||||
# introduced a breaking change that if a module is declared but it is not being used it will faill.
|
||||
ignoreConfigErrors = true;
|
||||
|
||||
kernelPatches = [
|
||||
];
|
||||
|
||||
autoModules = false;
|
||||
|
||||
extraConfig = ''
|
||||
CRYPTO_TLS m
|
||||
TLS y
|
||||
MD_RAID0 m
|
||||
MD_RAID1 m
|
||||
MD_RAID10 m
|
||||
MD_RAID456 m
|
||||
DM_VERITY m
|
||||
LOGO y
|
||||
FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER n
|
||||
FB_EFI n
|
||||
EFI_STUB y
|
||||
EFI y
|
||||
VIRTIO y
|
||||
VIRTIO_PCI y
|
||||
VIRTIO_BLK y
|
||||
DRM_VIRTIO_GPU y
|
||||
EXT4_FS y
|
||||
USBIP_CORE m
|
||||
USBIP_VHCI_HCD m
|
||||
USBIP_HOST m
|
||||
USBIP_VUDC m
|
||||
'';
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nxp-imx";
|
||||
repo = "linux-imx";
|
||||
# tag: lf-6.12.3
|
||||
rev = "37d02f4dcbbe6677dc9f5fc17f386c05d6a7bd7a";
|
||||
sha256 = "sha256-1oJMbHR8Ho0zNritEJ+TMOAyYHCW0vwhPkDfLctrZa8=";
|
||||
};
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/nxp-imx/linux-imx";
|
||||
license = [ licenses.gpl2Only ];
|
||||
maintainers = with maintainers; [ govindsi ];
|
||||
platforms = [ "aarch64-linux" ];
|
||||
};
|
||||
}
|
||||
// (args.argsOverride or { })
|
||||
)
|
||||
extraMeta = {
|
||||
maintainers = with pkgs.lib.maintainers; [ govindsi ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,75 +1,17 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
}:
|
||||
let
|
||||
inherit (pkgs.buildPackages) python3;
|
||||
toolchain = pkgs.gccStdenv.cc;
|
||||
binutils = pkgs.gccStdenv.cc.bintools.bintools_bin;
|
||||
cpp = pkgs.gcc;
|
||||
in
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
{ pkgs }:
|
||||
pkgs.callPackage ../../common/bsp/imx-optee-builder.nix {
|
||||
pname = "imx93-optee-os";
|
||||
version = "lf-6.12.3_1.0.0";
|
||||
|
||||
nativeBuildInputs = [
|
||||
python3
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
pycryptodomex
|
||||
pyelftools
|
||||
cryptography
|
||||
];
|
||||
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://github.com/nxp-imx/imx-optee-os.git";
|
||||
rev = "8dd180b6d149c1e1314b5869697179f665bd9ca3";
|
||||
sha256 = "sha256-PoolRscdyeGevrOa5YymPTQ36edVvReMM5WshRTz+uk=";
|
||||
};
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/nxp-imx/imx-optee-os";
|
||||
license = [ licenses.bsd2 ];
|
||||
maintainers = with maintainers; [ govindsi ];
|
||||
platforms = [ "aarch64-linux" ];
|
||||
|
||||
platformFlavor = "imx-mx93evk";
|
||||
|
||||
meta = {
|
||||
maintainers = with pkgs.lib.maintainers; [ govindsi ];
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace scripts/arm32_sysreg.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace scripts/gen_tee_bin.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace scripts/pem_to_pub_c.py \
|
||||
--replace '/usr/bin/env python3' '${python3}/bin/python'
|
||||
substituteInPlace ta/pkcs11/scripts/verify-helpers.sh \
|
||||
--replace '/bin/bash' '${pkgs.bash}/bin/bash'
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar
|
||||
substituteInPlace mk/gcc.mk \
|
||||
--replace "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp
|
||||
'';
|
||||
|
||||
makeFlags = [
|
||||
"PLATFORM=imx-mx93evk"
|
||||
"CFG_ARM64_core=y"
|
||||
"CFG_TEE_TA_LOG_LEVEL=0"
|
||||
"CFG_TEE_CORE_LOG_LEVEL=0"
|
||||
"CROSS_COMPILE=${toolchain}/bin/${toolchain.targetPrefix}"
|
||||
"CROSS_COMPILE64=${toolchain}/bin/${toolchain.targetPrefix}"
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp ./out/arm-plat-imx/core/tee-raw.bin $out/tee.bin
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,93 +1,17 @@
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
bison,
|
||||
dtc,
|
||||
fetchgit,
|
||||
flex,
|
||||
gnutls,
|
||||
libuuid,
|
||||
ncurses,
|
||||
openssl,
|
||||
which,
|
||||
perl,
|
||||
buildPackages,
|
||||
efitools,
|
||||
}:
|
||||
let
|
||||
ubsrc = fetchgit {
|
||||
{ pkgs, fetchgit }:
|
||||
pkgs.callPackage ../../common/bsp/imx-uboot-builder.nix {
|
||||
pname = "imx93-uboot";
|
||||
version = "2024.04";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://github.com/nxp-imx/uboot-imx.git";
|
||||
#lf_v2024.04
|
||||
rev = "e3219a5a73445219df605d1492687918d488055c";
|
||||
sha256 = "sha256-6pXwgNzq4/XUUEmJ6sGC5pII4J5uMvlDPE9QJxjJJbQ=";
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "imx93-uboot";
|
||||
version = "2024.04";
|
||||
src = ubsrc;
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs tools
|
||||
patchShebangs scripts
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
bison
|
||||
flex
|
||||
openssl
|
||||
which
|
||||
ncurses
|
||||
libuuid
|
||||
gnutls
|
||||
openssl
|
||||
perl
|
||||
efitools
|
||||
];
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
hardeningDisable = [ "all" ];
|
||||
enableParallelBuilding = true;
|
||||
|
||||
makeFlags = [
|
||||
"DTC=${lib.getExe buildPackages.dtc}"
|
||||
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="setenv ramdisk_addr_r 0x85000000; setenv fdt_addr_r 0x84000000; run distro_bootcmd; "
|
||||
CONFIG_CMD_BOOTEFI_SELFTEST=y
|
||||
CONFIG_CMD_BOOTEFI=y
|
||||
CONFIG_EFI_LOADER=y
|
||||
CONFIG_BLK=y
|
||||
CONFIG_PARTITIONS=y
|
||||
CONFIG_DM_DEVICE_REMOVE=n
|
||||
CONFIG_CMD_CACHE=y
|
||||
'';
|
||||
|
||||
passAsFile = [ "extraConfig" ];
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
make imx93_11x11_evk_defconfig
|
||||
cat $extraConfigPath >> .config
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out
|
||||
cp ./u-boot-nodtb.bin $out
|
||||
cp ./spl/u-boot-spl.bin $out
|
||||
cp ./arch/arm/dts/imx93-11x11-evk.dtb $out
|
||||
cp .config $out
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontStrip = true;
|
||||
defconfig = "imx93_11x11_evk_defconfig";
|
||||
ramdiskAddr = "0x85000000";
|
||||
fdtAddr = "0x84000000";
|
||||
dtbPath = "./arch/arm/dts/imx93-11x11-evk.dtb";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user