1# 2# Copyright (C) 2006-2011 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_BASE)/linux-$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET))$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) 37 LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) 38 39 LINUX_SRC_DIR := $(LINUX_DIR)/sourcecode 40 41 LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null)) 42 LINUX_VERMAGIC:=$(if $(CONFIG_KERNEL_MODVERSIONS),modversions,$(LINUX_VERMAGIC)) 43 LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown) 44 45 LINUX_UNAME_VERSION:=$(if $(word 3,$(subst ., ,$(KERNEL_BASE))),$(KERNEL_BASE),$(KERNEL_BASE).0) 46 ifneq ($(findstring -rc,$(LINUX_VERSION)),) 47 LINUX_UNAME_VERSION:=$(LINUX_UNAME_VERSION)-$(strip $(lastword $(subst -, ,$(LINUX_VERSION)))) 48 endif 49 50 MODULES_SUBDIR:=lib/modules/$(LINUX_UNAME_VERSION) 51 TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR) 52 53 LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux 54 55 LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.bz2 56 TESTING:=$(if $(findstring -rc,$(LINUX_VERSION)),/testing,) 57 LINUX_SITE:=@KERNEL/linux/kernel/v$(KERNEL)$(TESTING) 58 59 ifneq ($(TARGET_BUILD),1) 60 PKG_BUILD_DIR ?= $(KERNEL_BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) 61 endif 62endif 63 64ifneq (,$(findstring uml,$(BOARD))) 65 LINUX_KARCH=um 66else 67 ifeq (,$(LINUX_KARCH)) 68 LINUX_KARCH=$(strip $(subst i386,x86,$(subst armeb,arm,$(subst mipsel,mips,$(subst mips64,mips,$(subst mips64el,mips,$(subst sh2,sh,$(subst sh3,sh,$(subst sh4,sh,$(ARCH)))))))))) 69 endif 70endif 71 72 73define KernelPackage/Defaults 74 FILES:= 75 AUTOLOAD:= 76endef 77 78define ModuleAutoLoad 79 $(SH_FUNC) \ 80 export modules=; \ 81 add_module() { \ 82 priority="$$$$$$$$1"; \ 83 mods="$$$$$$$$2"; \ 84 boot="$$$$$$$$3"; \ 85 shift 3; \ 86 for mod in $$$$$$$$mods; do \ 87 if [ -e $(2)/$(MODULES_SUBDIR)/$$$$$$$$mod.ko ]; then \ 88 mkdir -p $(2)/etc/modules.d; \ 89 echo "$$$$$$$$mod" >> $(2)/etc/modules.d/$$$$$$$$priority-$(1); \ 90 fi; \ 91 done; \ 92 if [ -e $(2)/etc/modules.d/$$$$$$$$priority-$(1) ]; then \ 93 if [ "$$$$$$$$boot" = "1" ]; then \ 94 mkdir -p $(2)/etc/modules-boot.d; \ 95 ln -s ../modules.d/$$$$$$$$priority-$(1) $(2)/etc/modules-boot.d/; \ 96 fi; \ 97 modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$priority-$(1)"; \ 98 fi; \ 99 }; \ 100 $(3) \ 101 if [ -n "$$$$$$$$modules" ]; then \ 102 mkdir -p $(2)/etc/modules.d; \ 103 mkdir -p $(2)/CONTROL; \ 104 echo "#!/bin/sh" > $(2)/CONTROL/postinst; \ 105 echo "[ -z \"\$$$$$$$$IPKG_INSTROOT\" ] || exit 0" >> $(2)/CONTROL/postinst; \ 106 echo ". /etc/functions.sh" >> $(2)/CONTROL/postinst; \ 107 echo "load_modules $$$$$$$$modules" >> $(2)/CONTROL/postinst; \ 108 chmod 0755 $(2)/CONTROL/postinst; \ 109 fi 110endef 111 112ifeq ($(DUMP)$(TARGET_BUILD),) 113 -include $(LINUX_DIR)/.config 114endif 115 116define KernelPackage/depends 117 $(STAMP_BUILT): $(LINUX_DIR)/.config 118 define KernelPackage/depends 119 endef 120endef 121 122define KernelPackage 123 NAME:=$(1) 124 $(eval $(call Package/Default)) 125 $(eval $(call KernelPackage/Defaults)) 126 $(eval $(call KernelPackage/$(1))) 127 $(eval $(call KernelPackage/$(1)/$(BOARD))) 128 129 define Package/kmod-$(1) 130 TITLE:=$(TITLE) 131 SECTION:=kernel 132 CATEGORY:=Kernel modules 133 DESCRIPTION:=$(DESCRIPTION) 134 EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)) 135 VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),+$(PKG_VERSION))-$(if $(PKG_RELEASE),$(PKG_RELEASE),$(LINUX_RELEASE)) 136 $(call KernelPackage/$(1)) 137 $(call KernelPackage/$(1)/$(BOARD)) 138 endef 139 140 ifdef KernelPackage/$(1)/description 141 define Package/kmod-$(1)/description 142$(call KernelPackage/$(1)/description) 143 endef 144 endif 145 146 ifdef KernelPackage/$(1)/config 147 define Package/kmod-$(1)/config 148$(call KernelPackage/$(1)/config) 149 endef 150 endif 151 152 $(call KernelPackage/depends) 153 154 $(shell [ -x $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/sourcecode/scripts/gcc-wrapper.py ] \ 155 || chmod +x $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/sourcecode/scripts/gcc-wrapper.py) 156 157 ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m y,$(foreach c,$(filter-out %=y %=n %=m,$(KCONFIG)),$($(c)))),.),) 158 ifneq ($(strip $(FILES)),) 159 define Package/kmod-$(1)/install 160 @for mod in $$(FILES); do \ 161 if [ -e $$$$$$$$mod ]; then \ 162 mkdir -p $$(1)/$(MODULES_SUBDIR) ; \ 163 $(CP) -L $$$$$$$$mod $$(1)/$(MODULES_SUBDIR)/ ; \ 164 elif [ -e "$(LINUX_DIR)/modules.builtin" ]; then \ 165 if grep -q "$$$$$$$${mod##$(LINUX_DIR)/}" "$(LINUX_DIR)/modules.builtin"; then \ 166 echo "NOTICE: module '$$$$$$$$mod' is built-in."; \ 167 else \ 168 echo "ERROR: module '$$$$$$$$mod' is missing."; \ 169 exit 1; \ 170 fi; \ 171 else \ 172 echo "WARNING: module '$$$$$$$$mod' missing and modules.builtin not available, assuming built-in."; \ 173 fi; \ 174 done; 175 $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD)) 176 $(call KernelPackage/$(1)/install,$$(1)) 177 endef 178 endif 179 $(if $(CONFIG_PACKAGE_kmod-$(1)), 180 else 181 compile: kmod-$(1)-unavailable 182 kmod-$(1)-unavailable: 183 @echo "WARNING: kmod-$(1) is not available in the kernel config" 184 ) 185 endif 186 $$(eval $$(call BuildPackage,kmod-$(1))) 187 188 $$(IPKG_kmod-$(1)): $$(wildcard $$(FILES)) 189endef 190 191define AutoLoad 192 add_module "$(1)" "$(2)" "$(3)"; 193endef 194 195version_field=$(if $(word $(1),$(2)),$(word $(1),$(2)),0) 196kernel_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)) )) 197 198ifdef DUMP 199 kernel_version_cmp= 200else 201 kernel_version_cmp=$(shell [ $(call kernel_version_merge,$(call split_version,$(2))) $(1) $(call kernel_version_merge,$(call split_version,$(3))) ] && echo 1 ) 202endif 203 204CompareKernelPatchVer=$(if $(call kernel_version_cmp,-$(2),$(1),$(3)),1,0) 205 206kernel_patchver_gt=$(call kernel_version_cmp,-gt,$(KERNEL_PATCHVER),$(1)) 207kernel_patchver_ge=$(call kernel_version_cmp,-ge,$(KERNEL_PATCHVER),$(1)) 208kernel_patchver_eq=$(call kernel_version_cmp,-eq,$(KERNEL_PATCHVER),$(1)) 209kernel_patchver_le=$(call kernel_version_cmp,-le,$(KERNEL_PATCHVER),$(1)) 210kernel_patchver_lt=$(call kernel_version_cmp,-lt,$(KERNEL_PATCHVER),$(1)) 211 212