Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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