2017-03-31 15:18:46 +00:00
|
|
|
modules-y += linux
|
2016-08-03 01:23:18 +00:00
|
|
|
|
2020-08-20 23:26:48 +00:00
|
|
|
ifeq "$(CONFIG_LINUX_VERSION)" "4.14.62"
|
2018-08-09 14:20:22 +00:00
|
|
|
linux_version := 4.14.62
|
2020-08-20 23:26:48 +00:00
|
|
|
linux_hash := 51ca4d7e8ee156dc0f19bc7768915cfae41dbb0b4f251e4fa8b178c5674c22ab
|
|
|
|
else ifeq "$(CONFIG_LINUX_VERSION)" "4.19.139"
|
|
|
|
linux_version := 4.19.139
|
|
|
|
linux_hash := 9c4ebf21fe949f80fbcfbbd6e7fe181040d325e89475e230ab53ef01f9d55605
|
2020-10-25 05:26:08 +00:00
|
|
|
else ifeq "$(CONFIG_LINUX_VERSION)" "5.4.69"
|
|
|
|
linux_version := 5.4.69
|
|
|
|
linux_hash := a8b31d716b397303a183e42ad525ff2871024a43e3ea530d0fdf73b7f9d27da7
|
2021-01-07 19:07:57 +00:00
|
|
|
#
|
|
|
|
# linuxboot systems should *NOT* use 5.10.5 until a proper review has
|
|
|
|
# been done. This is because `0000-efi_bds.patch` did not cleanly port
|
|
|
|
# from 5.4.69 to 5.10.5 which directly affects linuxboot systems.
|
|
|
|
#
|
|
|
|
else ifeq "$(CONFIG_LINUX_VERSION)" "5.10.5"
|
|
|
|
linux_version := 5.10.5
|
|
|
|
linux_hash := 3991a9e16a187d78d5f414d89236ae5d7f404a69e60c4c42a9d262ee19612ef4
|
2020-08-20 23:26:48 +00:00
|
|
|
else
|
|
|
|
$(error "$(BOARD): does not specify linux kernel version under CONFIG_LINUX_VERSION")
|
|
|
|
endif
|
|
|
|
|
2018-05-02 15:38:39 +00:00
|
|
|
linux_base_dir := linux-$(linux_version)
|
2016-08-03 01:23:18 +00:00
|
|
|
|
2018-05-02 15:38:39 +00:00
|
|
|
# TODO: fixup the patch process
|
2018-02-05 20:28:33 +00:00
|
|
|
# input file in the heads config/ dir
|
|
|
|
# Allow board config to specialize Linux configuration if necessary
|
2018-02-05 22:27:12 +00:00
|
|
|
linux_kconfig := $(or $(CONFIG_LINUX_CONFIG),config/linux.config)
|
2018-02-05 20:28:33 +00:00
|
|
|
|
2018-02-06 20:03:47 +00:00
|
|
|
# Output directory for the Linux kernel build is based on the
|
|
|
|
# configuration file name, not the board name
|
2018-05-02 15:38:39 +00:00
|
|
|
linux_dir := $(linux_base_dir)/$(notdir $(basename $(linux_kconfig)))
|
|
|
|
|
|
|
|
linux_tar := linux-$(linux_version).tar.xz
|
2020-10-25 05:26:08 +00:00
|
|
|
linux_major_ver := $(basename $(basename $(CONFIG_LINUX_VERSION)))
|
|
|
|
linux_url := https://cdn.kernel.org/pub/linux/kernel/v$(linux_major_ver).x/$(linux_tar)
|
2018-05-02 15:38:39 +00:00
|
|
|
|
2018-05-03 20:47:09 +00:00
|
|
|
# Ensure that touching the config file will force a reconfig/rebuild
|
|
|
|
$(build)/$(linux_dir)/.configured: $(linux_kconfig)
|
2018-02-05 20:28:33 +00:00
|
|
|
|
2017-01-27 22:55:44 +00:00
|
|
|
linux_configure := \
|
2018-08-09 16:45:53 +00:00
|
|
|
mkdir -p "$(build)/$(linux_dir)" \
|
|
|
|
&& cp "$(pwd)/$(linux_kconfig)" "$(build)/$(linux_dir)/.config" \
|
|
|
|
&& $(MAKE) -C .. \
|
2017-04-16 18:18:46 +00:00
|
|
|
CROSS_COMPILE="$(CROSS)" \
|
2018-05-02 15:38:39 +00:00
|
|
|
O="$(build)/$(linux_dir)" \
|
2018-08-09 16:45:53 +00:00
|
|
|
olddefconfig \
|
2017-01-27 22:55:44 +00:00
|
|
|
|
2018-05-02 15:38:39 +00:00
|
|
|
linux_output += arch/x86/boot/bzImage
|
2018-02-05 16:27:45 +00:00
|
|
|
|
2018-09-18 11:24:19 +00:00
|
|
|
# Once we have extracted the kernel tar file, install the headers
|
|
|
|
# so that other submodules can make use of them.
|
|
|
|
$(INSTALL)/include/linux/limits.h: $(build)/$(linux_base_dir)/.canary
|
|
|
|
$(MAKE) \
|
|
|
|
-C "$(build)/$(linux_base_dir)" \
|
|
|
|
INSTALL_HDR_PATH="$(INSTALL)" \
|
|
|
|
O="$(linux_dir)" \
|
|
|
|
KCONFIG_CONFIG="$(pwd)/$(linux_kconfig)" \
|
|
|
|
headers_install
|
|
|
|
|
2017-01-27 22:55:44 +00:00
|
|
|
|
2017-04-05 23:20:53 +00:00
|
|
|
# qemu
|
2017-03-31 15:18:46 +00:00
|
|
|
linux_modules-$(CONFIG_LINUX_E1000) += drivers/net/ethernet/intel/e1000/e1000.ko
|
2017-04-05 23:20:53 +00:00
|
|
|
|
2018-02-08 00:07:53 +00:00
|
|
|
# x230 and winterfell
|
2017-03-31 15:18:46 +00:00
|
|
|
linux_modules-$(CONFIG_LINUX_E1000E) += drivers/net/ethernet/intel/e1000e/e1000e.ko
|
2017-04-05 23:20:53 +00:00
|
|
|
|
2017-09-21 20:54:48 +00:00
|
|
|
# Dell R630 ethernet and RAID controller
|
2017-09-20 14:29:14 +00:00
|
|
|
linux_modules-$(CONFIG_LINUX_IGB) += drivers/net/ethernet/intel/igb/igb.ko
|
2017-09-21 20:54:48 +00:00
|
|
|
linux_modules-$(CONFIG_LINUX_MEGARAID) += drivers/scsi/megaraid/megaraid_mm.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_MEGARAID) += drivers/scsi/megaraid/megaraid_sas.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_MEGARAID) += drivers/scsi/megaraid/megaraid_mbox.ko
|
2017-09-20 14:29:14 +00:00
|
|
|
|
2017-12-04 21:00:35 +00:00
|
|
|
# Intel s2600wf scsi controller
|
|
|
|
linux_modules-$(CONFIG_LINUX_SCSI_GDTH) += drivers/scsi/gdth.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_ATA) += drivers/ata/libata.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_AHCI) += drivers/ata/ahci.ko
|
2018-02-13 22:46:38 +00:00
|
|
|
#linux_modules-$(CONFIG_LINUX_AHCI) += drivers/ata/ahci_platform.ko
|
2017-12-04 21:00:35 +00:00
|
|
|
linux_modules-$(CONFIG_LINUX_AHCI) += drivers/ata/libahci.ko
|
2018-02-13 22:46:38 +00:00
|
|
|
#linux_modules-$(CONFIG_LINUX_AHCI) += drivers/ata/libahci_platform.ko
|
2017-12-04 21:00:35 +00:00
|
|
|
|
2018-02-02 20:57:11 +00:00
|
|
|
# Solarflare network card
|
|
|
|
linux_modules-$(CONFIG_LINUX_SFC) += drivers/net/ethernet/sfc/sfc.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_SFC) += drivers/net/mdio.ko
|
|
|
|
|
2018-02-05 16:27:45 +00:00
|
|
|
# Mellanox ConnectX-3 (winterfell)
|
|
|
|
linux_modules-$(CONFIG_LINUX_MLX4) += drivers/net/ethernet/mellanox/mlx4/mlx4_core.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_MLX4) += drivers/net/ethernet/mellanox/mlx4/mlx4_en.ko
|
|
|
|
|
2018-03-24 01:13:09 +00:00
|
|
|
# Broadcom 57302 (25g) for Tioga Pass
|
|
|
|
linux_modules-$(CONFIG_LINUX_BCM) += drivers/net/ethernet/broadcom/bnxt/bnxt_en.ko
|
|
|
|
|
2017-09-21 20:54:48 +00:00
|
|
|
# USB modules for both types of controllers
|
2017-12-06 08:04:27 +00:00
|
|
|
# older boards also need ohci and uhci
|
|
|
|
linux_modules-$(CONFIG_LINUX_USB_COMPANION_CONTROLLER) += drivers/usb/host/uhci-hcd.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_USB_COMPANION_CONTROLLER) += drivers/usb/host/ohci-hcd.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_USB_COMPANION_CONTROLLER) += drivers/usb/host/ohci-pci.ko
|
2017-03-31 15:18:46 +00:00
|
|
|
linux_modules-$(CONFIG_LINUX_USB) += drivers/usb/host/ehci-hcd.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_USB) += drivers/usb/host/ehci-pci.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_USB) += drivers/usb/host/xhci-hcd.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_USB) += drivers/usb/host/xhci-pci.ko
|
2017-04-05 23:20:53 +00:00
|
|
|
linux_modules-$(CONFIG_LINUX_USB) += drivers/usb/storage/usb-storage.ko
|
2017-03-28 20:32:58 +00:00
|
|
|
|
2018-02-28 19:06:53 +00:00
|
|
|
# NVMe driver for winterfell and other servers
|
|
|
|
linux_modules-$(CONFIG_LINUX_NVME) += drivers/nvme/host/nvme.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_NVME) += drivers/nvme/host/nvme-core.ko
|
|
|
|
|
2018-04-10 19:28:24 +00:00
|
|
|
# ME drivers for talking the the management engine
|
|
|
|
linux_modules-$(CONFIG_LINUX_MEI) += drivers/misc/mei/mei.ko
|
|
|
|
linux_modules-$(CONFIG_LINUX_MEI) += drivers/misc/mei/mei-me.ko
|
|
|
|
|
2017-01-28 23:38:29 +00:00
|
|
|
EXTRA_FLAGS := -fdebug-prefix-map=$(pwd)=heads -gno-record-gcc-switches
|
|
|
|
|
2017-01-27 22:55:44 +00:00
|
|
|
linux_target := \
|
2018-05-02 15:38:39 +00:00
|
|
|
O="$(build)/$(linux_dir)" \
|
2017-04-16 18:18:46 +00:00
|
|
|
CROSS_COMPILE="$(CROSS)" \
|
2017-01-28 23:38:29 +00:00
|
|
|
AFLAGS_KERNEL="$(EXTRA_FLAGS)" \
|
|
|
|
CFLAGS_KERNEL="$(EXTRA_FLAGS)" \
|
|
|
|
CFLAGS_MODULE="$(EXTRA_FLAGS)" \
|
2018-05-04 18:36:56 +00:00
|
|
|
KBUILD_BUILD_USER=$(notdir $(linux_kconfig)) \
|
2018-02-02 20:57:11 +00:00
|
|
|
KBUILD_BUILD_HOST=linuxboot \
|
2017-01-28 23:38:29 +00:00
|
|
|
KBUILD_BUILD_TIMESTAMP="1970-00-00" \
|
|
|
|
KBUILD_BUILD_VERSION=0 \
|
2017-04-16 18:18:46 +00:00
|
|
|
$(MAKE_JOBS) \
|
2017-03-20 18:52:03 +00:00
|
|
|
|
|
|
|
# We cross compile linux now
|
2017-04-09 06:11:18 +00:00
|
|
|
linux_depends := musl-cross
|
2018-02-05 16:27:45 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
# Linux kernel module installation
|
|
|
|
#
|
|
|
|
# This is special cases since we have to do a special strip operation on
|
|
|
|
# the kernel modules to make them fit into the ROM image.
|
|
|
|
#
|
|
|
|
module_initrd_dir := $(shell mktemp -d)
|
|
|
|
module_initrd_lib_dir := $(module_initrd_dir)/lib/modules
|
|
|
|
FOO := $(shell mkdir -p "$(module_initrd_lib_dir)")
|
|
|
|
|
|
|
|
define linux_module =
|
|
|
|
|
|
|
|
# Each module depends on building the Linux kernel
|
2018-05-03 22:03:24 +00:00
|
|
|
$(build)/$(linux_dir)/$1: $(build)/$(linux_dir)/$(linux_output)
|
2018-02-05 16:27:45 +00:00
|
|
|
|
|
|
|
# The cpio file will depend on every module
|
|
|
|
$(build)/$(BOARD)/modules.cpio: $(module_initrd_lib_dir)/$(notdir $1)
|
|
|
|
|
|
|
|
# Strip the modules when we install them so that they will be extra small
|
2018-05-02 15:38:39 +00:00
|
|
|
$(module_initrd_lib_dir)/$(notdir $1): $(build)/$(linux_dir)/$1
|
2018-02-05 16:27:45 +00:00
|
|
|
$(call do,INSTALL-MODULE,$1, \
|
|
|
|
$(CROSS)strip \
|
|
|
|
--preserve-dates \
|
|
|
|
--strip-debug \
|
|
|
|
-o "$$@" \
|
|
|
|
"$$<" \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
$(call map,linux_module,$(linux_modules-y))
|
|
|
|
|
|
|
|
# We can't rebuild the module initrd until the kernel has been rebuilt
|
2018-05-02 15:38:39 +00:00
|
|
|
$(build)/$(BOARD)/modules.cpio: $(build)/$(linux_dir)/.build
|
2018-02-05 16:27:45 +00:00
|
|
|
$(call do-cpio,$@,$(module_initrd_dir))
|
|
|
|
@$(RM) -rf "$(module_initrd_dir)"
|
|
|
|
|
|
|
|
|
2018-02-26 16:40:04 +00:00
|
|
|
# The output of the linux.intermediate is the bzImage in the
|
|
|
|
# linus build directory. We need to copy it into our board
|
|
|
|
# specific directory for ease of locating it later.
|
2018-05-03 22:03:24 +00:00
|
|
|
$(build)/$(BOARD)/bzImage: $(build)/$(linux_dir)/.build
|
|
|
|
$(call do-copy,$(dir $<)/$(linux_output),$@)
|
|
|
|
@touch $@ # force a timestamp update
|
2018-09-18 17:07:40 +00:00
|
|
|
@sha256sum "$@" | tee -a "$(HASHES)"
|
2018-02-08 21:02:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
# menuconfig target allows us to easily reconfigure this Linux kernel
|
2018-08-09 16:45:53 +00:00
|
|
|
# Afterwars make linux.saveconfig to generate a minimal config from it
|
2018-02-08 21:02:54 +00:00
|
|
|
linux.menuconfig:
|
|
|
|
$(MAKE) \
|
2018-05-02 15:38:39 +00:00
|
|
|
-C "$(build)/$(linux_base_dir)" \
|
|
|
|
O="$(build)/$(linux_dir)" \
|
2018-02-08 21:02:54 +00:00
|
|
|
menuconfig \
|
2018-08-09 16:45:53 +00:00
|
|
|
|
|
|
|
# The config file in the repo is stored as a "defconfig" format
|
|
|
|
# which only includes the options that have changed from the defaults.
|
|
|
|
linux.saveconfig:
|
|
|
|
$(MAKE) \
|
|
|
|
-C "$(build)/$(linux_base_dir)" \
|
|
|
|
O="$(build)/$(linux_dir)" \
|
|
|
|
savedefconfig
|
|
|
|
mv "$(build)/$(linux_dir)/defconfig" "$(pwd)/$(linux_kconfig)"
|