Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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