Root/include/kernel.mk

1#
2# Copyright (C) 2006 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>
16else
17  export GCC_HONOUR_COPTS=s
18
19  ifeq ($(KERNEL),2.6)
20    LINUX_KMOD_SUFFIX=ko
21  else
22    LINUX_KMOD_SUFFIX=o
23  endif
24
25  ifneq (,$(findstring uml,$(BOARD)))
26    KERNEL_CC?=$(HOSTCC)
27    KERNEL_CROSS?=
28  else
29    KERNEL_CC?=$(TARGET_CC)
30    KERNEL_CROSS?=$(TARGET_CROSS)
31  endif
32
33  ifeq ($(TARGET_BUILD),1)
34    PATCH_DIR ?= ./patches$(if $(wildcard ./patches-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
35    FILES_DIR ?= $(foreach dir,$(wildcard ./files ./files-$(KERNEL_PATCHVER)),"$(dir)")
36  endif
37  KERNEL_BUILD_DIR ?= $(BUILD_DIR_BASE)/linux-$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET))$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
38  LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)
39
40  MODULES_SUBDIR:=lib/modules/$(LINUX_VERSION)
41  TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR)
42
43  LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux
44
45  LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.bz2
46  TESTING:=$(if $(findstring -rc,$(LINUX_VERSION)),/testing,)
47  ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE)),)
48    LINUX_SITE:=@KERNEL/linux/kernel/v$(KERNEL)$(TESTING)
49  endif
50
51  ifneq ($(TARGET_BUILD),1)
52    PKG_BUILD_DIR ?= $(KERNEL_BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
53  endif
54endif
55
56ifneq (,$(findstring uml,$(BOARD)))
57  LINUX_KARCH=um
58else
59  ifeq (,$(LINUX_KARCH))
60    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))))))))))
61  endif
62endif
63
64
65define KernelPackage/Defaults
66  FILES:=
67  AUTOLOAD:=
68endef
69
70define ModuleAutoLoad
71    export modules=; \
72    add_module() { \
73        mkdir -p $(2)/etc/modules.d; \
74        ( \
75            [ "$$$$$$$$3" = "1" ] && { \
76                echo '# May be required for rootfs' ; \
77            } ; \
78            for mod in $$$$$$$$2; do \
79                getvar mod; \
80            done \
81        ) > $(2)/etc/modules.d/$$$$$$$$1-$(1); \
82        modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$1-$(1)"; \
83    }; \
84    $(3) \
85    if [ -n "$$$$$$$$modules" ]; then \
86        mkdir -p $(2)/etc/modules.d; \
87        mkdir -p $(2)/CONTROL; \
88        echo "#!/bin/sh" > $(2)/CONTROL/postinst; \
89        echo "[ -z \"\$$$$$$$$IPKG_INSTROOT\" ] || exit 0" >> $(2)/CONTROL/postinst; \
90        echo ". /etc/functions.sh" >> $(2)/CONTROL/postinst; \
91        echo "load_modules $$$$$$$$modules" >> $(2)/CONTROL/postinst; \
92        chmod 0755 $(2)/CONTROL/postinst; \
93    fi
94endef
95
96ifeq ($(DUMP)$(TARGET_BUILD),)
97  -include $(LINUX_DIR)/.config
98endif
99
100define KernelPackage/depends
101  $(STAMP_BUILT): $(LINUX_DIR)/.config
102  define KernelPackage/depends
103  endef
104endef
105
106define KernelPackage
107  NAME:=$(1)
108  $(eval $(call Package/Default))
109  $(eval $(call KernelPackage/Defaults))
110  $(eval $(call KernelPackage/$(1)))
111  $(eval $(call KernelPackage/$(1)/$(KERNEL)))
112  $(eval $(call KernelPackage/$(1)/$(BOARD)))
113
114  define Package/kmod-$(1)
115    TITLE:=$(TITLE)
116    SECTION:=kernel
117    CATEGORY:=Kernel modules
118    DESCRIPTION:=$(DESCRIPTION)
119    EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)-$(LINUX_RELEASE))
120    VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),+$(PKG_VERSION))-$(if $(PKG_RELEASE),$(PKG_RELEASE),$(LINUX_RELEASE))
121    $(call KernelPackage/$(1))
122    $(call KernelPackage/$(1)/$(KERNEL))
123    $(call KernelPackage/$(1)/$(BOARD))
124  endef
125
126  ifdef KernelPackage/$(1)/description
127    define Package/kmod-$(1)/description
128$(call KernelPackage/$(1)/description)
129    endef
130  endif
131
132  ifdef KernelPackage/$(1)/config
133    define Package/kmod-$(1)/config
134$(call KernelPackage/$(1)/config)
135    endef
136  endif
137
138  $(call KernelPackage/depends)
139
140  ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m,$(foreach c,$(filter-out %=y %=n %=m,$(KCONFIG)),$($(c)))),.),)
141    ifneq ($(strip $(FILES)),)
142      define Package/kmod-$(1)/install
143          mkdir -p $$(1)/lib/modules/$(LINUX_VERSION)
144          $(CP) -L $$(FILES) $$(1)/lib/modules/$(LINUX_VERSION)/
145          $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD))
146          $(call KernelPackage/$(1)/install,$$(1))
147      endef
148    endif
149  $(if $(CONFIG_PACKAGE_kmod-$(1)),
150    else
151      compile: kmod-$(1)-unavailable
152      kmod-$(1)-unavailable:
153        @echo "WARNING: kmod-$(1) is not available in the kernel config"
154  )
155  endif
156  $$(eval $$(call BuildPackage,kmod-$(1)))
157
158  $$(IPKG_kmod-$(1)): $$(wildcard $$(FILES))
159endef
160
161define AutoLoad
162  add_module $(1) "$(2)" $(3);
163endef
164
165ifdef DUMP
166  CompareKernelPatchVer=0
167else
168  define CompareKernelPatchVer
169    $(shell [ $$(echo $(1) | tr . 0) -$(2) $$(echo $(3) | tr . 0) ] && echo 1 || echo 0)
170  endef
171endif
172
173

Archive Download this file



interactive