Building ARMv7 kernel

Hi,
I’m attempting to cross compile Linux Kernel using Nix for ARMv7 architecture (armv7l-unknown-linux-musleabi). However, I ran into issue during the build of vmlinux:

cc1: fatal error: types.h: No such file or directory

Therefore I installed a breakpointHook and looked into the container:

  armv7l-unknown-linux-musleabi-gcc -Wp,-MD,lib/lzma/.LzFind.o.d -nostdinc -isystem /nix/store/dkjganxz6hv9hp0km172x2g79jjshy8l-armv7l-unknown-linux-musleabi-stage-final-gcc-debug-9.3.0/lib/gcc/armv7l-unknown-linux-musleabi/9.3.0/include -I/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/arch/arm/include -I./arch/arm/include/generated -I/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/include -I./include -I/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/arch/arm/include/uapi -I./arch/arm/include/generated/uapi -I/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/include/uapi -I./include/generated/uapi -include /nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/include/linux/kconfig.h -include /nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/include/linux/compiler_types.h -D__KERNEL__ -mlittle-endian -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Wno-format-security -std=gnu89 -fno-dwarf2-cfi-asm -fno-ipa-sra -mabi=aapcs-linux -mfpu=vfp -funwind-tables -marm -Wa,-mno-warn-deprecated -D__LINUX_ARM_ARCH__=7 -march=armv7-a -msoft-float -Uarm -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 --param=allow-store-data-races=0 -Wframe-larger-than=1024 -fstack-protector-strong -Wno-unused-but-set-variable -Wimplicit-fallthrough -Wno-unused-const-variable -fomit-frame-pointer -fno-var-tracking-assignments -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-stringop-truncation -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -fmacro-prefix-map=/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/= -Wno-packed-not-aligned -Iinclude/linux -Iinclude/linux/lzma -include types.h -I /nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/lib/lzma -I ./lib/lzma  -ffunction-sections -fdata-sections  -DKBUILD_BASENAME='"LzFind"' -DKBUILD_MODNAME='"lzma_compress"' -c -o lib/lzma/LzFind.o /nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/lib/lzma/LzFind.c
cc1: fatal error: types.h: No such file or directory

I went and looked around for the file:

find -iname types.h
./arch/alpha/include/asm/types.h
./arch/alpha/include/uapi/asm/types.h
./arch/arm/include/uapi/asm/types.h
./arch/ia64/include/asm/types.h
./arch/ia64/include/uapi/asm/types.h
./arch/mips/include/asm/fw/arc/types.h
./arch/mips/include/asm/sn/types.h
./arch/mips/include/asm/types.h
./arch/mips/include/uapi/asm/types.h
./arch/parisc/include/uapi/asm/types.h
./arch/powerpc/boot/types.h
./arch/powerpc/include/asm/types.h
./arch/powerpc/include/uapi/asm/types.h
./arch/s390/include/asm/fpu/types.h
./arch/s390/include/uapi/asm/types.h
./arch/sh/include/asm/types.h
./arch/sh/include/uapi/asm/types.h
./arch/x86/include/asm/e820/types.h
./arch/x86/include/asm/fpu/types.h
./arch/xtensa/include/uapi/asm/types.h
./drivers/net/fddi/skfp/h/types.h
./drivers/net/wireless/broadcom/brcm80211/brcmsmac/types.h
./drivers/net/wireless/marvell/libertas/types.h
./fs/ntfs/types.h
./include/linux/ceph/types.h
./include/linux/firmware/imx/types.h
./include/linux/iio/types.h
./include/linux/sched/types.h
./include/linux/sunrpc/types.h
./include/linux/types.h
./include/linux/lzma/Types.h
./include/uapi/asm-generic/types.h
./include/uapi/linux/iio/types.h
./include/uapi/linux/sched/types.h
./include/uapi/linux/types.h
./net/batman-adv/types.h
./tools/include/linux/types.h
./tools/testing/selftests/bpf/include/uapi/linux/types.h
./tools/testing/selftests/rcutorture/formal/srcu-cbmc/empty_includes/uapi/linux/types.h
./tools/testing/selftests/rcutorture/formal/srcu-cbmc/include/linux/types.h

