Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4527 - (hide 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 niro 2937 # kernel global smage functions
2 niro 1664 # $Id$
3 niro 1661
4     # needed extra vars:
5 niro 3581 # ${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 niro 1661 #
10 niro 3581 # ${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 niro 4527 # ${INCLUDE_KERNELVERSION_FILE}:
20     # ${USE_KERNEL_SYMLINKS}:
21 niro 1661
22 niro 1664 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 niro 3581 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 niro 1664 # some sane defaults
59 niro 3581 : ${PCAT="sys-kernel"}
60 niro 2944 : ${HOMEPAGE="http://magellan-linux.de/"}
61 niro 3581 : ${TARBALLPVER="${PVER}"}
62     : ${SRCFILE="linux-${TARBALLPVER}.tar.bz2"}
63 niro 1664 : ${SRCDIR="${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}"}
64    
65 niro 3581 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 niro 2943
83 niro 2939 case ${KERNEL_TYPE} in
84 niro 2940 image)
85     : ${PROVIDE="virtual/kernel"}
86 niro 3581 : ${DEPEND=">= virtual/module-tools
87 niro 2940 >= sys-fs/udev-115
88 niro 3581 >= virtual/initramfs-tools
89 niro 2940 >= virtual/initscripts"}
90 niro 3581 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 niro 2940 ;;
97 niro 2943
98     sources)
99     : ${PROVIDE="virtual/kernel-sources"}
100 niro 3581 : ${DESCRIPTION="Kernel sources of the '${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}' kernel branch."}
101 niro 2943 ;;
102    
103     headers)
104     : ${PROVIDE="virtual/kernel-headers"}
105     : ${DESCRIPTION="Sanitized kernel headers for libc."}
106     ;;
107 niro 2939 esac
108 niro 1664
109     EXTRAVERSION="${PSUBVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}"
110 niro 1661 KERNEL_CONFIG="${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD}-${ARCH}"
111    
112 niro 1664 # special vars for mage file only
113     KPVER="${PVER}"
114     KPBUILD="${PBUILD}"
115     KBRANCH="${BRANCH}"
116 niro 4527 SPECIAL_VARS="${SPECIAL_VARS} KPVER KPBUILD KBRANCH USE_KERNEL_SYMLINKS"
117 niro 1664
118 niro 2937 kernel_src_prepare()
119 niro 1661 {
120     munpack ${SRCFILE} || die
121 niro 3581 mv ${BUILDDIR}/linux-${TARBALLPVER} ${SRCDIR} || die
122 niro 1661
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 niro 3581
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 niro 1661 }
141    
142 niro 2937 kernel_src_compile()
143 niro 1661 {
144     cd ${SRCDIR}
145    
146     make mrproper || die
147    
148 niro 2939 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 niro 1661
155     case ${KERNEL_TYPE} in
156     image)
157 niro 1664 mmake ARCH=${ARCH/i*86/x86} || die
158 niro 1661 ;;
159    
160 niro 2939 headers)
161     make ARCH=${ARCH/i*86/x86} headers_check || die
162     ;;
163    
164 niro 1661 sources)
165     make clean || die
166    
167     # needed to compile other programs like iptables
168 niro 1664 make ARCH=${ARCH/i*86/x86} prepare || die
169 niro 1661 # needed to cover >=2.6.14 builds
170 niro 1664 # but deprecated with >=2.6.21, prepare cover all targets there
171 niro 2938 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 niro 1664 make ARCH=${ARCH/i*86/x86} scripts || die
182 niro 1661
183     # at least alsa-drivers needs this one ...
184     touch include/linux/autoconf.h || die
185 niro 4527
186     # compat symlink for 3.7.x new version.h location until everything is fixed
187 niro 1661 ;;
188     esac
189     }
190    
191 niro 2937 kernel_image_src_install()
192 niro 1661 {
193     cd ${SRCDIR}
194    
195     # needed directories
196 niro 1664 minstalldir /boot || die
197 niro 1661
198     # install modules
199 niro 3581 make ARCH=${ARCH/i*86/x86} INSTALL_MOD_PATH=${BINDIR}/usr modules_install || die
200 niro 1661
201     # install kernelimage
202 niro 1664 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 niro 1661
215     # install System.map
216 niro 1664 minstallfile System.map \
217     /boot/System.map-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
218 niro 1661 || die
219    
220 niro 1664 # 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 niro 4527 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 niro 1661
240     # install kernel-config from srcdir
241 niro 1664 minstallfile .config \
242     /boot/config-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
243 niro 1661 || die
244    
245     # fix build symlink
246 niro 3581 if [ -L ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ]
247 niro 1661 then
248     echo "fixing build symlink"
249 niro 3581 rm ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build || die
250 niro 1664 mlink /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
251 niro 3581 /usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build \
252 niro 1661 || die
253     fi
254    
255     # and fixing source symlink
256 niro 3581 if [ -L ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ]
257 niro 1661 then
258     echo "fixing source symlink"
259 niro 3581 rm ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source || die
260 niro 1664 mlink /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
261 niro 3581 /usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source \
262 niro 1661 || die
263     fi
264 niro 3581
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 niro 1661 }
281    
282 niro 2939 kernel_headers_src_install()
283     {
284     cd ${SRCDIR}
285     make ARCH=${ARCH/i*86/x86} INSTALL_HDR_PATH=${BINDIR}/usr headers_install || die
286 niro 3581
287     # clean-up unnecessary files
288     find ${BINDIR} -name .install -or -name ..install.cmd | xargs --no-run-if-empty rm -f
289 niro 2939 }
290    
291 niro 2937 kernel_sources_src_install()
292 niro 1661 {
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 niro 1664 minstalldir /usr/src || die
300 niro 1661 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 niro 2937 # kernel_external_modules_install path/to/SRCDIR DESTDIRNAME
305     kernel_external_modules_install()
306 niro 1661 {
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 niro 2937 kernel_external_modules_tarball()
319 niro 1661 {
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 niro 1664 minstalldir /usr/src || die
328 niro 1661 mv ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
329     }
330    
331 niro 2937 kernel_src_install()
332 niro 1661 {
333     case ${KERNEL_TYPE} in
334     image)
335 niro 2937 kernel_image_src_install || die
336 niro 1661 ;;
337    
338 niro 2939 headers)
339     kernel_headers_src_install || die
340     ;;
341    
342 niro 1661 sources)
343 niro 2937 kernel_sources_src_install || die
344 niro 1661 ;;
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 niro 2938 local kmv
376 niro 1661
377 niro 2938 kmv=$(kernel_major_version ${ksrc})
378     if [[ ${kmv//.} -ge 26 ]]
379 niro 1661 then
380     mod_suffix="ko"
381     else
382     mod_suffix="o"
383     fi
384    
385     echo ${mod_suffix}
386     }
387    
388 niro 2937 kernel_image_preinstall()
389 niro 1664 {
390     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
391     then
392     mount /boot &> /dev/null
393     fi
394     }
395    
396 niro 2937 kernel_image_preremove()
397 niro 1664 {
398     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
399     then
400     mount /boot &> /dev/null
401    
402     # remove old image entry from grub
403 niro 4030 new-kernel-pkg -v --rminitrd --rmmoddep --remove ${KPVER}-${KBRANCH}-${KPBUILD}
404 niro 1664 fi
405     }
406    
407 niro 2937 kernel_image_postinstall()
408 niro 1664 {
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 niro 4527 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 niro 1664 }
436    
437 niro 2937 kernel_sources_postinstall()
438 niro 1664 {
439     # check for linux-VERSION/include as the kernel-image installs
440     # the file Modules.symver in the linux-VERSION directory
441 niro 3581 if mqueryfeature "kernelsrcunpack" &&
442     [ ! -d ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}/include ]
443 niro 1664 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 niro 3581 if mqueryfeature "kernelsrcunpack" &&
449     [ ! -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ] &&
450 niro 1664 [ -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 niro 3581 # create linux symlink
457     if mqueryfeature "linuxsymlink"
458 niro 1664 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 niro 3581 # create kernel-modules symlink
466     if mqueryfeature "linuxsymlink" &&
467 niro 1664 [ -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 niro 2937 export_inherits kernel src_prepare src_compile src_install
477 niro 1664
478     # export pre/postinstall functions depending on KERNEL_TYPE
479     case ${KERNEL_TYPE} in
480     image)
481 niro 4527 export_inherits kernel_image preinstall preremove postinstall
482     SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel_image_preinstall kernel_image_preremove kernel_image_postinstall"
483 niro 1664 ;;
484     sources)
485 niro 2937 export_inherits kernel_sources postinstall
486     SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel_sources_postinstall"
487 niro 1664 ;;
488     esac