1 #############################################################
3 # Linux kernel 2.6 target
5 #############################################################
7 # XXX This crap should be in project!
9 BOARD_PATH
:=$(strip $(subst ",,$(BR2_BOARD_PATH)))
13 # Linux kernel configuration file
14 # Has to be set by the target/device
15 # If it is not set by the target/device, then pick the one from .config
16 ifndef LINUX26_KCONFIG
17 ifneq ($(strip $(subst ",,$(BR2_PACKAGE_LINUX_KCONFIG))),)
18 LINUX26_KCONFIG:=$(strip $(subst ",,$(BR2_PACKAGE_LINUX_KCONFIG
)))
22 # LINUX26_KCONFIG=$(BOARD_PATH)/linux26.config
27 ifneq ($(strip $(subst ",,$(BR2_PACKAGE_LINUX_FORMAT))),)
28 LINUX26_FORMAT:=$(strip $(subst ",,$(BR2_PACKAGE_LINUX_FORMAT
)))
32 LINUX26_FORMAT
:=zImage
37 ifneq ($(filter $(TARGETS
),linux26
),)
39 ifeq ($(DOWNLOAD_LINUX26_VERSION
),)
40 # User did not define linux version, try using headers
41 ifeq ($(LINUX_HEADERS_VERSION
),)
42 # We did not have headers (this is for real???)
43 # Version of linuc before patches
44 DOWNLOAD_LINUX26_VERSION
=2.6.22.1
45 # Version of Linux after applying any patches
46 LINUX26_VERSION
=2.6.22.1
48 # OK, we have headers, use them...
49 DOWNLOAD_LINUX26_VERSION
=$(LINUX_HEADERS_VERSION
)
50 LINUX26_VERSION
=$(LINUX_HEADERS_VERSION
)
54 LINUX26_SOURCE
=linux-
$(DOWNLOAD_LINUX26_VERSION
).
tar.bz2
55 LINUX26_BZCAT
:=$(BZCAT
)
56 LINUX26_SITE
=$(BR2_KERNEL_MIRROR
)/linux
/kernel
/v2.6
59 # Has to be set by the target/device
62 ifeq ($(LINUX26_FORMAT
),vmlinux
)
63 LINUX26_BINLOC
=$(LINUX26_FORMAT
)
65 LINUX26_BINLOC
=arch
/$(KERNEL_ARCH
)/boot
/$(LINUX26_FORMAT
)
69 # File name for the Linux kernel binary
71 LINUX26_KERNEL
=$(BINARIES_DIR
)/linux-kernel-
$(LINUX26_VERSION
)-$(KERNEL_ARCH
)
74 # Version of Linux AFTER patches
75 LINUX26_DIR
=$(PROJECT_BUILD_DIR
)/linux-
$(LINUX26_VERSION
)
77 # for packages that need it
78 LINUX_VERSION
:=$(LINUX26_VERSION
)
79 LINUX_DIR
=$(LINUX26_DIR
)
80 LINUX_KERNEL
=$(LINUX26_KERNEL
)
83 ifeq ($(strip $(LINUX26_PATCH_DIR
)),)
84 ifneq ($(BOARD_PATH
),)
85 LINUX26_PATCH_DIR
:=$(BOARD_PATH
)/kernel-patches
/
89 # XXX FIXME: using -fstack-protector-all -mcmodel=kernel
90 # should be perfectly fine but perhaps needs a config symbol set in
92 __LINUX26_NO_PIC
=-fPIC
-fpic
-DPIC
-fwrapv
-ftrapv \
93 -fstack-protector
-fstack-protector-all
94 LINUX26_MAKE_FLAGS
= HOSTCC
="$(HOSTCC)" HOSTCFLAGS
="$(HOSTCFLAGS)" \
96 CFLAGS_KERNEL
="$(filter-out $(__LINUX26_NO_PIC),$(TARGET_CFLAGS))" \
97 INSTALL_MOD_PATH
=$(TARGET_DIR
) \
98 CROSS_COMPILE
=$(KERNEL_CROSS
) \
99 LDFLAGS
="$(TARGET_LDFLAGS)" \
103 @if
[ ! -f
"$(LINUX26_KCONFIG)" ] ; then \
105 echo
"You should create a .config for your kernel"; \
106 echo
"and install it as $(LINUX26_KCONFIG)"; \
111 # Doesn't make sense to warn about a missing kernel config
112 # when we are about to configure.
113 ifeq (=$(BR2_KERNEL_LINUX
)$(BR2_PACKAGE_LINUX_KCONFIG
)=,=y
=)
114 ifeq ($(filter -menuconfig linux26-source linux26-unpacked
,$(MAKECMDGOALS
)),)
115 ifeq ($(BR2_KERNEL_LINUX
)$(realpath
$(LINUX26_KCONFIG
)),y
)
116 $(error you do not have a linux kernel configuration file
)
122 ifneq ($(strip $(LINUX26_VERSION
)),$(strip $(LINUX_HEADERS_VERSION
)))
123 $(DL_DIR
)/$(LINUX26_SOURCE
):
124 $(WGET
) -P
$(DL_DIR
) $(LINUX26_SITE
)/$(LINUX26_SOURCE
)
125 endif # ($(LINUX26_VERSION),$(LINUX_HEADERS_VERSION))
127 $(LINUX26_DIR
)/.unpacked
: $(DL_DIR
)/$(LINUX26_SOURCE
)
128 rm -rf
$(LINUX26_DIR
)
129 @echo
"*** Unpacking kernel source"
130 $(LINUX26_BZCAT
) $(DL_DIR
)/$(LINUX26_SOURCE
) |
tar -C
$(PROJECT_BUILD_DIR
) $(TAR_OPTIONS
) -
131 ifneq ($(DOWNLOAD_LINUX26_VERSION
),$(LINUX26_VERSION
))
132 # Rename the dir from the downloaded version to the AFTER patch version
133 mv
-f
$(PROJECT_BUILD_DIR
)/linux-
$(DOWNLOAD_LINUX26_VERSION
) $(LINUX26_DIR
)
137 $(LINUX26_DIR
)/.patched
: $(LINUX26_DIR
)/.unpacked
$(LINUX_HEADERS_DEPENDS
)
138 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) toolchain
/kernel-headers \
139 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
140 ifeq ($(BR2_KERNEL_HEADERS_IPMI
),y
)
141 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) toolchain
/kernel-headers
/ipmi \
142 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
144 ifeq ($(BR2_KERNEL_HEADERS_LZMA
),y
)
145 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) toolchain
/kernel-headers
/lzma \
146 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
148 ifeq ($(BR2_KERNEL_HEADERS_RT
),y
)
149 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) $(DL_DIR
) $(LINUX_RT_SOURCE
)
151 ifeq ($(BR2_KERNEL_HEADERS_PATCH_DIR
),y
)
152 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) $(KERNEL_HEADERS_PATCH_DIR
) \
153 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
155 ifeq ($(BR2_PACKAGE_OPENSWAN
),y
)
156 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) package
/openswan \
157 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
159 ifneq ($(LINUX26_PATCH_DIR
),)
160 if
[ -d
$(LINUX26_PATCH_DIR
) ] ; then \
161 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) $(LINUX26_PATCH_DIR
) linux-
$(LINUX26_VERSION
)\
*.patch
; \
166 $(LINUX26_DIR
)/.configured
: $(LINUX26_DIR
)/.patched
$(LINUX26_KCONFIG
)
167 cp
-dpf
$(LINUX26_KCONFIG
) $(LINUX26_DIR
)/.config
168 $(SED
) '/CONFIG_AEABI=y/d' $(LINUX26_DIR
)/.config
169 ifeq ($(BR2_ARM_EABI
),y
)
170 echo
"CONFIG_AEABI=y" >> $(LINUX26_DIR
)/.config
171 $(SED
) '/CONFIG_OABI_COMPAT/d' $(LINUX26_DIR
)/.config
172 echo
"# CONFIG_OABI_COMPAT is not set" >> $(LINUX26_DIR
)/.config
174 echo
"# CONFIG_AEABI is not set" >> $(LINUX26_DIR
)/.config
176 $(SED
) '/CONFIG_CPU_BIG_ENDIAN/d' \
177 -e
'/CONFIG_CPU_LITTLE_ENDIAN/d' $(LINUX26_DIR
)/.config
179 echo
"CONFIG_CPU_BIG_ENDIAN=y" >> $(LINUX26_DIR
)/.config
181 ifeq ($(BR2_mipsel
),y
)
182 echo
"CONFIG_CPU_LITTLE_ENDIAN=y" >> $(LINUX26_DIR
)/.config
184 $(SED
) '/CONFIG_IPV6=y/d' $(LINUX26_DIR
)/.config
185 ifeq ($(BR2_INET_IPV6
),y
)
186 echo
"CONFIG_IPV6=y" >> $(LINUX26_DIR
)/.config
188 echo
"# CONFIG_IPV6 is not set" >> $(LINUX26_DIR
)/.config
190 $(SED
) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR
)/.config
191 $(SED
) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR
)/.config
192 ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS
),y
)
193 echo
"CONFIG_INITRAMFS_SOURCE=\"$(INITRAMFS_TARGET)\"" >> \
194 $(LINUX26_DIR
)/.config
195 echo
"CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR
)/.config
196 echo
"CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR
)/.config
198 echo
"CONFIG_INITRAMFS_SOURCE=\"\"" >> $(LINUX26_DIR
)/.config
200 ifeq ($(BR2_PACKAGE_BUSYBOX_INITRAMFS
),y
)
201 # precedence for a small initramfs
202 $(SED
) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR
)/.config
203 $(SED
) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR
)/.config
204 echo
"CONFIG_INITRAMFS_SOURCE=\"$(BB_INITRAMFS_TARGET)\"" >> \
205 $(LINUX26_DIR
)/.config
206 echo
"CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR
)/.config
207 echo
"CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR
)/.config
209 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) oldconfig
212 $(LINUX26_DIR
)/.depend_done
: $(LINUX26_DIR
)/.configured
213 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) prepare
216 $(LINUX26_KERNEL
): $(INITRAMFS_TARGET
) $(BB_INITRAMFS_TARGET
) \
217 $(LINUX26_DIR
)/.depend_done
218 $(MAKE
) $(LINUX26_MAKE_FLAGS
) \
219 -C
$(LINUX26_DIR
) $(LINUX26_FORMAT
)
220 cat
$(LINUX26_DIR
)/$(LINUX26_BINLOC
) > $(LINUX26_KERNEL
)
223 $(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/modules.dep
: $(LINUX26_DIR
)/.configured
224 rm -rf
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)
225 rm -f
$(TARGET_DIR
)/sbin
/cardmgr
226 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) modules
227 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) \
228 DEPMOD
=$(STAGING_DIR
)/bin
/$(GNU_TARGET_NAME
)-depmod26 \
229 INSTALL_MOD_PATH
=$(TARGET_DIR
) modules_install
230 rm -f
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/build
231 rm -f
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/source
232 $(STAGING_DIR
)/bin
/$(GNU_TARGET_NAME
)-depmod26
-b
$(TARGET_DIR
) $(LINUX_HEADERS_VERSION
)
235 linux26-menuconfig
: host-sed dirs
$(LINUX26_DIR
)/.patched
236 -[ -f
$(LINUX26_DIR
)/.config
] || cp
$(LINUX26_KCONFIG
) $(LINUX26_DIR
)/.config
237 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) menuconfig
238 -[ -f
$(LINUX26_DIR
)/.config
] && touch
$(LINUX26_DIR
)/.configured
240 linux26-xconfig
: host-sed dirs
$(LINUX26_DIR
)/.patched
241 -[ -f
$(LINUX26_DIR
)/.config
] || cp
$(LINUX26_KCONFIG
) $(LINUX26_DIR
)/.config
242 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) xconfig
243 -[ -f
$(LINUX26_DIR
)/.config
] && touch
$(LINUX26_DIR
)/.configured
245 linux26
: $(LINUX26_KERNEL
)
247 $(LINUX26_DIR
)/.modules_installed
: $(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/modules.dep
250 linux26-modules
: cross-depmod26
$(LINUX26_DIR
)/.modules_installed
252 linux26-source
: $(DL_DIR
)/$(LINUX26_SOURCE
)
254 linux26-unpacked
: $(LINUX26_DIR
)/.patched
256 linux26-config
: host-sed dirs
$(LINUX26_DIR
)/.configured
259 cp
-dpf
$(LINUX26_DIR
)/.config
$(LINUX26_KCONFIG
)
263 touch
$(LINUX26_DIR
)/.configured
265 # This has been renamed so we do _NOT_ by default run this on 'make clean'
267 rm -f
$(LINUX26_KERNEL
) $(LINUX26_DIR
)/.configured
268 -$(MAKE
) PATH
=$(TARGET_PATH
) -C
$(LINUX26_DIR
) clean
271 rm -rf
$(LINUX26_DIR
)