Unfortunately inside the container there is no such file:

bash-4.4$ find -iname types.h
bash-4.4$

Could you please suggest what to check or modify in order to build the kernel?

What exactly are you trying to do and when does this happen?

nixpkgs.pkgsCross.armv7l-hf-multiplatform.pkgsMusl.linux seems to be building fine for me but I haven’t let it run to the end yet.

Hi Atemu,
I’m attempting to compile kernel from OpenWrt repo for Linksys 1900ACS router (SoC: Marvell Armada 385).

There is a project nixwrt which targets only MIPS routers and my attempt is to port it to ARM based routers. The modifications are here

Don’t know if it will be helpful but here is partial of the build log attached.

  AS      arch/arm/lib/ashldi3.o
  AS      arch/arm/lib/ashrdi3.o
  AS      arch/arm/lib/backtrace.o
  AS      arch/arm/lib/bswapsdi2.o
  AS      arch/arm/lib/call_with_stack.o
  AS      arch/arm/lib/changebit.o
  AS      arch/arm/lib/clear_user.o
  AS      arch/arm/lib/clearbit.o
  AS      arch/arm/lib/copy_from_user.o
  AS      arch/arm/lib/copy_page.o
  AS      arch/arm/lib/copy_to_user.o
  AS      arch/arm/lib/csumipv6.o
  AS      arch/arm/lib/csumpartial.o
  AS      arch/arm/lib/csumpartialcopy.o
  AS      arch/arm/lib/csumpartialcopyuser.o
  AS      arch/arm/lib/delay-loop.o
  CC      arch/arm/lib/delay.o
  AS      arch/arm/lib/div64.o
  AS      arch/arm/lib/findbit.o
  AS      arch/arm/lib/getuser.o
  AS      arch/arm/lib/io-readsb.o
  AS      arch/arm/lib/io-readsl.o
  AS      arch/arm/lib/io-readsw-armv4.o
  AS      arch/arm/lib/io-writesb.o
  AS      arch/arm/lib/io-writesl.o
  AS      arch/arm/lib/io-writesw-armv4.o
  AS      arch/arm/lib/lib1funcs.o
  AS      arch/arm/lib/lshrdi3.o
  AS      arch/arm/lib/memchr.o
  AS      arch/arm/lib/memcpy.o
  AS      arch/arm/lib/memmove.o
  AS      arch/arm/lib/memset.o
  AS      arch/arm/lib/muldi3.o
  AS      arch/arm/lib/putuser.o
  AS      arch/arm/lib/setbit.o
  AS      arch/arm/lib/strchr.o
  AS      arch/arm/lib/strrchr.o
  AS      arch/arm/lib/testchangebit.o
  AS      arch/arm/lib/testclearbit.o
  AS      arch/arm/lib/testsetbit.o
  AS      arch/arm/lib/ucmpdi2.o
  AR      arch/arm/lib/lib.a
  EXPORTS arch/arm/lib/lib-ksyms.o
  AR      arch/arm/lib/built-in.a
  CC      lib/crypto/aes.o
  CC      lib/crypto/arc4.o
  AR      lib/crypto/built-in.a
  CC      lib/lz4/lz4_decompress.o
  AR      lib/lz4/built-in.a
  CC      lib/lzma/LzFind.o
cc1: fatal error: types.h: No such file or directory
compilation terminated.
make[3]: *** [/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/scripts/Makefile.build:266: lib/lzma/LzFind.o] Error 1
make[2]: *** [/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/scripts/Makefile.build:500: lib/lzma] Error 2
make[1]: *** [/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi/Makefile:1729: lib] Error 2
make[1]: Leaving directory '/build'
make: *** [Makefile:179: sub-make] Error 2
make: Leaving directory '/nix/store/7dc2icfzrqjnii9mz2q7jx5rms1wcl9p-kernel-source-tree-armv7l-unknown-linux-musleabi'
build failed in buildPhase with exit code 2
To attach install cntr and run the following command as root:

   cntr attach -t command cntr-/nix/store/s6vszx5yd60m1mf4rv0w4szcwc58fi67-vmlinux-armv7l-unknown-linux-musleabi