1# 2# Copyright (C) 2006-2015 OpenWrt.org 3# 4# This is free software, licensed under the GNU General Public License v2. 5# See /LICENSE for more information. 6# 7 8ifeq ($(__target_inc),) 9 include $(INCLUDE_DIR)/target.mk 10endif 11 12ifeq ($(DUMP),1) 13 KERNEL?=<KERNEL> 14 BOARD?=<BOARD> 15 LINUX_VERSION?=<LINUX_VERSION> 16 LINUX_VERMAGIC?=<LINUX_VERMAGIC> 17else 18 ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) 19 export GCC_HONOUR_COPTS=s 20 endif 21 22 LINUX_KMOD_SUFFIX=ko 23 24 ifneq (,$(findstring uml,$(BOARD))) 25 KERNEL_CC?=$(HOSTCC) 26 KERNEL_CROSS?= 27 else 28 KERNEL_CC?=$(TARGET_CC) 29 KERNEL_CROSS?=$(TARGET_CROSS) 30 endif 31 32 ifeq ($(TARGET_BUILD),1) 33 PATCH_DIR ?= ./patches$(if $(wildcard ./patches-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) 34 FILES_DIR ?= $(foreach dir,$(wildcard ./files ./files-$(KERNEL_PATCHVER)),"$(dir)") 35 endif 36 KERNEL_BUILD_DIR ?= $(BUILD_DIR)/linux-$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET)) 37 LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) 38 LINUX_UAPI_DIR=uapi/ 39 LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null)) 40 LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown) 41 42 LINUX_UNAME_VERSION:=$(if $(word 3,$(subst ., ,$(KERNEL_BASE))),$(KERNEL_BASE),$(KERNEL_BASE).0) 43 ifneq ($(findstring -rc,$(LINUX_VERSION)),) 44 LINUX_UNAME_VERSION:=$(LINUX_UNAME_VERSION)-$(strip $(lastword $(subst -, ,$(LINUX_VERSION)))) 45 endif 46 47 MODULES_SUBDIR:=lib/modules/$(LINUX_UNAME_VERSION) 48 TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR) 49 50 LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux 51 52 LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.xz 53 TESTING:=$(if $(findstring -rc,$(LINUX_VERSION)),/testing,) 54 ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),) 55 LINUX_SITE:=@KERNEL/linux/kernel/v$(word 1,$(subst ., ,$(KERNEL_BASE))).x$(TESTING) 56 endif 57 58 ifneq ($(TARGET_BUILD),1) 59 PKG_BUILD_DIR ?= $(KERNEL_BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) 60 endif 61endif 62 63ifneq (,$(findstring uml,$(BOARD))) 64 LINUX_KARCH=um 65else ifneq (,$(findstring $(ARCH) , aarch64 aarch64_be )) 66 LINUX_KARCH := arm64 67else ifneq (,$(findstring $(ARCH) , arceb )) 68 LINUX_KARCH := arc 69else ifneq (,$(findstring $(ARCH) , armeb )) 70 LINUX_KARCH := arm 71else ifneq (,$(findstring $(ARCH) , mipsel mips64 mips64el )) 72 LINUX_KARCH := mips 73else ifneq (,$(findstring $(ARCH) , sh2 sh3 sh4 )) 74 LINUX_KARCH := sh 75else ifneq (,$(findstring $(ARCH) , i386 x86_64 )) 76 LINUX_KARCH := x86 77else 78 LINUX_KARCH := $(ARCH) 79endif 80 81define KernelPackage/Defaults 82 FILES:= 83 AUTOLOAD:= 84endef 85 86define ModuleAutoLoad 87 $(SH_FUNC) \ 88 export modules=; \ 89 probe_module() { \ 90 mods="$$$$$$$$1"; \ 91 boot="$$$$$$$$2"; \ 92 shift 2; \ 93 for mod in $(sort $$$$$$$$mods); do \ 94 mkdir -p $(2)/etc/modules.d; \ 95 echo "$$$$$$$$mod" >> $(2)/etc/modules.d/$(1); \ 96 done; \ 97 if [ -e $(2)/etc/modules.d/$(1) ]; then \ 98 if [ "$$$$$$$$boot" = "1" ]; then \ 99 mkdir -p $(2)/etc/modules-boot.d; \ 100 ln -s ../modules.d/$(1) $(2)/etc/modules-boot.d/; \ 101 fi; \ 102 modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$mods"; \ 103 fi; \ 104 }; \ 105 add_module() { \ 106 priority="$$$$$$$$1"; \ 107 mods="$$$$$$$$2"; \ 108 boot="$$$$$$$$3"; \ 109 shift 3; \ 110 for mod in $(sort $$$$$$$$mods); do \ 111 mkdir -p $(2)/etc/modules.d; \ 112 echo "$$$$$$$$mod" >> $(2)/etc/modules.d/$$$$$$$$priority-$(1); \ 113 done; \ 114 if [ -e $(2)/etc/modules.d/$$$$$$$$priority-$(1) ]; then \ 115 if [ "$$$$$$$$boot" = "1" ]; then \ 116 mkdir -p $(2)/etc/modules-boot.d; \ 117 ln -s ../modules.d/$$$$$$$$priority-$(1) $(2)/etc/modules-boot.d/; \ 118 fi; \ 119 modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$priority-$(1)"; \ 120 fi; \ 121 }; \ 122 $(3) \ 123 if [ -n "$$$$$$$$modules" ]; then \ 124 mkdir -p $(2)/etc/modules.d; \ 125 mkdir -p $(2)/CONTROL; \ 126 echo "#!/bin/sh" > $(2)/CONTROL/postinst-pkg; \ 127 echo "[ -z \"\$$$$$$$$IPKG_INSTROOT\" ] || exit 0" >> $(2)/CONTROL/postinst-pkg; \ 128 echo ". /lib/functions.sh" >> $(2)/CONTROL/postinst-pkg; \ 129 echo "insert_modules $$$$$$$$modules" >> $(2)/CONTROL/postinst-pkg; \ 130 chmod 0755 $(2)/CONTROL/postinst-pkg; \ 131 fi 132endef 133 134ifeq ($(DUMP)$(TARGET_BUILD),) 135 -include $(LINUX_DIR)/.config 136endif 137 138define KernelPackage/depends 139 $(STAMP_BUILT): $(LINUX_DIR)/.config 140 define KernelPackage/depends 141 endef 142endef 143 144define KernelPackage 145 NAME:=$(1) 146 $(eval $(call Package/Default)) 147 $(eval $(call KernelPackage/Defaults)) 148 $(eval $(call KernelPackage/$(1))) 149 $(eval $(call KernelPackage/$(1)/$(BOARD))) 150 151 define Package/kmod-$(1) 152 TITLE:=$(TITLE) 153 SECTION:=kernel 154 CATEGORY:=Kernel modules 155 DESCRIPTION:=$(DESCRIPTION) 156 EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)) 157 VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),+$(PKG_VERSION))-$(if $(PKG_RELEASE),$(PKG_RELEASE),$(LINUX_RELEASE)) 158 PACKAGE_SUBDIR:=$(if $(FEED),$(FEED),kernel) 159 $(call KernelPackage/$(1)) 160 $(call KernelPackage/$(1)/$(BOARD)) 161 endef 162 163 ifdef KernelPackage/$(1)/conffiles 164 define Package/kmod-$(1)/conffiles 165$(call KernelPackage/$(1)/conffiles) 166 endef 167 endif 168 169 ifdef KernelPackage/$(1)/description 170 define Package/kmod-$(1)/description 171$(call KernelPackage/$(1)/description) 172 endef 173 endif 174 175 ifdef KernelPackage/$(1)/config 176 define Package/kmod-$(1)/config 177$(call KernelPackage/$(1)/config) 178 endef 179 endif 180 181 $(call KernelPackage/depends) 182 183 ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m y,$(foreach c,$(filter-out %=y %=n %=m,$(KCONFIG)),$($(c)))),.),) 184 ifneq ($(strip $(FILES)),) 185 define Package/kmod-$(1)/install 186 @for mod in $$(call version_filter,$$(FILES)); do \ 187 if grep -q "$$$$$$$${mod##$(LINUX_DIR)/}" "$(LINUX_DIR)/modules.builtin"; then \ 188 echo "NOTICE: module '$$$$$$$$mod' is built-in."; \ 189 elif [ -e $$$$$$$$mod ]; then \ 190 mkdir -p $$(1)/$(MODULES_SUBDIR) ; \ 191 $(CP) -L $$$$$$$$mod $$(1)/$(MODULES_SUBDIR)/ ; \ 192 else \ 193 echo "ERROR: module '$$$$$$$$mod' is missing." >&2; \ 194 exit 1; \ 195 fi; \ 196 done; 197 $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD)) 198 $(call KernelPackage/$(1)/install,$$(1)) 199 endef 200 endif 201 $(if $(CONFIG_PACKAGE_kmod-$(1)), 202 else 203 compile: $(1)-disabled 204 $(1)-disabled: 205 @echo "WARNING: kmod-$(1) is not available in the kernel config - generating empty package" >&2 206 207 define Package/kmod-$(1)/install 208 true 209 endef 210 ) 211 endif 212 $$(eval $$(call BuildPackage,kmod-$(1))) 213 214 $$(IPKG_kmod-$(1)): $$(wildcard $$(FILES)) 215endef 216 217version_filter=$(if $(findstring @,$(1)),$(shell $(SCRIPT_DIR)/metadata.pl version_filter $(KERNEL_PATCHVER) $(1)),$(1)) 218 219define AutoLoad 220 add_module "$(1)" "$(call version_filter,$(2))" "$(3)"; 221endef 222 223define AutoProbe 224 probe_module "$(call version_filter,$(1))" "$(2)"; 225endef 226 227version_field=$(if $(word $(1),$(2)),$(word $(1),$(2)),0) 228kernel_version_merge=$$(( ($(call version_field,1,$(1)) << 24) + ($(call version_field,2,$(1)) << 16) + ($(call version_field,3,$(1)) << 8) + $(call version_field,4,$(1)) )) 229 230ifdef DUMP 231 kernel_version_cmp= 232else 233 kernel_version_cmp=$(shell [ $(call kernel_version_merge,$(call split_version,$(2))) $(1) $(call kernel_version_merge,$(call split_version,$(3))) ] && echo 1 ) 234endif 235 236CompareKernelPatchVer=$(if $(call kernel_version_cmp,-$(2),$(1),$(3)),1,0) 237 238kernel_patchver_gt=$(call kernel_version_cmp,-gt,$(KERNEL_PATCHVER),$(1)) 239kernel_patchver_ge=$(call kernel_version_cmp,-ge,$(KERNEL_PATCHVER),$(1)) 240kernel_patchver_eq=$(call kernel_version_cmp,-eq,$(KERNEL_PATCHVER),$(1)) 241kernel_patchver_le=$(call kernel_version_cmp,-le,$(KERNEL_PATCHVER),$(1)) 242kernel_patchver_lt=$(call kernel_version_cmp,-lt,$(KERNEL_PATCHVER),$(1)) 243 244