1{ lib }:
2rec {
3 pcBase = {
4 name = "pc";
5 kernelBaseConfig = "defconfig";
6 # Build whatever possible as a module, if not stated in the extra config.
7 kernelAutoModules = true;
8 kernelTarget = "bzImage";
9 };
10
11 pc64 = pcBase // { kernelArch = "x86_64"; };
12
13 pc32 = pcBase // { kernelArch = "i386"; };
14
15 pc32_simplekernel = pc32 // {
16 kernelAutoModules = false;
17 };
18
19 pc64_simplekernel = pc64 // {
20 kernelAutoModules = false;
21 };
22
23 pogoplug4 = {
24 name = "pogoplug4";
25
26 gcc = {
27 arch = "armv5te";
28 float = "soft";
29 };
30
31 kernelMajor = "2.6";
32 kernelBaseConfig = "multi_v5_defconfig";
33 kernelArch = "arm";
34 kernelAutoModules = false;
35 kernelExtraConfig =
36 ''
37 # Ubi for the mtd
38 MTD_UBI y
39 UBIFS_FS y
40 UBIFS_FS_XATTR y
41 UBIFS_FS_ADVANCED_COMPR y
42 UBIFS_FS_LZO y
43 UBIFS_FS_ZLIB y
44 UBIFS_FS_DEBUG n
45 '';
46 kernelMakeFlags = [ "LOADADDR=0x8000" ];
47 kernelTarget = "uImage";
48 # TODO reenable once manual-config's config actually builds a .dtb and this is checked to be working
49 #kernelDTB = true;
50 };
51
52 sheevaplug = {
53 name = "sheevaplug";
54 kernelMajor = "2.6";
55 kernelBaseConfig = "multi_v5_defconfig";
56 kernelArch = "arm";
57 kernelAutoModules = false;
58 kernelExtraConfig = ''
59 BLK_DEV_RAM y
60 BLK_DEV_INITRD y
61 BLK_DEV_CRYPTOLOOP m
62 BLK_DEV_DM m
63 DM_CRYPT m
64 MD y
65 REISERFS_FS m
66 BTRFS_FS m
67 XFS_FS m
68 JFS_FS m
69 EXT4_FS m
70 USB_STORAGE_CYPRESS_ATACB m
71
72 # mv cesa requires this sw fallback, for mv-sha1
73 CRYPTO_SHA1 y
74 # Fast crypto
75 CRYPTO_TWOFISH y
76 CRYPTO_TWOFISH_COMMON y
77 CRYPTO_BLOWFISH y
78 CRYPTO_BLOWFISH_COMMON y
79
80 IP_PNP y
81 IP_PNP_DHCP y
82 NFS_FS y
83 ROOT_NFS y
84 TUN m
85 NFS_V4 y
86 NFS_V4_1 y
87 NFS_FSCACHE y
88 NFSD m
89 NFSD_V2_ACL y
90 NFSD_V3 y
91 NFSD_V3_ACL y
92 NFSD_V4 y
93 NETFILTER y
94 IP_NF_IPTABLES y
95 IP_NF_FILTER y
96 IP_NF_MATCH_ADDRTYPE y
97 IP_NF_TARGET_LOG y
98 IP_NF_MANGLE y
99 IPV6 m
100 VLAN_8021Q m
101
102 CIFS y
103 CIFS_XATTR y
104 CIFS_POSIX y
105 CIFS_FSCACHE y
106 CIFS_ACL y
107
108 WATCHDOG y
109 WATCHDOG_CORE y
110 ORION_WATCHDOG m
111
112 ZRAM m
113 NETCONSOLE m
114
115 # Disable OABI to have seccomp_filter (required for systemd)
116 # https://github.com/raspberrypi/firmware/issues/651
117 OABI_COMPAT n
118
119 # Fail to build
120 DRM n
121 SCSI_ADVANSYS n
122 USB_ISP1362_HCD n
123 SND_SOC n
124 SND_ALI5451 n
125 FB_SAVAGE n
126 SCSI_NSP32 n
127 ATA_SFF n
128 SUNGEM n
129 IRDA n
130 ATM_HE n
131 SCSI_ACARD n
132 BLK_DEV_CMD640_ENHANCED n
133
134 FUSE_FS m
135
136 # systemd uses cgroups
137 CGROUPS y
138
139 # Latencytop
140 LATENCYTOP y
141
142 # Ubi for the mtd
143 MTD_UBI y
144 UBIFS_FS y
145 UBIFS_FS_XATTR y
146 UBIFS_FS_ADVANCED_COMPR y
147 UBIFS_FS_LZO y
148 UBIFS_FS_ZLIB y
149 UBIFS_FS_DEBUG n
150
151 # Kdb, for kernel troubles
152 KGDB y
153 KGDB_SERIAL_CONSOLE y
154 KGDB_KDB y
155 '';
156 kernelMakeFlags = [ "LOADADDR=0x0200000" ];
157 kernelTarget = "uImage";
158 kernelDTB = true; # Beyond 3.10
159 gcc = {
160 arch = "armv5te";
161 float = "soft";
162 };
163 };
164
165 raspberrypi = {
166 name = "raspberrypi";
167 kernelMajor = "2.6";
168 kernelBaseConfig = "bcmrpi_defconfig";
169 kernelDTB = true;
170 kernelArch = "arm";
171 kernelAutoModules = false;
172 kernelExtraConfig = ''
173 BLK_DEV_RAM y
174 BLK_DEV_INITRD y
175 BLK_DEV_CRYPTOLOOP m
176 BLK_DEV_DM m
177 DM_CRYPT m
178 MD y
179 REISERFS_FS m
180 BTRFS_FS y
181 XFS_FS m
182 JFS_FS y
183 EXT4_FS y
184
185 IP_PNP y
186 IP_PNP_DHCP y
187 NFS_FS y
188 ROOT_NFS y
189 TUN m
190 NFS_V4 y
191 NFS_V4_1 y
192 NFS_FSCACHE y
193 NFSD m
194 NFSD_V2_ACL y
195 NFSD_V3 y
196 NFSD_V3_ACL y
197 NFSD_V4 y
198 NETFILTER y
199 IP_NF_IPTABLES y
200 IP_NF_FILTER y
201 IP_NF_MATCH_ADDRTYPE y
202 IP_NF_TARGET_LOG y
203 IP_NF_MANGLE y
204 IPV6 m
205 VLAN_8021Q m
206
207 CIFS y
208 CIFS_XATTR y
209 CIFS_POSIX y
210 CIFS_FSCACHE y
211 CIFS_ACL y
212
213 ZRAM m
214
215 # Disable OABI to have seccomp_filter (required for systemd)
216 # https://github.com/raspberrypi/firmware/issues/651
217 OABI_COMPAT n
218
219 # Fail to build
220 DRM n
221 SCSI_ADVANSYS n
222 USB_ISP1362_HCD n
223 SND_SOC n
224 SND_ALI5451 n
225 FB_SAVAGE n
226 SCSI_NSP32 n
227 ATA_SFF n
228 SUNGEM n
229 IRDA n
230 ATM_HE n
231 SCSI_ACARD n
232 BLK_DEV_CMD640_ENHANCED n
233
234 FUSE_FS m
235
236 # nixos mounts some cgroup
237 CGROUPS y
238
239 # Latencytop
240 LATENCYTOP y
241 '';
242 kernelTarget = "zImage";
243 gcc = {
244 arch = "armv6";
245 fpu = "vfp";
246 float = "hard";
247 # TODO(@Ericson2314) what is this and is it a good idea? It was
248 # used in some cross compilation examples but not others.
249 #
250 # abi = "aapcs-linux";
251 };
252 };
253
254 raspberrypi2 = armv7l-hf-multiplatform // {
255 name = "raspberrypi2";
256 kernelBaseConfig = "bcm2709_defconfig";
257 kernelDTB = true;
258 kernelAutoModules = false;
259 kernelExtraConfig = ''
260 BLK_DEV_RAM y
261 BLK_DEV_INITRD y
262 BLK_DEV_CRYPTOLOOP m
263 BLK_DEV_DM m
264 DM_CRYPT m
265 MD y
266 REISERFS_FS m
267 BTRFS_FS y
268 XFS_FS m
269 JFS_FS y
270 EXT4_FS y
271
272 IP_PNP y
273 IP_PNP_DHCP y
274 NFS_FS y
275 ROOT_NFS y
276 TUN m
277 NFS_V4 y
278 NFS_V4_1 y
279 NFS_FSCACHE y
280 NFSD m
281 NFSD_V2_ACL y
282 NFSD_V3 y
283 NFSD_V3_ACL y
284 NFSD_V4 y
285 NETFILTER y
286 IP_NF_IPTABLES y
287 IP_NF_FILTER y
288 IP_NF_MATCH_ADDRTYPE y
289 IP_NF_TARGET_LOG y
290 IP_NF_MANGLE y
291 IPV6 m
292 VLAN_8021Q m
293
294 CIFS y
295 CIFS_XATTR y
296 CIFS_POSIX y
297 CIFS_FSCACHE y
298 CIFS_ACL y
299
300 ZRAM m
301
302 # Disable OABI to have seccomp_filter (required for systemd)
303 # https://github.com/raspberrypi/firmware/issues/651
304 OABI_COMPAT n
305
306 # Fail to build
307 DRM n
308 SCSI_ADVANSYS n
309 USB_ISP1362_HCD n
310 SND_SOC n
311 SND_ALI5451 n
312 FB_SAVAGE n
313 SCSI_NSP32 n
314 ATA_SFF n
315 SUNGEM n
316 IRDA n
317 ATM_HE n
318 SCSI_ACARD n
319 BLK_DEV_CMD640_ENHANCED n
320
321 FUSE_FS m
322
323 # nixos mounts some cgroup
324 CGROUPS y
325
326 # Latencytop
327 LATENCYTOP y
328
329 # Disable the common config Xen, it doesn't build on ARM
330 XEN? n
331 '';
332 kernelTarget = "zImage";
333 };
334
335 scaleway-c1 = armv7l-hf-multiplatform // {
336 gcc = {
337 cpu = "cortex-a9";
338 fpu = "vfpv3";
339 float = "hard";
340 };
341 };
342
343 utilite = {
344 name = "utilite";
345 kernelMajor = "2.6";
346 kernelBaseConfig = "multi_v7_defconfig";
347 kernelArch = "arm";
348 kernelAutoModules = false;
349 kernelExtraConfig =
350 ''
351 # Ubi for the mtd
352 MTD_UBI y
353 UBIFS_FS y
354 UBIFS_FS_XATTR y
355 UBIFS_FS_ADVANCED_COMPR y
356 UBIFS_FS_LZO y
357 UBIFS_FS_ZLIB y
358 UBIFS_FS_DEBUG n
359 '';
360 kernelMakeFlags = [ "LOADADDR=0x10800000" ];
361 kernelTarget = "uImage";
362 kernelDTB = true;
363 gcc = {
364 cpu = "cortex-a9";
365 fpu = "neon";
366 float = "hard";
367 };
368 };
369
370 guruplug = sheevaplug // {
371 # Define `CONFIG_MACH_GURUPLUG' (see
372 # <http://kerneltrap.org/mailarchive/git-commits-head/2010/5/19/33618>)
373 # and other GuruPlug-specific things. Requires the `guruplug-defconfig'
374 # patch.
375
376 kernelBaseConfig = "guruplug_defconfig";
377 };
378
379 fuloong2f_n32 = {
380 name = "fuloong2f_n32";
381 kernelMajor = "2.6";
382 kernelBaseConfig = "lemote2f_defconfig";
383 kernelArch = "mips";
384 kernelAutoModules = false;
385 kernelExtraConfig = ''
386 MIGRATION n
387 COMPACTION n
388
389 # nixos mounts some cgroup
390 CGROUPS y
391
392 BLK_DEV_RAM y
393 BLK_DEV_INITRD y
394 BLK_DEV_CRYPTOLOOP m
395 BLK_DEV_DM m
396 DM_CRYPT m
397 MD y
398 REISERFS_FS m
399 EXT4_FS m
400 USB_STORAGE_CYPRESS_ATACB m
401
402 IP_PNP y
403 IP_PNP_DHCP y
404 IP_PNP_BOOTP y
405 NFS_FS y
406 ROOT_NFS y
407 TUN m
408 NFS_V4 y
409 NFS_V4_1 y
410 NFS_FSCACHE y
411 NFSD m
412 NFSD_V2_ACL y
413 NFSD_V3 y
414 NFSD_V3_ACL y
415 NFSD_V4 y
416
417 # Fail to build
418 DRM n
419 SCSI_ADVANSYS n
420 USB_ISP1362_HCD n
421 SND_SOC n
422 SND_ALI5451 n
423 FB_SAVAGE n
424 SCSI_NSP32 n
425 ATA_SFF n
426 SUNGEM n
427 IRDA n
428 ATM_HE n
429 SCSI_ACARD n
430 BLK_DEV_CMD640_ENHANCED n
431
432 FUSE_FS m
433
434 # Needed for udev >= 150
435 SYSFS_DEPRECATED_V2 n
436
437 VGA_CONSOLE n
438 VT_HW_CONSOLE_BINDING y
439 SERIAL_8250_CONSOLE y
440 FRAMEBUFFER_CONSOLE y
441 EXT2_FS y
442 EXT3_FS y
443 REISERFS_FS y
444 MAGIC_SYSRQ y
445
446 # The kernel doesn't boot at all, with FTRACE
447 FTRACE n
448 '';
449 kernelTarget = "vmlinux";
450 gcc = {
451 arch = "loongson2f";
452 abi = "n32";
453 };
454 };
455
456 beaglebone = armv7l-hf-multiplatform // {
457 name = "beaglebone";
458 kernelBaseConfig = "bb.org_defconfig";
459 kernelAutoModules = false;
460 kernelExtraConfig = ""; # TBD kernel config
461 kernelTarget = "zImage";
462 };
463
464 armv7l-hf-multiplatform = {
465 name = "armv7l-hf-multiplatform";
466 kernelMajor = "2.6"; # Using "2.6" enables 2.6 kernel syscalls in glibc.
467 kernelBaseConfig = "multi_v7_defconfig";
468 kernelArch = "arm";
469 kernelDTB = true;
470 kernelAutoModules = true;
471 kernelPreferBuiltin = true;
472 kernelTarget = "zImage";
473 kernelExtraConfig = ''
474 # Serial port for Raspberry Pi 3. Upstream forgot to add it to the ARMv7 defconfig.
475 SERIAL_8250_BCM2835AUX y
476 SERIAL_8250_EXTENDED y
477 SERIAL_8250_SHARE_IRQ y
478
479 # Fix broken sunxi-sid nvmem driver.
480 TI_CPTS y
481
482 # Hangs ODROID-XU4
483 ARM_BIG_LITTLE_CPUIDLE n
484 '';
485 gcc = {
486 # Some table about fpu flags:
487 # http://community.arm.com/servlet/JiveServlet/showImage/38-1981-3827/blogentry-103749-004812900+1365712953_thumb.png
488 # Cortex-A5: -mfpu=neon-fp16
489 # Cortex-A7 (rpi2): -mfpu=neon-vfpv4
490 # Cortex-A8 (beaglebone): -mfpu=neon
491 # Cortex-A9: -mfpu=neon-fp16
492 # Cortex-A15: -mfpu=neon-vfpv4
493
494 # More about FPU:
495 # https://wiki.debian.org/ArmHardFloatPort/VfpComparison
496
497 # vfpv3-d16 is what Debian uses and seems to be the best compromise: NEON is not supported in e.g. Scaleway or Tegra 2,
498 # and the above page suggests NEON is only an improvement with hand-written assembly.
499 arch = "armv7-a";
500 fpu = "vfpv3-d16";
501 float = "hard";
502
503 # For Raspberry Pi the 2 the best would be:
504 # cpu = "cortex-a7";
505 # fpu = "neon-vfpv4";
506 };
507 };
508
509 aarch64-multiplatform = {
510 name = "aarch64-multiplatform";
511 kernelMajor = "2.6"; # Using "2.6" enables 2.6 kernel syscalls in glibc.
512 kernelBaseConfig = "defconfig";
513 kernelArch = "arm64";
514 kernelDTB = true;
515 kernelAutoModules = true;
516 kernelPreferBuiltin = true;
517 kernelExtraConfig = ''
518 # Raspberry Pi 3 stuff. Not needed for kernels >= 4.10.
519 ARCH_BCM2835 y
520 BCM2835_MBOX y
521 BCM2835_WDT y
522 RASPBERRYPI_FIRMWARE y
523 RASPBERRYPI_POWER y
524 SERIAL_8250_BCM2835AUX y
525 SERIAL_8250_EXTENDED y
526 SERIAL_8250_SHARE_IRQ y
527
528 # Cavium ThunderX stuff.
529 PCI_HOST_THUNDER_ECAM y
530
531 # Nvidia Tegra stuff.
532 PCI_TEGRA y
533
534 # The default (=y) forces us to have the XHCI firmware available in initrd,
535 # which our initrd builder can't currently do easily.
536 USB_XHCI_TEGRA m
537 '';
538 kernelTarget = "Image";
539 gcc = {
540 arch = "armv8-a";
541 };
542 };
543
544 riscv-multiplatform = bits: {
545 name = "riscv-multiplatform";
546 kernelArch = "riscv";
547 bfdEmulation = "elf${bits}lriscv";
548 kernelTarget = "vmlinux";
549 kernelAutoModules = true;
550 kernelBaseConfig = "defconfig";
551 kernelExtraConfig = ''
552 FTRACE n
553 SERIAL_OF_PLATFORM y
554 '';
555 };
556
557 selectBySystem = system: {
558 "i686-linux" = pc32;
559 "x86_64-linux" = pc64;
560 "armv5tel-linux" = sheevaplug;
561 "armv6l-linux" = raspberrypi;
562 "armv7l-linux" = armv7l-hf-multiplatform;
563 "aarch64-linux" = aarch64-multiplatform;
564 "mipsel-linux" = fuloong2f_n32;
565 }.${system} or pcBase;
566}