Root/include/kernel.mk

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

Archive Download this file



interactive