Magellan Linux

Contents of /branches/R11-unstable/include/kernel.sminc

Parent Directory Parent Directory | Revision Log Revision Log


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