Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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