Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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