2 # Copyright (C) 2006 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
9 include $(INCLUDE_DIR
)/kernel-version.mk
10 include $(INCLUDE_DIR
)/host.mk
11 include $(INCLUDE_DIR
)/kernel.mk
12 include $(INCLUDE_DIR
)/prereq.mk
14 LINUX_CONFIG ?
= .
/config
/default
16 -include $(TOPDIR
)/target
/linux
/generic-
$(KERNEL
)/config-template
17 -include $(LINUX_CONFIG
)
19 ifneq ($(CONFIG_ATM
),)
22 ifneq ($(CONFIG_PCI
),)
25 ifneq ($(CONFIG_USB
),)
28 ifneq ($(CONFIG_PCMCIA
),)
31 ifneq ($(CONFIG_VIDEO_DEV
),)
36 FEATURES
:=$(sort $(FEATURES
))
38 # For target profile selection - the default set
39 DEFAULT_PACKAGES
:=base-files libgcc uclibc bridge busybox dnsmasq dropbear iptables mtd ppp ppp-mod-pppoe mtd kmod-ipt-nathelper
41 DEFAULT_PACKAGES
+=udevtrigger hotplug2
50 ifneq (,$(findstring uml
,$(BOARD
)))
53 LINUX_KARCH
:=$(shell echo
$(ARCH
) | sed
-e
's/i[3-9]86/i386/' \
63 ifneq (,$(findstring x86
,$(BOARD
)))
66 ifneq (,$(findstring rdc
,$(BOARD
)))
69 ifneq (,$(findstring ppc
,$(BOARD
)))
74 define Kernel
/Prepare
/Default
75 bzcat
$(DL_DIR
)/$(LINUX_SOURCE
) |
tar -C
$(KERNEL_BUILD_DIR
) $(TAR_OPTIONS
)
76 if
[ -d
$(GENERIC_PLATFORM_DIR
)/patches
]; then
$(PATCH
) $(LINUX_DIR
) $(GENERIC_PLATFORM_DIR
)/patches
; fi
77 if
[ -d .
/files
]; then
$(CP
) .
/files
/* $(LINUX_DIR
)/; fi
78 if
[ -d .
/patches
]; then
$(PATCH
) $(LINUX_DIR
) .
/patches
; fi
81 $(call Kernel
/Prepare
/Default
)
84 KERNEL_MAKEOPTS
:= -C
$(LINUX_DIR
) \
85 CROSS_COMPILE
="$(KERNEL_CROSS)" \
86 ARCH
="$(LINUX_KARCH)" \
87 CONFIG_SHELL
="$(BASH)"
89 define Kernel
/Configure
/2.4
90 $(SED
) "s,\-mcpu=,\-mtune=,g;" $(LINUX_DIR
)/arch
/mips
/Makefile
91 $(MAKE
) $(KERNEL_MAKEOPTS
) CC
="$(KERNEL_CC)" oldconfig
include/linux
/compile.h
include/linux
/version.h
92 $(MAKE
) $(KERNEL_MAKEOPTS
) dep
94 define Kernel
/Configure
/2.6
95 $(MAKE
) $(KERNEL_MAKEOPTS
) CC
="$(KERNEL_CC)" oldconfig prepare scripts
97 define Kernel
/Configure
/Default
98 @if
[ -f
"./config/profile-$(PROFILE)" ]; then \
99 $(SCRIPT_DIR
)/config.pl
'+' $(GENERIC_PLATFORM_DIR
)/config-template
'+' $(LINUX_CONFIG
) .
/config
/profile-
$(PROFILE
) > $(LINUX_DIR
)/.config
; \
101 $(SCRIPT_DIR
)/config.pl
'+' $(GENERIC_PLATFORM_DIR
)/config-template
$(LINUX_CONFIG
) > $(LINUX_DIR
)/.config
; \
104 define Kernel
/Configure
105 $(call Kernel
/Configure
/Default
)
109 define Kernel
/CompileModules
/Default
110 $(MAKE
) -j
$(CONFIG_JLEVEL
) $(KERNEL_MAKEOPTS
) CC
="$(KERNEL_CC)" modules
111 $(MAKE
) $(KERNEL_MAKEOPTS
) CC
="$(KERNEL_CC)" DEPMOD
=true INSTALL_MOD_PATH
=$(KERNEL_BUILD_DIR
)/modules modules_install
113 define Kernel
/CompileModules
114 $(call Kernel
/CompileModules
/Default
)
119 ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS
),y
)
120 define Kernel
/SetInitramfs
121 mv
$(LINUX_DIR
)/.config
$(LINUX_DIR
)/.config.old
122 grep
-v INITRAMFS
$(LINUX_DIR
)/.config.old
> $(LINUX_DIR
)/.config
123 echo
'CONFIG_INITRAMFS_SOURCE="../../root"' >> $(LINUX_DIR
)/.config
124 echo
'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR
)/.config
125 echo
'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR
)/.config
126 mkdir
-p
$(BUILD_DIR
)/root
/etc
/init.d
127 $(CP
) $(GENERIC_PLATFORM_DIR
)/files
/init
$(BUILD_DIR
)/root
/
130 define Kernel
/SetInitramfs
131 mv
$(LINUX_DIR
)/.config
$(LINUX_DIR
)/.config.old
132 grep
-v INITRAMFS
$(LINUX_DIR
)/.config.old
> $(LINUX_DIR
)/.config
133 rm -f
$(BUILD_DIR
)/root
/init
$(BUILD_DIR
)/root
/etc
/init.d
/S00initramfs
134 echo
'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR
)/.config
138 define Kernel
/CompileImage
/Default
139 $(call Kernel
/SetInitramfs
)
140 $(MAKE
) -j
$(CONFIG_JLEVEL
) $(KERNEL_MAKEOPTS
) CC
="$(KERNEL_CC)" $(KERNELNAME
)
141 $(KERNEL_CROSS
)objcopy
-O binary
-R .reginfo
-R .note
-R .comment
-R .mdebug
-S
$(LINUX_DIR
)/vmlinux
$(LINUX_KERNEL
)
142 $(KERNEL_CROSS
)objcopy
-R .reginfo
-R .note
-R .comment
-R .mdebug
-S
$(LINUX_DIR
)/vmlinux
$(KERNEL_BUILD_DIR
)/vmlinux.elf
144 define Kernel
/CompileImage
145 $(call Kernel
/CompileImage
/Default
)
148 define Kernel
/Clean
/Default
149 rm -f
$(LINUX_DIR
)/.linux-compile
150 rm -f
$(KERNEL_BUILD_DIR
)/linux-
$(LINUX_VERSION
)/.configured
151 rm -f
$(LINUX_KERNEL
)
152 $(MAKE
) -C
$(KERNEL_BUILD_DIR
)/linux-
$(LINUX_VERSION
) clean
156 $(call Kernel
/Clean
/Default
)
160 ifneq ($(LINUX_SITE
),)
161 $(DL_DIR
)/$(LINUX_SOURCE
):
163 $(SCRIPT_DIR
)/download.pl
$(DL_DIR
) $(LINUX_SOURCE
) $(LINUX_KERNEL_MD5SUM
) $(LINUX_SITE
)
166 $(LINUX_DIR
)/.prepared
: $(DL_DIR
)/$(LINUX_SOURCE
)
167 -rm -rf
$(KERNEL_BUILD_DIR
)
168 -mkdir
-p
$(KERNEL_BUILD_DIR
)
169 $(call Kernel
/Prepare
)
172 $(LINUX_DIR
)/.configured
: $(LINUX_DIR
)/.prepared
$(LINUX_CONFIG
)
173 $(call Kernel
/Configure
)
174 $(call Kernel
/Configure
/$(KERNEL
))
177 $(LINUX_DIR
)/.modules
: $(LINUX_DIR
)/.configured
178 rm -rf
$(KERNEL_BUILD_DIR
)/modules
179 @
rm -f
$(BUILD_DIR
)/linux
180 ln
-sf
$(KERNEL_BUILD_DIR
)/linux-
$(LINUX_VERSION
) $(BUILD_DIR
)/linux
181 $(call Kernel
/CompileModules
)
184 $(LINUX_DIR
)/.image
: $(LINUX_DIR
)/.configured FORCE
185 $(call Kernel
/CompileImage
)
193 @echo
'Target: $(BOARD)-$(KERNEL)'
194 @echo
'Target-Name: $(BOARDNAME) [$(KERNEL)]'
195 @echo
'Target-Path: $(subst $(TOPDIR)/,,$(PWD))'
196 @echo
'Target-Arch: $(ARCH)'
197 @echo
'Target-Features: $(FEATURES)'
198 @echo
'Linux-Version: $(LINUX_VERSION)'
199 @echo
'Linux-Release: $(LINUX_RELEASE)'
200 @echo
'Linux-Kernel-Arch: $(LINUX_KARCH)'
201 @echo
'Target-Description:'
202 @getvar
$(call shvar
,Target
/Description
)
204 @echo
'Default-Packages: $(DEFAULT_PACKAGES)'
214 define Profile
/Default
219 confname
=$(subst .
,_
,$(subst -,_
,$(1)))
221 $(eval
$(call Profile
/Default
))
222 $(eval
$(call Profile
/$(1)))
223 $(eval
$(call shexport
,Profile
/$(1)/Description
))
225 echo
"Target-Profile: $(1)"; \
226 echo
"Target-Profile-Name: $(NAME)"; \
227 echo
"Target-Profile-Packages: $(PACKAGES)"; \
228 if
[ -f .
/config
/profile-
$(1) ]; then \
229 echo
"Target-Profile-Kconfig: yes"; \
231 echo
"Target-Profile-Description:"; \
232 getvar
"$(call shvar,Profile/$(1)/Description)"; \
235 ifeq ($(CONFIG_LINUX_
$(call confname
,$(KERNEL
)_
$(1))),y
)
240 $(eval
$(call shexport
,Target
/Description
))
242 download
: $(DL_DIR
)/$(LINUX_SOURCE
)
243 prepare
: $(LINUX_DIR
)/.configured
$(TMP_DIR
)/.kernel.mk
244 compile
: $(LINUX_DIR
)/.modules
245 menuconfig
: $(LINUX_DIR
)/.prepared FORCE
246 $(call Kernel
/Configure
)
247 $(SCRIPT_DIR
)/config.pl
'+' $(GENERIC_PLATFORM_DIR
)/config-template
$(LINUX_CONFIG
) > $(LINUX_DIR
)/.config
248 $(MAKE
) -C
$(LINUX_DIR
) $(KERNEL_MAKEOPTS
) menuconfig
249 $(SCRIPT_DIR
)/config.pl
'>' $(GENERIC_PLATFORM_DIR
)/config-template
$(LINUX_DIR
)/.config
> $(LINUX_CONFIG
)
251 install: $(LINUX_DIR
)/.image
254 rm -f
$(STAMP_DIR
)/.linux-compile
255 rm -rf
$(KERNEL_BUILD_DIR
)
259 @if
[ -f
$(LINUX_KERNEL
) ]; then \