| 1 | # $FreeWRT$
|
|---|
| 2 | #-
|
|---|
| 3 | # This file is part of the FreeWRT project. FreeWRT is copyrighted
|
|---|
| 4 | # material, please see the LICENCE file in the top-level directory
|
|---|
| 5 | # or at http://www.freewrt.org/license for details.
|
|---|
| 6 |
|
|---|
| 7 | include $(TOPDIR)/rules.mk
|
|---|
| 8 |
|
|---|
| 9 | LINUX_VERSION:=2.4.33.3
|
|---|
| 10 | LINUX_RELEASE:=1
|
|---|
| 11 | LINUX_KERNEL_MD5SUM:=ab5940e952c3e337128b9f97c51eab94
|
|---|
| 12 |
|
|---|
| 13 | KERNEL:=unknown
|
|---|
| 14 | ifneq (,$(findstring 2.4.,$(LINUX_VERSION)))
|
|---|
| 15 | KERNEL:=2.4
|
|---|
| 16 | endif
|
|---|
| 17 | ifneq (,$(findstring 2.6.,$(LINUX_VERSION)))
|
|---|
| 18 | KERNEL:=2.6
|
|---|
| 19 | endif
|
|---|
| 20 |
|
|---|
| 21 | ifeq ($(KERNEL),2.6)
|
|---|
| 22 | LINUX_KMOD_SUFFIX=ko
|
|---|
| 23 | else
|
|---|
| 24 | LINUX_KMOD_SUFFIX=o
|
|---|
| 25 | endif
|
|---|
| 26 |
|
|---|
| 27 | MODULES_SUBDIR := lib/modules/$(LINUX_VERSION)
|
|---|
| 28 | LINUX_BUILD_DIR := $(BUILD_DIR)/linux-$(KERNEL)-$(BOARD)
|
|---|
| 29 | LINUX_DIR := $(LINUX_BUILD_DIR)/linux-$(LINUX_VERSION)
|
|---|
| 30 | LINUX_KERNEL := $(LINUX_BUILD_DIR)/vmlinux
|
|---|
| 31 | LINUX_TARGET_DIR := $(LINUX_BUILD_DIR)/root
|
|---|
| 32 |
|
|---|
| 33 | IPKG_KERNEL := IPKG_TMP=$(BUILD_DIR)/tmp IPKG_INSTROOT=$(LINUX_TARGET_DIR) IPKG_CONF_DIR=$(LINUX_BUILD_DIR) $(SCRIPT_DIR)/ipkg -force-defaults -force-depends
|
|---|
| 34 |
|
|---|
| 35 | LINUX_KARCH:=$(shell echo $(ARCH) | sed -e 's/i[3-9]86/i386/' \
|
|---|
| 36 | -e 's/mipsel/mips/' \
|
|---|
| 37 | -e 's/mipseb/mips/' \
|
|---|
| 38 | -e 's/powerpc/ppc/' \
|
|---|
| 39 | -e 's/sh[234]/sh/' \
|
|---|
| 40 | -e 's/armeb/arm/' \
|
|---|
| 41 | )
|
|---|
| 42 |
|
|---|
| 43 | KPKG_MAKEOPTS := IPKG="$(IPKG_KERNEL)" \
|
|---|
| 44 | BOARD="$(BOARD)" \
|
|---|
| 45 | KERNEL="$(KERNEL)" \
|
|---|
| 46 | TARGET_DIR="$(LINUX_TARGET_DIR)" \
|
|---|
| 47 | LINUX_BUILD_DIR="$(LINUX_BUILD_DIR)" \
|
|---|
| 48 | LINUX_DIR="$(LINUX_DIR)" \
|
|---|
| 49 | LINUX_VERSION="$(LINUX_VERSION)" \
|
|---|
| 50 | LINUX_RELEASE="$(LINUX_RELEASE)"
|
|---|
| 51 |
|
|---|
| 52 | KMOD_BUILD_DIR := $(LINUX_BUILD_DIR)/linux-modules
|
|---|
| 53 | MODULES_DIR := $(LINUX_BUILD_DIR)/modules/$(MODULES_SUBDIR)
|
|---|
| 54 | TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR)
|
|---|
| 55 |
|
|---|
| 56 | KERNEL_IPKG:=$(LINUX_BUILD_DIR)/kernel_$(BOARD)-$(KERNEL)-$(LINUX_VERSION)_$(ARCH).ipk
|
|---|
| 57 | INSTALL_TARGETS:=
|
|---|
| 58 | TARGETS:=
|
|---|
| 59 |
|
|---|
| 60 | define KMOD_template
|
|---|
| 61 | ifeq ($$(strip $(4)),)
|
|---|
| 62 | KDEPEND_$(1):=m
|
|---|
| 63 | else
|
|---|
| 64 | KDEPEND_$(1):=$($(4))
|
|---|
| 65 | endif
|
|---|
| 66 |
|
|---|
| 67 | IDEPEND_$(1):=kernel ($(BOARD)-$(KERNEL)-$(LINUX_VERSION)) $(foreach pkg,$(5),", $(pkg)")
|
|---|
| 68 |
|
|---|
| 69 | PKG_$(1) := $(PACKAGE_DIR)/kmod-$(2)_$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)_$(ARCH).ipk
|
|---|
| 70 | I_$(1) := $(KMOD_BUILD_DIR)/ipkg/$(2)
|
|---|
| 71 |
|
|---|
| 72 | ifeq ($$(KDEPEND_$(1)),m)
|
|---|
| 73 | ifneq ($$(FWRT_PACKAGE_KMOD_$(1)),)
|
|---|
| 74 | TARGETS+=$$(PKG_$(1))
|
|---|
| 75 | endif
|
|---|
| 76 | ifeq ($$(FWRT_PACKAGE_KMOD_$(1)),y)
|
|---|
| 77 | INSTALL_TARGETS+=$$(PKG_$(1))
|
|---|
| 78 | endif
|
|---|
| 79 | endif
|
|---|
| 80 |
|
|---|
| 81 | $$(PKG_$(1)): $(LINUX_DIR)/.modules-install
|
|---|
| 82 | rm -rf $$(I_$(1))
|
|---|
| 83 | $(SCRIPT_DIR)/make-ipkg-dir.sh $$(I_$(1)) ../control/kmod-$(2).control $(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE) $(ARCH)
|
|---|
| 84 | echo "Depends: $$(IDEPEND_$(1))" >> $$(I_$(1))/CONTROL/control
|
|---|
| 85 | ifneq ($(strip $(3)),)
|
|---|
| 86 | mkdir -p $$(I_$(1))/lib/modules/$(LINUX_VERSION)
|
|---|
| 87 | $(CP) $(3) $$(I_$(1))/lib/modules/$(LINUX_VERSION)
|
|---|
| 88 | endif
|
|---|
| 89 | ifneq ($(6),)
|
|---|
| 90 | mkdir -p $$(I_$(1))/etc/modules.d
|
|---|
| 91 | for module in $(7); do \
|
|---|
| 92 | echo $$$$module >> $$(I_$(1))/etc/modules.d/$(6)-$(2); \
|
|---|
| 93 | done
|
|---|
| 94 | echo "#!/bin/sh" >> $$(I_$(1))/CONTROL/postinst
|
|---|
| 95 | echo "if [ -z \"\$$$${IPKG_INSTROOT}\" ]; then" >> $$(I_$(1))/CONTROL/postinst
|
|---|
| 96 | echo ". /etc/functions.sh" >> $$(I_$(1))/CONTROL/postinst
|
|---|
| 97 | echo "load_modules /etc/modules.d/$(6)-$(2)" >> $$(I_$(1))/CONTROL/postinst
|
|---|
| 98 | echo "fi" >> $$(I_$(1))/CONTROL/postinst
|
|---|
| 99 | chmod 0755 $$(I_$(1))/CONTROL/postinst
|
|---|
| 100 | endif
|
|---|
| 101 | $(8)
|
|---|
| 102 | $(IPKG_BUILD) $$(I_$(1)) $(PACKAGE_DIR) $(MAKE_TRACE)
|
|---|
| 103 | endef
|
|---|
| 104 |
|
|---|
| 105 | # include kernel configuration, first try model specific if exist
|
|---|
| 106 | # otherwise use generic root filesystem specific for this board
|
|---|
| 107 |
|
|---|
| 108 | # squashfs with mini-fo overlay
|
|---|
| 109 | ifeq ($(FS),squashfs-overlay)
|
|---|
| 110 | MODELCONFIG:=$(shell test -f $(MODEL)/config/config.squashfs_overlay && echo y 2>/dev/null)
|
|---|
| 111 | ifneq ($(strip $(MODELCONFIG)),)
|
|---|
| 112 | include $(MODEL)/config/config.squashfs_overlay
|
|---|
| 113 | else
|
|---|
| 114 | include $(FS)/config/config.squashfs_overlay
|
|---|
| 115 | endif
|
|---|
| 116 | endif
|
|---|
| 117 |
|
|---|
| 118 | # squashfs with symlinks in a jffs2 partition
|
|---|
| 119 | ifeq ($(FS),squashfs-symlinks)
|
|---|
| 120 | MODELCONFIG:=$(shell test -f $(MODEL)/config/config.squashfs_symlinks && echo y 2>/dev/null)
|
|---|
| 121 | ifneq ($(strip $(MODELCONFIG)),)
|
|---|
| 122 | include $(MODEL)/config/config.squashfs_symlinks
|
|---|
| 123 | else
|
|---|
| 124 | include $(FS)/config/config.squashfs_symlinks
|
|---|
| 125 | endif
|
|---|
| 126 | endif
|
|---|
| 127 |
|
|---|
| 128 | # jffs2
|
|---|
| 129 | ifeq ($(FS),jffs2)
|
|---|
| 130 | MODELCONFIG:=$(shell test -f $(MODEL)/config/config.jffs2 && echo y 2>/dev/null)
|
|---|
| 131 | ifneq ($(strip $(MODELCONFIG)),)
|
|---|
| 132 | include $(MODEL)/config/config.jffs2
|
|---|
| 133 | else
|
|---|
| 134 | include $(FS)/config/config.jffs2
|
|---|
| 135 | endif
|
|---|
| 136 | endif
|
|---|
| 137 |
|
|---|
| 138 |
|
|---|
| 139 | include $(TOPDIR)/mk/netfilter.mk
|
|---|
| 140 | include $(TOPDIR)/mk/modules-$(KERNEL).mk
|
|---|
| 141 |
|
|---|
| 142 | LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.bz2
|
|---|
| 143 | LINUX_SITE=http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
|
|---|
| 144 | http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
|
|---|
| 145 | http://www.kernel.org/pub/linux/kernel/v$(KERNEL) \
|
|---|
| 146 | http://www.de.kernel.org/pub/linux/kernel/v$(KERNEL)
|
|---|
| 147 |
|
|---|
| 148 | KERNEL_IDIR:=$(LINUX_BUILD_DIR)/kernel-ipkg
|
|---|
| 149 |
|
|---|
| 150 | $(TARGETS): $(PACKAGE_DIR)
|
|---|
| 151 |
|
|---|
| 152 | $(PACKAGE_DIR):
|
|---|
| 153 | @mkdir -p $(PACKAGE_DIR)
|
|---|
| 154 |
|
|---|
| 155 | $(DL_DIR)/$(LINUX_SOURCE):
|
|---|
| 156 | -mkdir -p $(DL_DIR)
|
|---|
| 157 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-download
|
|---|
| 158 | $(SCRIPT_DIR)/download.pl $(DL_DIR) $(LINUX_SOURCE) $(LINUX_KERNEL_MD5SUM) $(LINUX_SITE) $(MAKE_TRACE)
|
|---|
| 159 |
|
|---|
| 160 | $(LINUX_DIR)/.unpacked: $(DL_DIR)/$(LINUX_SOURCE)
|
|---|
| 161 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-prepare
|
|---|
| 162 | -mkdir -p $(LINUX_BUILD_DIR)
|
|---|
| 163 | bzcat $(DL_DIR)/$(LINUX_SOURCE) | (cd $(LINUX_BUILD_DIR); tar xf - )
|
|---|
| 164 | rm -f $(BUILD_DIR)/linux
|
|---|
| 165 | ln -s $(LINUX_BUILD_DIR)/linux-$(LINUX_VERSION) $(BUILD_DIR)/linux
|
|---|
| 166 | touch $@
|
|---|
| 167 |
|
|---|
| 168 | $(LINUX_DIR)/.patched: $(LINUX_DIR)/.unpacked
|
|---|
| 169 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-patch
|
|---|
| 170 | -[ -d ../generic-$(KERNEL)/patches ] && $(PATCH) $(LINUX_DIR) ../generic-$(KERNEL)/patches $(MAKE_TRACE)
|
|---|
| 171 | -[ -d ./patches ] && $(PATCH) $(LINUX_DIR) ./patches $(MAKE_TRACE)
|
|---|
| 172 | -[ -d ./$(MODEL)/patches ] && $(PATCH) $(LINUX_DIR) ./$(MODEL)/patches $(MAKE_TRACE)
|
|---|
| 173 | ifeq ($(FS),squashfs-overlay)
|
|---|
| 174 | ifneq ($(strip $(MODELCONFIG)),)
|
|---|
| 175 | $(CP) $(MODEL)/config/config.squashfs_overlay $(LINUX_DIR)/.config
|
|---|
| 176 | else
|
|---|
| 177 | $(CP) $(FS)/config/config.squashfs_overlay $(LINUX_DIR)/.config
|
|---|
| 178 | endif
|
|---|
| 179 | endif
|
|---|
| 180 | ifeq ($(FS),squashfs-symlinks)
|
|---|
| 181 | ifneq ($(strip $(MODELCONFIG)),)
|
|---|
| 182 | $(CP) $(MODEL)/config/config.squashfs_symlinks $(LINUX_DIR)/.config
|
|---|
| 183 | else
|
|---|
| 184 | $(CP) $(FS)/config/config.squashfs_symlinks $(LINUX_DIR)/.config
|
|---|
| 185 | endif
|
|---|
| 186 | endif
|
|---|
| 187 | ifeq ($(FS),jffs2)
|
|---|
| 188 | ifneq ($(strip $(MODELCONFIG)),)
|
|---|
| 189 | $(CP) $(MODEL)/config/config.jffs2 $(LINUX_DIR)/.config
|
|---|
| 190 | else
|
|---|
| 191 | $(CP) $(FS)/config/config.jffs2 $(LINUX_DIR)/.config
|
|---|
| 192 | endif
|
|---|
| 193 | endif
|
|---|
| 194 | touch $@
|
|---|
| 195 |
|
|---|
| 196 | ifeq ($(KERNEL),2.4)
|
|---|
| 197 | $(LINUX_DIR)/.configured: $(LINUX_DIR)/.patched
|
|---|
| 198 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-configure
|
|---|
| 199 | $(SED) "s,^CROSS_COMPILE.*,CROSS_COMPILE=$(KERNEL_CROSS),g;" \
|
|---|
| 200 | $(LINUX_DIR)/Makefile \
|
|---|
| 201 | $(LINUX_DIR)/arch/*/Makefile
|
|---|
| 202 | $(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) oldconfig include/linux/compile.h include/linux/version.h $(MAKE_TRACE)
|
|---|
| 203 | $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) dep $(MAKE_TRACE)
|
|---|
| 204 | touch $@
|
|---|
| 205 | else
|
|---|
| 206 | $(LINUX_DIR)/.configured: $(LINUX_DIR)/.patched
|
|---|
| 207 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-configure
|
|---|
| 208 | $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) oldconfig prepare scripts $(MAKE_TRACE)
|
|---|
| 209 | touch $@
|
|---|
| 210 | endif
|
|---|
| 211 |
|
|---|
| 212 | $(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.configured
|
|---|
| 213 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-compile
|
|---|
| 214 | $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) PATH=$(TARGET_PATH) $(MAKE_TRACE)
|
|---|
| 215 |
|
|---|
| 216 | $(LINUX_KERNEL): $(LINUX_DIR)/vmlinux
|
|---|
| 217 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-strip
|
|---|
| 218 | $(TARGET_CROSS)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S $< $@ $(MAKE_TRACE)
|
|---|
| 219 | touch -c $(LINUX_KERNEL)
|
|---|
| 220 |
|
|---|
| 221 | $(LINUX_DIR)/.modules-compile:
|
|---|
| 222 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-compile
|
|---|
| 223 | $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) PATH="$(TARGET_PATH)" modules $(MAKE_TRACE)
|
|---|
| 224 | touch $@
|
|---|
| 225 |
|
|---|
| 226 | $(LINUX_DIR)/.modules-install: $(LINUX_DIR)/.modules-compile
|
|---|
| 227 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-install
|
|---|
| 228 | rm -rf $(LINUX_BUILD_DIR)/modules
|
|---|
| 229 | $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" DEPMOD=true INSTALL_MOD_PATH=$(LINUX_BUILD_DIR)/modules modules_install $(MAKE_TRACE)
|
|---|
| 230 | touch $@
|
|---|
| 231 |
|
|---|
| 232 | $(LINUX_DIR)/.linux-compile: $(LINUX_KERNEL) $(LINUX_DIR)/.modules-install
|
|---|
| 233 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-create-packages
|
|---|
| 234 | @$(MAKE) $(KERNEL_IPKG) $(TARGETS) $(MAKE_TRACE)
|
|---|
| 235 | touch $@
|
|---|
| 236 |
|
|---|
| 237 | $(KERNEL_IPKG):
|
|---|
| 238 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-$(MODEL)-$(FS)-create-kernel-package
|
|---|
| 239 | rm -rf $(KERNEL_IDIR)
|
|---|
| 240 | mkdir -p $(KERNEL_IDIR)/etc
|
|---|
| 241 | $(SCRIPT_DIR)/make-ipkg-dir.sh $(KERNEL_IDIR) ../control/kernel.control $(BOARD)-$(KERNEL)-$(LINUX_VERSION) $(ARCH)
|
|---|
| 242 | $(IPKG_BUILD) $(KERNEL_IDIR) $(PACKAGE_DIR) $(MAKE_TRACE)
|
|---|
| 243 |
|
|---|
| 244 | prepare:
|
|---|
| 245 | -mkdir -p $(PACKAGE_DIR)
|
|---|
| 246 |
|
|---|
| 247 | compile: prepare $(LINUX_DIR)/.linux-compile
|
|---|
| 248 | compile-kernel: prepare $(LINUX_KERNEL)
|
|---|
| 249 |
|
|---|
| 250 | install: compile
|
|---|
| 251 | $(MAKE) $(KPKG_MAKEOPTS) $(LINUX_KERNEL) $(MAKE_TRACE)
|
|---|
| 252 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-install
|
|---|
| 253 | @rm -rf $(LINUX_BUILD_DIR)/root*
|
|---|
| 254 | @$(CP) $(BUILD_DIR)/root $(LINUX_BUILD_DIR)/
|
|---|
| 255 | echo -e 'dest root /\noption offline_root $(LINUX_BUILD_DIR)/root' > $(LINUX_BUILD_DIR)/ipkg.conf
|
|---|
| 256 | ifneq ($(strip $(INSTALL_TARGETS)),)
|
|---|
| 257 | $(IPKG_KERNEL) install $(INSTALL_TARGETS) $(MAKE_TRACE)
|
|---|
| 258 | endif
|
|---|
| 259 |
|
|---|
| 260 | rebuild:
|
|---|
| 261 | @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-rebuild
|
|---|
| 262 | rm -rf $(LINUX_BUILD_DIR)/linux-$(LINUX_VERSION)
|
|---|
| 263 | rm -f $(TARGETS)
|
|---|
| 264 | $(MAKE) compile $(MAKE_TRACE)
|
|---|
| 265 |
|
|---|
| 266 | clean:
|
|---|
| 267 | rm -rf $(LINUX_BUILD_DIR)
|
|---|
| 268 | rm -f $(TARGETS)
|
|---|