@ -1,36 +1,39 @@
{ lib }:
rec {
pc = {
linux-kernel = {
name = " p c " ;
baseConfig = " d e f c o n f i g " ;
# Build whatever possible as a module, if not stated in the extra config.
autoModules = true ;
target = " b z I m a g e " ;
} ;
pcBase = {
name = " p c " ;
kernelBaseConfig = " d e f c o n f i g " ;
# Build whatever possible as a module, if not stated in the extra config.
kernelAutoModules = true ;
kernelTarget = " b z I m a g e " ;
} ;
pc64 = pcBase // { kernelArch = " x 8 6 _ 6 4 " ; } ;
pc32 = pcBase // { kernelArch = " i 3 8 6 " ; } ;
pc32_simplekernel = pc32 // {
kernelAutoModules = false ;
} ;
pc_simplekernel = lib . recursiveUpdate pc {
linux-kernel . autoModules = false ;
pc64 _simplekernel = pc64 // {
kernelA utoModules = false ;
} ;
powernv = {
linux-kernel = {
name = " P o w e r N V " ;
baseConfig = " p o w e r n v _ d e f c o n f i g " ;
target = " z I m a g e " ;
installTarget = " i n s t a l l " ;
file = " v m l i n u x " ;
autoModules = true ;
# avoid driver/FS trouble arising from unusual page size
extraConfig = ''
PPC_64K_PAGES n
PPC_4K_PAGES y
IPV6 y
'' ;
} ;
name = " P o w e r N V " ;
kernelArch = " p o w e r p c " ;
kernelBaseConfig = " p o w e r n v _ d e f c o n f i g " ;
kernelTarget = " z I m a g e " ;
kernelInstallTarget = " i n s t a l l " ;
kernelFile = " v m l i n u x " ;
kernelAutoModules = true ;
# avoid driver/FS trouble arising from unusual page size
kernelExtraConfig = ''
PPC_64K_PAGES n
PPC_4K_PAGES y
IPV6 y
'' ;
} ;
##
@ -38,121 +41,17 @@ rec {
##
pogoplug4 = {
linux-kernel = {
name = " p o g o p l u g 4 " ;
name = " p o g o p l u g 4 " ;
baseConfig = " m u l t i _ v 5 _ d e f c o n f i g " ;
autoModules = false ;
extraConfig = ''
# Ubi for the mtd
MTD_UBI y
UBIFS_FS y
UBIFS_FS_XATTR y
UBIFS_FS_ADVANCED_COMPR y
UBIFS_FS_LZO y
UBIFS_FS_ZLIB y
UBIFS_FS_DEBUG n
'' ;
makeFlags = [ " L O A D A D D R = 0 x 8 0 0 0 " ] ;
target = " u I m a g e " ;
# TODO reenable once manual-config's config actually builds a .dtb and this is checked to be working
#DTB = true;
} ;
gcc = {
arch = " a r m v 5 t e " ;
} ;
} ;
sheevaplug = {
linux-kernel = {
name = " s h e e v a p l u g " ;
baseConfig = " m u l t i _ v 5 _ d e f c o n f i g " ;
autoModules = false ;
extraConfig = ''
BLK_DEV_RAM y
BLK_DEV_INITRD y
BLK_DEV_CRYPTOLOOP m
BLK_DEV_DM m
DM_CRYPT m
MD y
REISERFS_FS m
BTRFS_FS m
XFS_FS m
JFS_FS m
EXT4_FS m
USB_STORAGE_CYPRESS_ATACB m
# mv cesa requires this sw fallback, for mv-sha1
CRYPTO_SHA1 y
# Fast crypto
CRYPTO_TWOFISH y
CRYPTO_TWOFISH_COMMON y
CRYPTO_BLOWFISH y
CRYPTO_BLOWFISH_COMMON y
IP_PNP y
IP_PNP_DHCP y
NFS_FS y
ROOT_NFS y
TUN m
NFS_V4 y
NFS_V4_1 y
NFS_FSCACHE y
NFSD m
NFSD_V2_ACL y
NFSD_V3 y
NFSD_V3_ACL y
NFSD_V4 y
NETFILTER y
IP_NF_IPTABLES y
IP_NF_FILTER y
IP_NF_MATCH_ADDRTYPE y
IP_NF_TARGET_LOG y
IP_NF_MANGLE y
IPV6 m
VLAN_8021Q m
CIFS y
CIFS_XATTR y
CIFS_POSIX y
CIFS_FSCACHE y
CIFS_ACL y
WATCHDOG y
WATCHDOG_CORE y
ORION_WATCHDOG m
ZRAM m
NETCONSOLE m
# Disable OABI to have seccomp_filter (required for systemd)
# https://github.com/raspberrypi/firmware/issues/651
OABI_COMPAT n
# Fail to build
DRM n
SCSI_ADVANSYS n
USB_ISP1362_HCD n
SND_SOC n
SND_ALI5451 n
FB_SAVAGE n
SCSI_NSP32 n
ATA_SFF n
SUNGEM n
IRDA n
ATM_HE n
SCSI_ACARD n
BLK_DEV_CMD640_ENHANCED n
FUSE_FS m
# systemd uses cgroups
CGROUPS y
# Latencytop
LATENCYTOP y
kernelBaseConfig = " m u l t i _ v 5 _ d e f c o n f i g " ;
kernelArch = " a r m " ;
kernelAutoModules = false ;
kernelExtraConfig =
''
# Ubi for the mtd
MTD_UBI y
UBIFS_FS y
@ -161,36 +60,137 @@ rec {
UBIFS_FS_LZO y
UBIFS_FS_ZLIB y
UBIFS_FS_DEBUG n
# Kdb, for kernel troubles
KGDB y
KGDB_SERIAL_CONSOLE y
KGDB_KDB y
'' ;
makeFlags = [ " L O A D A D D R = 0 x 0 2 0 0 0 0 0 " ] ;
target = " u I m a g e " ;
DTB = true ; # Beyond 3.10
} ;
kernelMakeFlags = [ " L O A D A D D R = 0 x 8 0 0 0 " ] ;
kernelTarget = " u I m a g e " ;
# TODO reenable once manual-config's config actually builds a .dtb and this is checked to be working
#kernelDTB = true;
} ;
sheevaplug = {
name = " s h e e v a p l u g " ;
kernelBaseConfig = " m u l t i _ v 5 _ d e f c o n f i g " ;
kernelArch = " a r m " ;
kernelAutoModules = false ;
kernelExtraConfig = ''
BLK_DEV_RAM y
BLK_DEV_INITRD y
BLK_DEV_CRYPTOLOOP m
BLK_DEV_DM m
DM_CRYPT m
MD y
REISERFS_FS m
BTRFS_FS m
XFS_FS m
JFS_FS m
EXT4_FS m
USB_STORAGE_CYPRESS_ATACB m
# mv cesa requires this sw fallback, for mv-sha1
CRYPTO_SHA1 y
# Fast crypto
CRYPTO_TWOFISH y
CRYPTO_TWOFISH_COMMON y
CRYPTO_BLOWFISH y
CRYPTO_BLOWFISH_COMMON y
IP_PNP y
IP_PNP_DHCP y
NFS_FS y
ROOT_NFS y
TUN m
NFS_V4 y
NFS_V4_1 y
NFS_FSCACHE y
NFSD m
NFSD_V2_ACL y
NFSD_V3 y
NFSD_V3_ACL y
NFSD_V4 y
NETFILTER y
IP_NF_IPTABLES y
IP_NF_FILTER y
IP_NF_MATCH_ADDRTYPE y
IP_NF_TARGET_LOG y
IP_NF_MANGLE y
IPV6 m
VLAN_8021Q m
CIFS y
CIFS_XATTR y
CIFS_POSIX y
CIFS_FSCACHE y
CIFS_ACL y
WATCHDOG y
WATCHDOG_CORE y
ORION_WATCHDOG m
ZRAM m
NETCONSOLE m
# Disable OABI to have seccomp_filter (required for systemd)
# https://github.com/raspberrypi/firmware/issues/651
OABI_COMPAT n
# Fail to build
DRM n
SCSI_ADVANSYS n
USB_ISP1362_HCD n
SND_SOC n
SND_ALI5451 n
FB_SAVAGE n
SCSI_NSP32 n
ATA_SFF n
SUNGEM n
IRDA n
ATM_HE n
SCSI_ACARD n
BLK_DEV_CMD640_ENHANCED n
FUSE_FS m
# systemd uses cgroups
CGROUPS y
# Latencytop
LATENCYTOP y
# Ubi for the mtd
MTD_UBI y
UBIFS_FS y
UBIFS_FS_XATTR y
UBIFS_FS_ADVANCED_COMPR y
UBIFS_FS_LZO y
UBIFS_FS_ZLIB y
UBIFS_FS_DEBUG n
# Kdb, for kernel troubles
KGDB y
KGDB_SERIAL_CONSOLE y
KGDB_KDB y
'' ;
kernelMakeFlags = [ " L O A D A D D R = 0 x 0 2 0 0 0 0 0 " ] ;
kernelTarget = " u I m a g e " ;
kernelDTB = true ; # Beyond 3.10
gcc = {
arch = " a r m v 5 t e " ;
} ;
} ;
raspberrypi = {
linux-kernel = {
name = " r a s p b e r r y p i " ;
baseConfig = " b c m 2 8 3 5 _ d e f c o n f i g " ;
DTB = true ;
autoModules = true ;
preferBuiltin = true ;
extraConfig = ''
# Disable OABI to have seccomp_filter (required for systemd)
# https://github.com/raspberrypi/firmware/issues/651
OABI_COMPAT n
'' ;
target = " z I m a g e " ;
} ;
name = " r a s p b e r r y p i " ;
kernelBaseConfig = " b c m 2 8 3 5 _ d e f c o n f i g " ;
kernelDTB = true ;
kernelArch = " a r m " ;
kernelAutoModules = true ;
kernelPreferBuiltin = true ;
kernelExtraConfig = ''
# Disable OABI to have seccomp_filter (required for systemd)
# https://github.com/raspberrypi/firmware/issues/651
OABI_COMPAT n
'' ;
kernelTarget = " z I m a g e " ;
gcc = {
arch = " a r m v 6 " ;
fpu = " v f p " ;
@ -201,15 +201,13 @@ rec {
raspberrypi2 = armv7l-hf-multiplatform ;
zero-gravitas = {
linux-kernel = {
name = " z e r o - g r a v i t a s " ;
baseConfig = " z e r o - g r a v i t a s _ d e f c o n f i g " ;
# Target verified by checking /boot on reMarkable 1 device
target = " z I m a g e " ;
autoModules = false ;
DTB = true ;
} ;
name = " z e r o - g r a v i t a s " ;
kernelBaseConfig = " z e r o - g r a v i t a s _ d e f c o n f i g " ;
kernelArch = " a r m " ;
# kernelTarget verified by checking /boot on reMarkable 1 device
kernelTarget = " z I m a g e " ;
kernelAutoModules = false ;
kernelDTB = true ;
gcc = {
fpu = " n e o n " ;
cpu = " c o r t e x - a 9 " ;
@ -217,15 +215,13 @@ rec {
} ;
zero-sugar = {
linux-kernel = {
name = " z e r o - s u g a r " ;
baseConfig = " z e r o - s u g a r _ d e f c o n f i g " ;
DTB = true ;
autoModules = false ;
preferBuiltin = true ;
target = " z I m a g e " ;
} ;
name = " z e r o - s u g a r " ;
kernelBaseConfig = " z e r o - s u g a r _ d e f c o n f i g " ;
kernelArch = " a r m " ;
kernelDTB = true ;
kernelAutoModules = false ;
kernelPreferBuiltin = true ;
kernelTarget = " z I m a g e " ;
gcc = {
cpu = " c o r t e x - a 7 " ;
fpu = " n e o n - v f p v 4 " ;
@ -233,7 +229,7 @@ rec {
} ;
} ;
scaleway-c1 = lib . recursiveUpdate armv7l-hf-multiplatform {
scaleway-c1 = armv7l-hf-multiplatform // {
gcc = {
cpu = " c o r t e x - a 9 " ;
fpu = " v f p v 3 " ;
@ -241,11 +237,12 @@ rec {
} ;
utilite = {
linux-kernel = {
name = " u t i l i t e " ;
maseConfig = " m u l t i _ v 7 _ d e f c o n f i g " ;
autoModules = false ;
extraConfig = ''
name = " u t i l i t e " ;
kernelBaseConfig = " m u l t i _ v 7 _ d e f c o n f i g " ;
kernelArch = " a r m " ;
kernelAutoModules = false ;
kernelExtraConfig =
''
# Ubi for the mtd
MTD_UBI y
UBIFS_FS y
@ -255,37 +252,35 @@ rec {
UBIFS_FS_ZLIB y
UBIFS_FS_DEBUG n
'' ;
makeFlags = [ " L O A D A D D R = 0 x 1 0 8 0 0 0 0 0 " ] ;
target = " u I m a g e " ;
DTB = true ;
} ;
kernelMakeFlags = [ " L O A D A D D R = 0 x 1 0 8 0 0 0 0 0 " ] ;
kernelTarget = " u I m a g e " ;
kernelDTB = true ;
gcc = {
cpu = " c o r t e x - a 9 " ;
fpu = " n e o n " ;
} ;
} ;
guruplug = lib . recursiveUpdate sheevaplug {
guruplug = sheevaplug // {
# Define `CONFIG_MACH_GURUPLUG' (see
# <http://kerneltrap.org/mailarchive/git-commits-head/2010/5/19/33618>)
# and other GuruPlug-specific things. Requires the `guruplug-defconfig'
# patch.
linux-kernel . baseConfig = " g u r u p l u g _ d e f c o n f i g " ;
kernelBaseConfig = " g u r u p l u g _ d e f c o n f i g " ;
} ;
beaglebone = lib . recursiveUpdate armv7l-hf-multiplatform {
linux-kernel = {
name = " b e a g l e b o n e " ;
baseConfig = " b b . o r g _ d e f c o n f i g " ;
autoModules = false ;
extraConfig = " " ; # TBD kernel config
target = " z I m a g e " ;
} ;
beaglebone = armv7l-hf-multiplatform // {
name = " b e a g l e b o n e " ;
kernelBaseConfig = " b b . o r g _ d e f c o n f i g " ;
kernelAutoModules = false ;
kernelExtraConfig = " " ; # TBD kernel config
kernelTarget = " z I m a g e " ;
} ;
# https://developer.android.com/ndk/guides/abis#v7a
armv7a-android = {
linux-kernel . name = " a r m e a b i - v 7 a " ;
armv7a-android = {
name = " a r m e a b i - v 7 a " ;
gcc = {
arch = " a r m v 7 - a " ;
float-abi = " s o f t f p " ;
@ -294,31 +289,29 @@ rec {
} ;
armv7l-hf-multiplatform = {
linux-kernel = {
name = " a r m v 7 l - h f - m u l t i p l a t f o r m " ;
Major = " 2 . 6 " ; # Using "2.6" enables 2.6 kernel syscalls in glibc.
baseConfig = " m u l t i _ v 7 _ d e f c o n f i g " ;
DTB = true ;
autoModules = true ;
PreferBuiltin = true ;
target = " z I m a g e " ;
extraConfig = ''
# Serial port for Raspberry Pi 3. Upstream forgot to add it to the ARMv7 defconfig.
SERIAL_8250_BCM2835AUX y
SERIAL_8250_EXTENDED y
SERIAL_8250_SHARE_IRQ y
# Fix broken sunxi-sid nvmem driver.
TI_CPTS y
# Hangs ODROID-XU4
ARM_BIG_LITTLE_CPUIDLE n
# Disable OABI to have seccomp_filter (required for systemd)
# https://github.com/raspberrypi/firmware/issues/651
OABI_COMPAT n
'' ;
} ;
name = " a r m v 7 l - h f - m u l t i p l a t f o r m " ;
kernelBaseConfig = " m u l t i _ v 7 _ d e f c o n f i g " ;
kernelArch = " a r m " ;
kernelDTB = true ;
kernelAutoModules = true ;
kernelPreferBuiltin = true ;
kernelTarget = " z I m a g e " ;
kernelExtraConfig = ''
# Serial port for Raspberry Pi 3. Upstream forgot to add it to the ARMv7 defconfig.
SERIAL_8250_BCM2835AUX y
SERIAL_8250_EXTENDED y
SERIAL_8250_SHARE_IRQ y
# Fix broken sunxi-sid nvmem driver.
TI_CPTS y
# Hangs ODROID-XU4
ARM_BIG_LITTLE_CPUIDLE n
# Disable OABI to have seccomp_filter (required for systemd)
# https://github.com/raspberrypi/firmware/issues/651
OABI_COMPAT n
'' ;
gcc = {
# Some table about fpu flags:
# http://community.arm.com/servlet/JiveServlet/showImage/38-1981-3827/blogentry-103749-004812900+1365712953_thumb.png
@ -343,35 +336,34 @@ rec {
} ;
aarch64-multiplatform = {
linux-kernel = {
name = " a a r c h 6 4 - m u l t i p l a t f o r m " ;
baseConfig = " d e f c o n f i g " ;
DTB = true ;
autoModules = true ;
preferBuiltin = true ;
extraConfig = ''
# Raspberry Pi 3 stuff. Not needed for s >= 4.10.
ARCH_BCM2835 y
BCM2835_MBOX y
BCM2835_WDT y
RASPBERRYPI_FIRMWARE y
RASPBERRYPI_POWER y
SERIAL_8250_BCM2835AUX y
SERIAL_8250_EXTENDED y
SERIAL_8250_SHARE_IRQ y
# Cavium ThunderX stuff.
PCI_HOST_THUNDER_ECAM y
# Nvidia Tegra stuff.
PCI_TEGRA y
# The default (=y) forces us to have the XHCI firmware available in initrd,
# which our initrd builder can't currently do easily.
USB_XHCI_TEGRA m
'' ;
target = " I m a g e " ;
} ;
name = " a a r c h 6 4 - m u l t i p l a t f o r m " ;
kernelBaseConfig = " d e f c o n f i g " ;
kernelArch = " a r m 6 4 " ;
kernelDTB = true ;
kernelAutoModules = true ;
kernelPreferBuiltin = true ;
kernelExtraConfig = ''
# Raspberry Pi 3 stuff. Not needed for kernels >= 4.10.
ARCH_BCM2835 y
BCM2835_MBOX y
BCM2835_WDT y
RASPBERRYPI_FIRMWARE y
RASPBERRYPI_POWER y
SERIAL_8250_BCM2835AUX y
SERIAL_8250_EXTENDED y
SERIAL_8250_SHARE_IRQ y
# Cavium ThunderX stuff.
PCI_HOST_THUNDER_ECAM y
# Nvidia Tegra stuff.
PCI_TEGRA y
# The default (=y) forces us to have the XHCI firmware available in initrd,
# which our initrd builder can't currently do easily.
USB_XHCI_TEGRA m
'' ;
kernelTarget = " I m a g e " ;
gcc = {
arch = " a r m v 8 - a " ;
} ;
@ -382,9 +374,8 @@ rec {
##
ben_nanonote = {
linux-kernel = {
name = " b e n _ n a n o n o t e " ;
} ;
name = " b e n _ n a n o n o t e " ;
kernelArch = " m i p s " ;
gcc = {
arch = " m i p s 3 2 " ;
float = " s o f t " ;
@ -392,76 +383,75 @@ rec {
} ;
fuloong2f_n32 = {
linux-kernel = {
name = " f u l o o n g 2 f _ n 3 2 " ;
baseConfig = " l e m o t e 2 f _ d e f c o n f i g " ;
autoModules = false ;
extraConfig = ''
MIGRATION n
COMPACTION n
# nixos mounts some cgroup
CGROUPS y
BLK_DEV_RAM y
BLK_DEV_INITRD y
BLK_DEV_CRYPTOLOOP m
BLK_DEV_DM m
DM_CRYPT m
MD y
REISERFS_FS m
EXT4_FS m
USB_STORAGE_CYPRESS_ATACB m
IP_PNP y
IP_PNP_DHCP y
IP_PNP_BOOTP y
NFS_FS y
ROOT_NFS y
TUN m
NFS_V4 y
NFS_V4_1 y
NFS_FSCACHE y
NFSD m
NFSD_V2_ACL y
NFSD_V3 y
NFSD_V3_ACL y
NFSD_V4 y
# Fail to build
DRM n
SCSI_ADVANSYS n
USB_ISP1362_HCD n
SND_SOC n
SND_ALI5451 n
FB_SAVAGE n
SCSI_NSP32 n
ATA_SFF n
SUNGEM n
IRDA n
ATM_HE n
SCSI_ACARD n
BLK_DEV_CMD640_ENHANCED n
FUSE_FS m
# Needed for udev >= 150
SYSFS_DEPRECATED_V2 n
VGA_CONSOLE n
VT_HW_CONSOLE_BINDING y
SERIAL_8250_CONSOLE y
FRAMEBUFFER_CONSOLE y
EXT2_FS y
EXT3_FS y
REISERFS_FS y
MAGIC_SYSRQ y
# The kernel doesn't boot at all, with FTRACE
FTRACE n
'' ;
target = " v m l i n u x " ;
} ;
name = " f u l o o n g 2 f _ n 3 2 " ;
kernelBaseConfig = " l e m o t e 2 f _ d e f c o n f i g " ;
kernelArch = " m i p s " ;
kernelAutoModules = false ;
kernelExtraConfig = ''
MIGRATION n
COMPACTION n
# nixos mounts some cgroup
CGROUPS y
BLK_DEV_RAM y
BLK_DEV_INITRD y
BLK_DEV_CRYPTOLOOP m
BLK_DEV_DM m
DM_CRYPT m
MD y
REISERFS_FS m
EXT4_FS m
USB_STORAGE_CYPRESS_ATACB m
IP_PNP y
IP_PNP_DHCP y
IP_PNP_BOOTP y
NFS_FS y
ROOT_NFS y
TUN m
NFS_V4 y
NFS_V4_1 y
NFS_FSCACHE y
NFSD m
NFSD_V2_ACL y
NFSD_V3 y
NFSD_V3_ACL y
NFSD_V4 y
# Fail to build
DRM n
SCSI_ADVANSYS n
USB_ISP1362_HCD n
SND_SOC n
SND_ALI5451 n
FB_SAVAGE n
SCSI_NSP32 n
ATA_SFF n
SUNGEM n
IRDA n
ATM_HE n
SCSI_ACARD n
BLK_DEV_CMD640_ENHANCED n
FUSE_FS m
# Needed for udev >= 150
SYSFS_DEPRECATED_V2 n
VGA_CONSOLE n
VT_HW_CONSOLE_BINDING y
SERIAL_8250_CONSOLE y
FRAMEBUFFER_CONSOLE y
EXT2_FS y
EXT3_FS y
REISERFS_FS y
MAGIC_SYSRQ y
# The kernel doesn't boot at all, with FTRACE
FTRACE n
'' ;
kernelTarget = " v m l i n u x " ;
gcc = {
arch = " l o o n g s o n 2 f " ;
float = " h a r d " ;
@ -474,36 +464,34 @@ rec {
##
riscv-multiplatform = {
linux-kernel = {
name = " r i s c v - m u l t i p l a t f o r m " ;
target = " v m l i n u x " ;
autoModules = true ;
baseConfig = " d e f c o n f i g " ;
extraConfig = ''
FTRACE n
SERIAL_OF_PLATFORM y
'' ;
} ;
name = " r i s c v - m u l t i p l a t f o r m " ;
kernelArch = " r i s c v " ;
kernelTarget = " v m l i n u x " ;
kernelAutoModules = true ;
kernelBaseConfig = " d e f c o n f i g " ;
kernelExtraConfig = ''
FTRACE n
SERIAL_OF_PLATFORM y
'' ;
} ;
select = platform :
# x86
/* */ if platform . isx86 then pc
/* */ if platform . isx86_32 then pc32
else if platform . isx86_64 then pc64
# ARM
else if platform . isAarch32 then let
version = platform . parsed . cpu . version or null ;
in if version == null then pc
in if version == null then pcBase
else if lib . versionOlder version " 6 " then sheevaplug
else if lib . versionOlder version " 7 " then raspberrypi
else armv7l-hf-multiplatform
else if platform . isAarch64 then aarch64-multiplatform
else if platform . isRiscV then riscv-multiplatform
else if platform . parsed . cpu == lib . systems . parse . cpuTypes . mipsel then fuloong2f_n32
else if platform . parsed . cpu == lib . systems . parse . cpuTypes . powerpc64le then powernv
else pc ;
else pcBase ;
}