Magellan Linux

Contents of /branches/magellan-next/include/kernel.sminc

Parent Directory Parent Directory | Revision Log Revision Log


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