1 #############################################################
3 # Linux kernel 2.6 target
5 #############################################################
6 ifneq ($(filter $(TARGETS
),linux26
),)
9 ifeq ($(LINUX_HEADERS_VERSION
),)
10 # Version of Linux to download and then apply patches to
11 # XXX: andersee, i do not understand why we need this (BF)
12 DOWNLOAD_LINUX26_VERSION
:=$(strip $(subst ",, $(BR2_DOWNLOAD_LINUX26_VERSION)))
14 LINUX26_VERSION
:=$(strip $(subst ",, $(BR2_LINUX26_VERSION)))
16 LINUX26_RC_PATCH
:=$(strip $(subst ",, $(BR2_LINUX26_RC_PATCH)))
18 LINUX_BSP_PATCH
:=$(strip $(subst ",, $(BR2_LINUX_BSP_ATMEL_PATCH)))
20 MKIMAGE
:=$(BUILD_DIR
)/mkimage
22 ifeq ($(DOWNLOAD_LINUX26_VERSION
),)
23 DOWNLOAD_LINUX26_VERSION
=2.6.19.2
25 # Version of Linux after applying any patches
26 LINUX26_VERSION
=$(DOWNLOAD_LINUX26_VERSION
)
29 else # ---------------------------------------------------
31 # Define DOWNLOAD_LINUX26_VERSION unless defined
32 ifeq ($(strip $(BR2_DOWNLOAD_LINUX26_VERSION
)),)
33 DOWNLOAD_LINUX26_VERSION
=$(LINUX_HEADERS_VERSION
)
35 DOWNLOAD_LINUX26_VERSION
:=$(strip $(subst ",, $(BR2_DOWNLOAD_LINUX26_VERSION)))
40 # Define LINUX26_VERSION unless defined
41 ifeq ($(strip $(BR2_LINUX26_VERSION
)),)
42 LINUX26_VERSION
=$(LINUX_HEADERS_VERSION
)
44 LINUX26_VERSION
:=$(strip $(subst ",, $(BR2_LINUX26_VERSION)))
48 endif # ---------------------------------------------------
50 # Handle case when we want to build using an "rc" patch
51 # Example: to build 2.6.21-rc1 you need to:
52 # * Download linux-2.6.20
53 # * Apply patch-2.6.21-rc1
55 LINUX26_SOURCE
:=linux-
$(DOWNLOAD_LINUX26_VERSION
).
tar.bz2
56 LINUX26_SITE
=http
://ftp.kernel.org
/pub
/linux
/kernel
/v2.6
57 LINUX26_BZCAT
:=$(BZCAT
)
60 LINUX26_FORMAT
:=$(strip $(subst ",, $(BR2_LINUX26_FORMAT)))
63 # Linux kernel configuration file
64 ifeq ($(strip $(LINUX26_KCONFIG
)),)
65 LINUX26_KCONFIG
=$(BR2_BOARD_PATH
)/linux26.config
68 # File name for the Linux kernel binary
69 ifeq ($(strip $(LINUX26_KERNEL
)),)
70 #LINUX26_KERNEL=linux-kernel-$(LINUX26_VERSION)-$(KERNEL_ARCH)
71 LINUX26_KERNEL
:=$(BOARD_NAME
)-linux-
$(LINUX26_VERSION
)-$(DATE
).gz
74 ifeq ($(strip $(LINUX26_BINLOC
)),)
75 LINUX26_BINLOC
=$(LINUX26_FORMAT
)
78 # Put binary in root file system
79 ifeq ($(strip $(BR2_LINUX_IN_ROOTFS
)),y
)
80 ifeq ($(strip $(LINUX26_TARGET
)),)
81 LINUX26_TARGET
:=$(TARGET_DIR
)/boot
/$(LINUX26_BINLOC
)
84 LINUX26_TARGET
:=$(BINARIES_DIR
)/$(LINUX26_KERNEL
)
88 ifeq ($(strip $(LINUX26_BUILD_DIR
)),)
89 LINUX26_BUILD_DIR
=$(PROJECT_BUILD_DIR
)
92 ifeq ($(strip $(BR2_LINUX26_DEFCONFIG
)),y
)
93 LINUX26_DEFCONFIG
=$(BOARD_NAME
)_defconfig
96 # Version of Linux AFTER patches
97 LINUX26_DIR
=$(LINUX26_BUILD_DIR
)/linux-
$(LINUX26_VERSION
)
99 # for packages that need it
100 LINUX_VERSION
=$(LINUX26_VERSION
)
101 LINUX_DIR
=$(LINUX26_DIR
)
102 LINUX_KERNEL
=$(LINUX26_KERNEL
)
105 ifeq ($(strip $(subst ",, $(LINUX26_PATCH_DIR))),)
107 LINUX26_PATCH_DIR
:=$(BR2_BOARD_PATH
)/kernel-patches
/
109 PATCH_DIR
=$(strip $(subst ",, $(LINUX26_PATCH_DIR)))
112 LINUX26_MAKE_FLAGS
= $(TARGET_CONFIGURE_OPTS
) ARCH
=$(KERNEL_ARCH
) \
113 PATH
=$(TARGET_PATH
) INSTALL_MOD_PATH
=$(TARGET_DIR
) \
114 CROSS_COMPILE
=$(KERNEL_CROSS
)
117 @if
[ ! -f
"$(LINUX26_KCONFIG)" ] ; then \
119 echo
"You should create a .config for your kernel"; \
120 echo
"and install it as $(LINUX26_KCONFIG)"; \
125 # Check if we have a release candidate.
126 # This makes life complex
127 # To build linux-2.6.21-rc2 you need to:
128 # * Download linux.2.6.20.tar.bz2
129 # * Download patch-2.6.21-rc2.bz2
130 # I:E you have to download the *previous* major version
132 ifneq ($(LINUX26_RC_PATCH
),)
133 # We have a "release candidate"
134 LINUX26_RC_PATCH_SOURCE
:=$(PROJECT_BUILD_DIR
)/linux-patch
/$(LINUX26_RC_PATCH
)
136 # Create rule to download the patch
137 $(LINUX26_RC_PATCH_SOURCE
):
138 mkdir
-p
$(PROJECT_BUILD_DIR
)/linux-patch
/
139 $(WGET
) -P
$(PROJECT_BUILD_DIR
)/linux-patch
$(LINUX26_SITE
)/$(LINUX26_RC_PATCH
)
140 # $(LINUX26_BZCAT) $(PROJECT_BUILD_DIR)/linux-patch/$(LINUX26_RC_PATCH).bz2
142 # We have a vanilla style linux kernel
143 LINUX26_RC_PATCH_SOURCE
:=
146 ifneq ($(strip $(LINUX_HEADERS_SOURCE
)),$(strip $(LINUX26_SOURCE
)))
147 $(DL_DIR
)/$(LINUX26_SOURCE
):
148 $(WGET
) -P
$(DL_DIR
) $(LINUX26_SITE
)/$(LINUX26_SOURCE
)
151 $(LINUX26_DIR
)/.unpacked
: $(DL_DIR
)/$(LINUX26_SOURCE
) $(LINUX26_RC_PATCH_SOURCE
)
152 rm -rf
$(LINUX26_DIR
)
153 $(LINUX26_BZCAT
) $(DL_DIR
)/$(LINUX26_SOURCE
) |
tar -C
$(LINUX26_BUILD_DIR
) $(TAR_OPTIONS
) -
154 ifneq ($(DOWNLOAD_LINUX26_VERSION
),$(LINUX26_VERSION
))
155 # Rename the dir from the downloaded version to the AFTER patch version
156 mv
-f
$(LINUX26_BUILD_DIR
)/linux-
$(DOWNLOAD_LINUX26_VERSION
) $(LINUX26_DIR
)
158 ifneq ($(LINUX26_RC_PATCH
),)
159 -(cd
$(LINUX26_DIR
); $(LINUX26_BZCAT
) $(LINUX26_RC_PATCH_SOURCE
) | patch
-p1
)
161 -(cd
$(TOOL_BUILD_DIR
); ln
-snf
$(LINUX26_DIR
) linux
)
162 rm -f
$(LINUX26_DIR
)/.kernelrelease
163 echo
$(LINUX26_VERSION
) > $(LINUX26_DIR
)/.kernelrelease
166 $(LINUX26_DIR
)/.patched
: $(LINUX26_DIR
)/.unpacked
168 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) $(LINUX26_PATCH_DIR
)
171 $(LINUX26_DIR
)/.configured
: $(LINUX26_DIR
)/.patched
$(LINUX26_KCONFIG
)
172 -ls
-l
$(LINUX26_DIR
)/.patched
173 -ls
-l
$(LINUX26_KCONFIG
)
174 -ls
-l
$(LINUX26_DIR
)/.configured
175 -ls
-l
$(LINUX26_DIR
)/.unpacked
176 -ls
-l
$(DL_DIR
)/$(LINUX26_SOURCE
)
177 -ls
-l
$(LINUX26_RC_PATCH_SOURCE
)
178 ifeq ($(strip $(BR2_LINUX26_DEFCONFIG
)),y
)
179 make ARCH
=$(ARCH
) -C
$(LINUX26_DIR
) $(BOARD_NAME
)_defconfig
181 cp
-df
--preserve
=mode
,ownership
$(LINUX26_KCONFIG
) $(LINUX26_DIR
)/.config
183 ifeq ($(strip $(BR2_LINUX_CUSTOMIZE
)),y
)
184 make
-C
$(LINUX26_DIR
) xconfig
186 $(SED
) '/CONFIG_AEABI/d' $(LINUX26_DIR
)/.config
187 ifeq ($(BR2_ARM_EABI
),y
)
188 echo
"CONFIG_AEABI=y" >> $(LINUX26_DIR
)/.config
189 $(SED
) '/CONFIG_OABI_COMPAT/d' $(LINUX26_DIR
)/.config
190 echo
"# CONFIG_OABI_COMPAT is not set" >> $(LINUX26_DIR
)/.config
192 echo
"# CONFIG_AEABI is not set" >> $(LINUX26_DIR
)/.config
194 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) oldconfig
include/linux
/version.h
197 $(LINUX26_DIR
)/.depend_done
: $(LINUX26_DIR
)/.configured
198 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) prepare
201 $(LINUX26_DIR
)/arch
/$(ARCH
)/boot
/$(LINUX26_FORMAT
): $(LINUX26_DIR
)/vmlinux
202 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) $(LINUX26_FORMAT
)
203 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) modules
206 $(LINUX26_DIR
)/vmlinux
: $(LINUX26_DIR
)/.depend_done
$(STAGING_DIR
)/include/linux
/version.h
207 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) vmlinux
208 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) modules
213 #-----------------------------------------------------------------------------------
214 # Rule can be enabled by setting
215 # LINUX26_TARGET:= $(TARGET_DIR)/boot/$(LINUX26_BINLOC)
217 $(TARGET_DIR
)/boot
/$(LINUX26_FORMAT
): $(LINUX26_DIR
)/$(LINUX26_FORMAT
)
218 [ -d
$(TARGET_DIR
)/boot
/ ] || mkdir
$(TARGET_DIR
)/boot
219 cp
-a
$(LINUX26_DIR
)/$(LINUX26_FORMAT
) $(LINUX26_DIR
)/System.map
$(TARGET_DIR
)/boot
/$(LINUX26_FORMAT
)
222 #-----------------------------------------------------------------------------------
223 # Rule can be enabled by setting
224 # LINUX26_TARGET:= $(BINARIES_DIR)/$(LINUX26_KERNEL)
225 # LINUX26_FORMAT:= vmlinux
227 $(BINARIES_DIR
)/$(LINUX26_KERNEL
): $(LINUX26_DIR
)/uImage
228 cp
-dpf
$(LINUX26_DIR
)/uImage
$(BINARIES_DIR
)/$(LINUX26_KERNEL
)
229 cp
-dpf
$(LINUX26_DIR
)/uImage
/tftpboot
/$(LINUX26_KERNEL
)
230 mkdir
-p
$(TARGET_DIR
)/boot
/
231 cp
-dpf
$(LINUX26_DIR
)/.config
$(TARGET_DIR
)/boot
/$(BOARD_NAME
)-linux-
$(LINUX26_VERSION
).config
232 cp
-dpf .config
$(TARGET_DIR
)/boot
/$(BOARD_NAME
)-buildroot.config
233 cp
-dpf
$(BUSYBOX_DIR
)/.config
$(TARGET_DIR
)/boot
/busybox.config
235 $(PROJECT_BUILD_DIR
)/linux.bin
: $(LINUX26_DIR
)/vmlinux
236 ${KERNEL_CROSS}objcopy
-O binary
-S
$(LINUX26_DIR
)/vmlinux
$(PROJECT_BUILD_DIR
)/linux.bin
238 $(LINUX26_DIR
)/uImage
: $(LINUX26_DIR
)/arch
/$(ARCH
)/boot
/uImage
239 cp
-dpf
$(LINUX26_DIR
)/arch
/$(ARCH
)/boot
/uImage
$(LINUX26_DIR
)/uImage
242 $(PROJECT_BUILD_DIR
)/xxxx
: $(PROJECT_BUILD_DIR
)/linux.bin
$(MKIMAGE
)
243 gzip
-v9
-c
$(PROJECT_BUILD_DIR
)/linux.bin
> $(PROJECT_BUILD_DIR
)/linux.bin.gz
244 $(MKIMAGE
) -A
$(ARCH
) \
249 -d
$(PROJECT_BUILD_DIR
)/linux.bin.gz \
250 $(LINUX26_DIR
)/uImage
251 rm -f
$(PROJECT_BUILD_DIR
)/linux.bin.gz
252 #-----------------------------------------------------------------------------------
254 $(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/modules.dep
: $(LINUX26_TARGET
) $(TARGET_DIR
)/sbin
/modprobe
$(LINUX26_DIR
)/vmlinux
255 rm -rf
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)
256 rm -f
$(TARGET_DIR
)/sbin
/cardmgr
257 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) \
258 DEPMOD
=$(STAGING_DIR
)/bin
/$(GNU_TARGET_NAME
)-depmod26 \
259 INSTALL_MOD_PATH
=$(TARGET_DIR
) modules_install
260 (cd
$(TARGET_DIR
)/lib
/modules
; \
262 ln
-s
$(LINUX26_VERSION
)/kernel
/drivers .
)
263 chmod a
+x target
/depmod.pl
265 -b
$(TARGET_DIR
)/lib
/modules
/$(DOWNLOAD_LINUX26_VERSION
) \
266 -k
$(LINUX26_DIR
)/vmlinux \
267 -F
$(LINUX26_DIR
)/System.map \
268 > $(TARGET_DIR
)/lib
/modules
/$(shell cat
$(LINUX26_DIR
)/include/config
/kernel.release
2> /dev
/null
)/modules.dep
269 rm -f
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/build
272 $(STAGING_DIR
)/include/linux
/version.h
: $(LINUX26_DIR
)/.configured
273 mkdir
-p
$(STAGING_DIR
)/include
274 tar -ch
-C
$(LINUX26_DIR
)/include -f
- linux |
tar -xf
- -C
$(STAGING_DIR
)/include/
275 tar -ch
-C
$(LINUX26_DIR
)/include -f
- asm |
tar -xf
- -C
$(STAGING_DIR
)/include/
277 linux26-menuconfig
: $(LINUX26_DIR
)/.patched host-sed
278 [ -f
$(LINUX26_DIR
)/.config
] || cp
$(LINUX26_KCONFIG
) $(LINUX26_DIR
)/.config
279 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) menuconfig
280 -[ -f
$(LINUX26_DIR
)/.config
] && touch
$(LINUX26_DIR
)/.configured
282 linux26
: cross-depmod26
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/modules.dep
$(LINUX26_TARGET
)
284 linux26-source
: $(DL_DIR
)/$(LINUX26_SOURCE
)
286 # This has been renamed so we do _NOT_ by default run this on 'make clean'
288 rm -f
$(LINUX26_TARGET
)
289 rm -f
$(PROJECT_BUILD_DIR
)/linux.bin
290 rm -f
$(LINUX26_DIR
)/uImage
291 -$(MAKE
) PATH
=$(TARGET_PATH
) -C
$(LINUX26_DIR
) clean
294 rm -f
$(LINUX26_TARGET
)
295 rm -f
$(PROJECT_BUILD_DIR
)/linux.bin
296 rm -rf
$(LINUX26_DIR
)
299 cp
-dpf
$(LINUX26_DIR
)/.config
$(LINUX26_KCONFIG
)
302 @echo
"LINUX_HEADERS_VERSION" $(LINUX_HEADERS_VERSION
)
303 @echo
"BR2_PACKAGE_LINUX" $(BR2_PACKAGE_LINUX
)
304 @echo
"BR2_CUSTOM_DOWNLOAD_LINUX26_VERSION" $(BR2_CUSTOM_DOWNLOAD_LINUX26_VERSION
)
305 @echo
"BR2_CUSTOM_LINUX26_VERSION" $(BR2_CUSTOM_LINUX26_VERSION
)
306 @echo
"BR2_CUSTOM_LINUX26_RC_PATCH" $(BR2_CUSTOM_LINUX26_RC_PATCH
)
307 @echo
"BR2_LINUX_BSP_PATCH" $(BR2_LINUX_BSP_PATCH
)
308 @echo
"BR2_DOWNLOAD_LINUX26_VERSION" $(BR2_DOWNLOAD_LINUX26_VERSION
)
309 @echo
"BR2_LINUX26_VERSION" $(BR2_LINUX26_VERSION
)
310 @echo
"LINUX26_VERSION" $(LINUX26_VERSION
)
311 @echo
"BR2_LINUX26_RC_PATCH" $(BR2_LINUX26_RC_PATCH
)
312 @echo
"BR2_PACKAGE_LINUX26_KCONFIG" $(BR2_PACKAGE_LINUX_KCONFIG
)
313 @echo
"LINUX26_KCONFIG" $(LINUX26_KCONFIG
)
314 @echo
"BR2_LINUX_BIN_CUSTOM" $(BR2_LINUX_BIN_CUSTOM
)
315 @echo
"BR2_PACKAGE_LINUX_FORMAT" $(BR2_PACKAGE_LINUX_FORMAT
)
316 @echo
"BR2_LINUX_IN_ROOTFS" $(BR2_LINUX_IN_ROOTFS
)
317 @echo
"BR2_LINUX_2_6_22_1" $(BR2_LINUX_2_6_22_1
)