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)"; \
112 ifeq (=$(BR2_KERNEL_LINUX
)$(BR2_PACKAGE_LINUX_KCONFIG
)=,=y
=)
113 $(error you do not have a linux kernel configuration
)
115 ifeq ($(BR2_KERNEL_LINUX
)$(realpath
$(LINUX26_KCONFIG
)),y
)
116 $(error you do not have a linux kernel configuration file
)
120 ifneq ($(strip $(LINUX26_VERSION
)),$(strip $(LINUX_HEADERS_VERSION
)))
121 $(DL_DIR
)/$(LINUX26_SOURCE
):
122 $(WGET
) -P
$(DL_DIR
) $(LINUX26_SITE
)/$(LINUX26_SOURCE
)
123 endif # ($(LINUX26_VERSION),$(LINUX_HEADERS_VERSION))
125 $(LINUX26_DIR
)/.unpacked
: $(DL_DIR
)/$(LINUX26_SOURCE
)
126 rm -rf
$(LINUX26_DIR
)
127 @echo
"*** Unpacking kernel source"
128 $(LINUX26_BZCAT
) $(DL_DIR
)/$(LINUX26_SOURCE
) |
tar -C
$(PROJECT_BUILD_DIR
) $(TAR_OPTIONS
) -
129 ifneq ($(DOWNLOAD_LINUX26_VERSION
),$(LINUX26_VERSION
))
130 # Rename the dir from the downloaded version to the AFTER patch version
131 mv
-f
$(PROJECT_BUILD_DIR
)/linux-
$(DOWNLOAD_LINUX26_VERSION
) $(LINUX26_DIR
)
135 $(LINUX26_DIR
)/.patched
: $(LINUX26_DIR
)/.unpacked
$(LINUX_HEADERS_DEPENDS
)
136 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) toolchain
/kernel-headers \
137 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
138 ifeq ($(BR2_KERNEL_HEADERS_IPMI
),y
)
139 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) toolchain
/kernel-headers
/ipmi \
140 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
142 ifeq ($(BR2_KERNEL_HEADERS_LZMA
),y
)
143 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) toolchain
/kernel-headers
/lzma \
144 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
146 ifeq ($(BR2_KERNEL_HEADERS_RT
),y
)
147 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) $(DL_DIR
) $(LINUX_RT_SOURCE
)
149 ifeq ($(BR2_KERNEL_HEADERS_PATCH_DIR
),y
)
150 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) $(KERNEL_HEADERS_PATCH_DIR
) \
151 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
153 ifeq ($(BR2_PACKAGE_OPENSWAN
),y
)
154 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) package
/openswan \
155 linux-
$(LINUX26_VERSION
)-\
*.patch
{,.gz
,.bz2
}
157 ifneq ($(LINUX26_PATCH_DIR
),)
158 if
[ -d
$(LINUX26_PATCH_DIR
) ] ; then \
159 toolchain
/patch-kernel.sh
$(LINUX26_DIR
) $(LINUX26_PATCH_DIR
) linux-
$(LINUX26_VERSION
)\
*.patch
; \
164 $(LINUX26_DIR
)/.configured
: $(LINUX26_DIR
)/.patched
$(LINUX26_KCONFIG
)
165 cp
-dpf
$(LINUX26_KCONFIG
) $(LINUX26_DIR
)/.config
166 $(SED
) '/CONFIG_AEABI=y/d' $(LINUX26_DIR
)/.config
167 ifeq ($(BR2_ARM_EABI
),y
)
168 echo
"CONFIG_AEABI=y" >> $(LINUX26_DIR
)/.config
169 $(SED
) '/CONFIG_OABI_COMPAT/d' $(LINUX26_DIR
)/.config
170 echo
"# CONFIG_OABI_COMPAT is not set" >> $(LINUX26_DIR
)/.config
172 echo
"# CONFIG_AEABI is not set" >> $(LINUX26_DIR
)/.config
174 $(SED
) '/CONFIG_CPU_BIG_ENDIAN/d' \
175 -e
'/CONFIG_CPU_LITTLE_ENDIAN/d' $(LINUX26_DIR
)/.config
177 echo
"CONFIG_CPU_BIG_ENDIAN=y" >> $(LINUX26_DIR
)/.config
179 ifeq ($(BR2_mipsel
),y
)
180 echo
"CONFIG_CPU_LITTLE_ENDIAN=y" >> $(LINUX26_DIR
)/.config
182 $(SED
) '/CONFIG_IPV6=y/d' $(LINUX26_DIR
)/.config
183 ifeq ($(BR2_INET_IPV6
),y
)
184 echo
"CONFIG_IPV6=y" >> $(LINUX26_DIR
)/.config
186 echo
"# CONFIG_IPV6 is not set" >> $(LINUX26_DIR
)/.config
188 $(SED
) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR
)/.config
189 $(SED
) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR
)/.config
190 ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS
),y
)
191 echo
"CONFIG_INITRAMFS_SOURCE=\"$(INITRAMFS_TARGET)\"" >> \
192 $(LINUX26_DIR
)/.config
193 echo
"CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR
)/.config
194 echo
"CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR
)/.config
196 echo
"CONFIG_INITRAMFS_SOURCE=\"\"" >> $(LINUX26_DIR
)/.config
198 ifeq ($(BR2_PACKAGE_BUSYBOX_INITRAMFS
),y
)
199 # precedence for a small initramfs
200 $(SED
) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR
)/.config
201 $(SED
) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR
)/.config
202 echo
"CONFIG_INITRAMFS_SOURCE=\"$(BB_INITRAMFS_TARGET)\"" >> \
203 $(LINUX26_DIR
)/.config
204 echo
"CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR
)/.config
205 echo
"CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR
)/.config
207 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) oldconfig
210 $(LINUX26_DIR
)/.depend_done
: $(LINUX26_DIR
)/.configured
211 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) prepare
214 $(LINUX26_KERNEL
): $(INITRAMFS_TARGET
) $(BB_INITRAMFS_TARGET
) \
215 $(LINUX26_DIR
)/.depend_done
216 $(MAKE
) $(LINUX26_MAKE_FLAGS
) \
217 -C
$(LINUX26_DIR
) $(LINUX26_FORMAT
)
218 cat
$(LINUX26_DIR
)/$(LINUX26_BINLOC
) > $(LINUX26_KERNEL
)
221 $(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/modules.dep
: $(LINUX26_DIR
)/.configured
222 rm -rf
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)
223 rm -f
$(TARGET_DIR
)/sbin
/cardmgr
224 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) modules
225 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) \
226 DEPMOD
=$(STAGING_DIR
)/bin
/$(GNU_TARGET_NAME
)-depmod26 \
227 INSTALL_MOD_PATH
=$(TARGET_DIR
) modules_install
228 rm -f
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/build
229 rm -f
$(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/source
230 $(STAGING_DIR
)/bin
/$(GNU_TARGET_NAME
)-depmod26
-b
$(TARGET_DIR
) $(LINUX_HEADERS_VERSION
)
233 linux26-menuconfig
: $(LINUX26_DIR
)/.patched host-sed
234 [ -f
$(LINUX26_DIR
)/.config
] || cp
$(LINUX26_KCONFIG
) $(LINUX26_DIR
)/.config
235 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) menuconfig
236 -[ -f
$(LINUX26_DIR
)/.config
] && touch
$(LINUX26_DIR
)/.configured
238 linux26-xconfig
: $(LINUX26_DIR
)/.patched host-sed
239 [ -f
$(LINUX26_DIR
)/.config
] || cp
$(LINUX26_KCONFIG
) $(LINUX26_DIR
)/.config
240 $(MAKE
) $(LINUX26_MAKE_FLAGS
) -C
$(LINUX26_DIR
) xconfig
241 -[ -f
$(LINUX26_DIR
)/.config
] && touch
$(LINUX26_DIR
)/.configured
243 linux26
: $(LINUX26_KERNEL
)
245 $(LINUX26_DIR
)/.modules_installed
: $(TARGET_DIR
)/lib
/modules
/$(LINUX26_VERSION
)/modules.dep
248 linux26-modules
: cross-depmod26
$(LINUX26_DIR
)/.modules_installed
250 linux26-source
: $(DL_DIR
)/$(LINUX26_SOURCE
)
252 linux26-unpacked
: $(LINUX26_DIR
)/.patched
254 linux26-config
: host-sed
$(LINUX26_DIR
)/.configured
257 cp
-dpf
$(LINUX26_DIR
)/.config
$(LINUX26_KCONFIG
)
259 # This has been renamed so we do _NOT_ by default run this on 'make clean'
261 rm -f
$(LINUX26_KERNEL
) $(LINUX26_DIR
)/.configured
262 -$(MAKE
) PATH
=$(TARGET_PATH
) -C
$(LINUX26_DIR
) clean
265 rm -rf
$(LINUX26_DIR
)