Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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