Magellan Linux

Contents of /smage/trunk/include/kernel.sminc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4527 - (show annotations) (download)
Fri Mar 15 11:06:39 2013 UTC (11 years, 2 months ago) by niro
File size: 14060 byte(s)
-sync with upstream
1 # kernel global smage functions
2 # $Id$
3
4 # needed extra vars:
5 # ${KERNEL_TYPE}: needed, 'sources', 'headers' or 'image'
6 # ${BRANCH}: needed, style branch of the kernel
7 # ${KERNEL_CONFIG}: optional, needed if you want to override the default
8 # searchpath ${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD}
9 #
10 # ${PSUBVER}: optional, only needed for 2.6.x.x naming scheme
11 # ${EXTRAVERSION}: optinal, extra version for the kernel name
12 # default setting is ${PSUBVER}-${BRANCH}-${PBUILD}
13 # ${KERNEL_IMAGE_PATH}: override the default KERNEL_IMAGE_PATH (to build xen images for e.g.)
14 # ${COMPRESS_MODULES}: compresses the kernel modules with given compressor (gzip|bzip2|xz)
15 # ${LINUX_FIRMWARE}: remove included firmware bits if requested
16 # set the version here like USE_LINUX_FIRMARE="20110605"
17 # version "internal" keeps the bits too
18 #
19 # ${INCLUDE_KERNELVERSION_FILE}:
20 # ${USE_KERNEL_SYMLINKS}:
21
22 sminclude mtools
23
24 # remove me when all distris support this:
25 if [[ ${USE_KERNEL_ARCH_EXTENSION} = true ]]
26 then
27 KERNEL_ARCH_EXTENSION="-${ARCH}"
28 else
29 KERNEL_ARCH_EXTENSION=""
30 fi
31
32 if [[ ! -z ${COMPRESS_MODULES} ]]
33 then
34 case ${COMPRESS_MODULES} in
35 gzip)
36 COMPRESS_MODULES_CMD="gzip -9v"
37 SDEPEND="${SDEPEND}
38 >= app-arch/gzip-1.4"
39 ;;
40 bzip2)
41 COMPRESS_MODULES_CMD="bzip2 -9v"
42 SDEPEND="${SDEPEND}
43 >= app-arch/bzip2-1.0.6"
44 ;;
45 xz)
46 COMPRESS_MODULES_CMD="xz -9v"
47 SDEPEND="${SDEPEND}
48 >= app-arch/xz-5"
49 ;;
50 none)
51 echo "Disabled compressed kernel-modules!"
52 COMPRESS_MODULES_CMD=""
53 ;;
54 *) die "Unkown compression format '${COMPRESS_MODULES}'" ;;
55 esac
56 fi
57
58 # some sane defaults
59 : ${PCAT="sys-kernel"}
60 : ${HOMEPAGE="http://magellan-linux.de/"}
61 : ${TARBALLPVER="${PVER}"}
62 : ${SRCFILE="linux-${TARBALLPVER}.tar.bz2"}
63 : ${SRCDIR="${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}"}
64
65 if [[ -z ${SRC_URI[*]} ]]
66 then
67 SRC_URI=(
68 http://www.kernel.org/pub/linux/kernel/v$(echo ${PVER} | cut -d. -f1).x/${SRCFILE}
69 http://ftp.uni-erlangen.de/pub/Linux/MIRROR.kernel/v$(echo ${PVER} | cut -d. -f1).x/${SRCFILE}
70 mirror://kernel-${BRANCH}/${SRCFILE}
71 )
72 case ${KERNEL_TYPE} in
73 image|sources)
74 SRC_URI=(
75 ${SRC_URI[*]}
76 mirror://kernel-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-i686
77 mirror://kernel-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-x86_64
78 )
79 ;;
80 esac
81 fi
82
83 case ${KERNEL_TYPE} in
84 image)
85 : ${PROVIDE="virtual/kernel"}
86 : ${DEPEND=">= virtual/module-tools
87 >= sys-fs/udev-115
88 >= virtual/initramfs-tools
89 >= virtual/initscripts"}
90 if [[ ! -z ${LINUX_FIRMWARE} ]] && [[ ${LINUX_FIRMWARE} != internal ]]
91 then
92 DEPEND="${DEPEND}
93 >= sys-kernel/linux-firmware-${LINUX_FIRMWARE}"
94 fi
95 : ${DESCRIPTION="Kernel image of the '${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}' kernel branch."}
96 ;;
97
98 sources)
99 : ${PROVIDE="virtual/kernel-sources"}
100 : ${DESCRIPTION="Kernel sources of the '${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}' kernel branch."}
101 ;;
102
103 headers)
104 : ${PROVIDE="virtual/kernel-headers"}
105 : ${DESCRIPTION="Sanitized kernel headers for libc."}
106 ;;
107 esac
108
109 EXTRAVERSION="${PSUBVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}"
110 KERNEL_CONFIG="${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD}-${ARCH}"
111
112 # special vars for mage file only
113 KPVER="${PVER}"
114 KPBUILD="${PBUILD}"
115 KBRANCH="${BRANCH}"
116 SPECIAL_VARS="${SPECIAL_VARS} KPVER KPBUILD KBRANCH USE_KERNEL_SYMLINKS"
117
118 kernel_src_prepare()
119 {
120 munpack ${SRCFILE} || die
121 mv ${BUILDDIR}/linux-${TARBALLPVER} ${SRCDIR} || die
122
123 # fix permissions
124 chown -R 0:0 ${SRCDIR} || die
125 chmod -R a+r-w+X,u+w ${SRCDIR} || die
126
127 cd ${SRCDIR}
128
129 # fixes INSTALL_PATH to /boot and EXTRAVERSION
130 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' \
131 -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile || die
132
133 # fix sublevel version with 3.x kernels and higher
134 local kver=$(echo ${PVER} | sed "s:\.::g")
135 if [[ ${PVER%%.*} -gt 2 ]]
136 then
137 local sublevel="$(echo ${PVER} | cut -d. -f3)"
138 sed -i "s:^\(SUBLEVEL =\).*:\1 ${sublevel}:" Makefile || die
139 fi
140 }
141
142 kernel_src_compile()
143 {
144 cd ${SRCDIR}
145
146 make mrproper || die
147
148 if [[ ${KERNEL_TYPE} = sources ]] || [[ ${KERNEL_TYPE} = image ]]
149 then
150 # inject our kernel config
151 cp ${KERNEL_CONFIG} ${SRCDIR}/.config || die
152 make ARCH=${ARCH/i*86/x86} oldconfig || die
153 fi
154
155 case ${KERNEL_TYPE} in
156 image)
157 mmake ARCH=${ARCH/i*86/x86} || die
158 ;;
159
160 headers)
161 make ARCH=${ARCH/i*86/x86} headers_check || die
162 ;;
163
164 sources)
165 make clean || die
166
167 # needed to compile other programs like iptables
168 make ARCH=${ARCH/i*86/x86} prepare || die
169 # needed to cover >=2.6.14 builds
170 # but deprecated with >=2.6.21, prepare cover all targets there
171 local kver=$(echo ${PVER} | sed "s:\.::g")
172 # honor >=3.0.x; add one zero
173 if [[ ${PVER%%.*} -gt 2 ]]
174 then
175 kver="${kver}0"
176 fi
177 if [[ ${kver} < 2621 ]]
178 then
179 make ARCH=${ARCH/i*86/x86} prepare-all || die
180 fi
181 make ARCH=${ARCH/i*86/x86} scripts || die
182
183 # at least alsa-drivers needs this one ...
184 touch include/linux/autoconf.h || die
185
186 # compat symlink for 3.7.x new version.h location until everything is fixed
187 ;;
188 esac
189 }
190
191 kernel_image_src_install()
192 {
193 cd ${SRCDIR}
194
195 # needed directories
196 minstalldir /boot || die
197
198 # install modules
199 make ARCH=${ARCH/i*86/x86} INSTALL_MOD_PATH=${BINDIR}/usr modules_install || die
200
201 # install kernelimage
202 if [[ -z ${KERNEL_IMAGE_PATH} ]]
203 then
204 local my_arch="${ARCH}"
205 [[ ${my_arch} = i*86 ]] && my_arch=i386
206 minstallfile arch/${my_arch}/boot/bzImage \
207 /boot/kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
208 || die
209 else
210 minstallfile ${KERNEL_IMAGE_PATH} \
211 /boot/kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
212 || die
213 fi
214
215 # install System.map
216 minstallfile System.map \
217 /boot/System.map-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
218 || die
219
220 # install Module.symvers in boot and /usr/src
221 minstallfile Module.symvers \
222 /boot/Module.symvers-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
223 || die
224 minstalldir /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} || die
225 minstallfile Module.symvers \
226 /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
227 || die
228
229 if [[ ${INCLUDE_KERNELVERSION_FILE} = true ]]
230 then
231 MCONFIG=/boot/kernelversion
232 # install kernel description
233 mclearconfig || die
234 maddconfig "KRNVER=${BRANCH}-${PVER}-${ARCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}" || die
235 maddconfig "KRNLIB=${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}" || die
236 maddconfig "KRNIMG=kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}" || die
237 maddconfig "KRNINITRD=" || die
238 fi
239
240 # install kernel-config from srcdir
241 minstallfile .config \
242 /boot/config-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
243 || die
244
245 # fix build symlink
246 if [ -L ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ]
247 then
248 echo "fixing build symlink"
249 rm ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build || die
250 mlink /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
251 /usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build \
252 || die
253 fi
254
255 # and fixing source symlink
256 if [ -L ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ]
257 then
258 echo "fixing source symlink"
259 rm ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source || die
260 mlink /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
261 /usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source \
262 || die
263 fi
264
265 # remove firmware bits if $LINUX_FIRMWARE was set
266 if [[ ! -z ${LINUX_FIRMWARE} ]] && [[ ${LINUX_FIRMWARE} != internal ]]
267 then
268 if [[ -d ${BINDIR}/usr/lib/firmware ]]
269 then
270 rm -rv ${BINDIR}/usr/lib/firmware
271 fi
272 fi
273
274 # compress modules if COMPRESS_MODULES_CMD was set
275 if [[ ! -z ${COMPRESS_MODULES_CMD} ]]
276 then
277 # compress all kernel modules
278 find ${BINDIR} -name \*.ko | xargs ${COMPRESS_MODULES_CMD} || die
279 fi
280 }
281
282 kernel_headers_src_install()
283 {
284 cd ${SRCDIR}
285 make ARCH=${ARCH/i*86/x86} INSTALL_HDR_PATH=${BINDIR}/usr headers_install || die
286
287 # clean-up unnecessary files
288 find ${BINDIR} -name .install -or -name ..install.cmd | xargs --no-run-if-empty rm -f
289 }
290
291 kernel_sources_src_install()
292 {
293 cd ${BUILDDIR}
294
295 echo "Creating linux-${PVER}-${BRANCH}-${PBUILD} sources tarball ... "
296 tar cvjf ${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 $(basename ${SRCDIR}) || die
297
298 echo "Moving linux-${PVER}-${BRANCH}-${PBUILD} tarball to \${BINDIR}/usr/src ... "
299 minstalldir /usr/src || die
300 mv ${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
301 }
302
303 # installs module-sources path/to/SRCDIR to MODDIR/MODNAME
304 # kernel_external_modules_install path/to/SRCDIR DESTDIRNAME
305 kernel_external_modules_install()
306 {
307 cd ${BUILDDIR}
308
309 local modsrc="$1"
310 local moddest="$2"
311 local moddir="${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}"
312
313 echo "Installing ${modsrc} to ${moddir}/${moddest} ..."
314 install -d ${moddir} || die
315 mv ${modsrc} ${moddir}/${moddest} || die
316 }
317
318 kernel_external_modules_tarball()
319 {
320 cd ${BUILDDIR}
321
322 echo "Creating kernel-modules-${PVER}-${BRANCH}-${PBUILD} sources tarball ... "
323 tar cvjf ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 \
324 kernel-modules-${PVER}-${BRANCH}-${PBUILD} || die
325
326 echo "Moving kernel-modules-${PVER}-${BRANCH}-${PBUILD} tarball to \${BINDIR}/usr/src ... "
327 minstalldir /usr/src || die
328 mv ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
329 }
330
331 kernel_src_install()
332 {
333 case ${KERNEL_TYPE} in
334 image)
335 kernel_image_src_install || die
336 ;;
337
338 headers)
339 kernel_headers_src_install || die
340 ;;
341
342 sources)
343 kernel_sources_src_install || die
344 ;;
345 esac
346 }
347
348 kernel_major_version()
349 {
350 local ksrc="$@"
351 local kv
352
353 if [[ -z ${ksrc} ]]
354 then
355 kv="$(uname -r|cut -d. -f1-2)"
356 else
357 local version
358 local patchlevel
359
360 # get version from makefile
361 version=$(grep "^VERSION[[:space:]]*=[[:space:]]*[[:digit:]]" ${ksrc}/Makefile | sed "s/^.*=[[:space:]]*\([[:digit:]]\+\)/\1/g")
362 # get patchlevel from makefile
363 patchlevel=$(grep "^PATCHLEVEL[[:space:]]*=[[:space:]]*[[:digit:]]" ${ksrc}/Makefile | sed "s/^.*=[[:space:]]*\([[:digit:]]\+\)/\1/g")
364 # kernelversion
365 kv="${version}.${patchlevel}"
366 fi
367
368 echo "${kv}"
369 }
370
371 mod_suffix()
372 {
373 local ksrc="$@"
374 local mod_suffix
375 local kmv
376
377 kmv=$(kernel_major_version ${ksrc})
378 if [[ ${kmv//.} -ge 26 ]]
379 then
380 mod_suffix="ko"
381 else
382 mod_suffix="o"
383 fi
384
385 echo ${mod_suffix}
386 }
387
388 kernel_image_preinstall()
389 {
390 if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
391 then
392 mount /boot &> /dev/null
393 fi
394 }
395
396 kernel_image_preremove()
397 {
398 if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
399 then
400 mount /boot &> /dev/null
401
402 # remove old image entry from grub
403 new-kernel-pkg -v --rminitrd --rmmoddep --remove ${KPVER}-${KBRANCH}-${KPBUILD}
404 fi
405 }
406
407 kernel_image_postinstall()
408 {
409 [ ! -d ${MROOT}/sys ] && install -d ${MROOT}/sys
410
411 # fixes a small glitch in <=mage-0.3.6-r15 with symlinks
412 [ -f ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD} ] && \
413 rm ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}
414
415 [ -x ${MROOT}/sbin/depmod ] &&
416 ${MROOT}/sbin/depmod -ae \
417 -F /boot/System.map-${KPVER}-${KBRANCH}-${KPBUILD} \
418 ${KPVER}-${KBRANCH}-${KPBUILD}
419
420 # do not run this if ${MROOT} is set !
421 if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
422 then
423 new-kernel-pkg -v --mkinitrd --make-default --install ${KPVER}-${KBRANCH}-${KPBUILD}
424 fi
425
426 if [[ ${USE_KERNEL_SYMLINKS} = true ]]
427 then
428 # symlink actual kernel to /boot/vmlinuz etc...
429 ln -snf kernel-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/vmlinuz
430 ln -snf System.map-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/System.map
431 ln -snf config-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/config
432 [[ -f ${MROOT}/boot/initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ]] &&
433 ln -snf initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ${MROOT}/boot/initrd
434 fi
435 }
436
437 kernel_sources_postinstall()
438 {
439 # check for linux-VERSION/include as the kernel-image installs
440 # the file Modules.symver in the linux-VERSION directory
441 if mqueryfeature "kernelsrcunpack" &&
442 [ ! -d ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}/include ]
443 then
444 echo "Unpacking linux-${KPVER}-${KBRANCH}-${KPBUILD} source tarball ... "
445 tar xvjf ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 -C ${MROOT}/usr/src
446 fi
447
448 if mqueryfeature "kernelsrcunpack" &&
449 [ ! -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ] &&
450 [ -f ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 ]
451 then
452 echo "Unpacking kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} source tarball ... "
453 tar xvjf ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 -C ${MROOT}/usr/src
454 fi
455
456 # create linux symlink
457 if mqueryfeature "linuxsymlink"
458 then
459 echo "Creating linux -> linux-${KPVER}-${KBRANCH}-${KPBUILD} symlink ... "
460 [ ! -d ${MROOT}/usr/src ] && install ${MROOT}/usr/src
461 ln -snf ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD} \
462 ${MROOT}/usr/src/linux || die
463 fi
464
465 # create kernel-modules symlink
466 if mqueryfeature "linuxsymlink" &&
467 [ -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ]
468 then
469 echo "Creating kernel-modules -> kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} symlink ... "
470 [ ! -d ${MROOT}/usr/src ] && install ${MROOT}/usr/src
471 ln -snf ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} \
472 ${MROOT}/usr/src/kernel-modules || die
473 fi
474 }
475
476 export_inherits kernel src_prepare src_compile src_install
477
478 # export pre/postinstall functions depending on KERNEL_TYPE
479 case ${KERNEL_TYPE} in
480 image)
481 export_inherits kernel_image preinstall preremove postinstall
482 SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel_image_preinstall kernel_image_preremove kernel_image_postinstall"
483 ;;
484 sources)
485 export_inherits kernel_sources postinstall
486 SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel_sources_postinstall"
487 ;;
488 esac