Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2941 - (hide 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 niro 2937 # kernel global smage functions
2 niro 1664 # $Id$
3 niro 1661
4     # needed extra vars:
5 niro 2939 # ${KERNEL_TYPE}: needed, 'sources', 'headers' or 'image'
6 niro 1661 # ${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 niro 1664 # ${KERNEL_IMAGE_PATH}: override the default KERNEL_IMAGE_PATH (to build xen images for e.g.)
14 niro 1661
15 niro 1664 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 niro 2941 : ${PCATEGORIE="sys-kernel"}
27 niro 1664 : ${SRCFILE="linux-${PVER/${PSUBVER}/}.tar.bz2"}
28     : ${SRCDIR="${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}"}
29    
30 niro 2939 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 niro 1664
47 niro 2939 case ${KERNEL_TYPE} in
48 niro 2940 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 niro 2939 sources) : ${PROVIDE="virtual/kernel-sources"} ;;
56     headers) : ${PROVIDE="virtual/kernel-headers"} ;;
57     esac
58 niro 1664
59     EXTRAVERSION="${PSUBVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}"
60 niro 1661 KERNEL_CONFIG="${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD}-${ARCH}"
61    
62 niro 1664 # 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 niro 2937 kernel_src_prepare()
69 niro 1661 {
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 niro 2937 kernel_src_compile()
85 niro 1661 {
86     cd ${SRCDIR}
87    
88     make mrproper || die
89    
90 niro 2939 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 niro 1661
97     case ${KERNEL_TYPE} in
98     image)
99 niro 1664 mmake ARCH=${ARCH/i*86/x86} || die
100 niro 1661 ;;
101    
102 niro 2939 headers)
103     make ARCH=${ARCH/i*86/x86} headers_check || die
104     ;;
105    
106 niro 1661 sources)
107     make clean || die
108    
109     # needed to compile other programs like iptables
110 niro 1664 make ARCH=${ARCH/i*86/x86} prepare || die
111 niro 1661 # needed to cover >=2.6.14 builds
112 niro 1664 # but deprecated with >=2.6.21, prepare cover all targets there
113 niro 2938 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 niro 1664 make ARCH=${ARCH/i*86/x86} scripts || die
124 niro 1661
125     # at least alsa-drivers needs this one ...
126     touch include/linux/autoconf.h || die
127     ;;
128     esac
129     }
130    
131 niro 2937 kernel_image_src_install()
132 niro 1661 {
133     cd ${SRCDIR}
134    
135     # needed directories
136 niro 1664 minstalldir /boot || die
137 niro 1661
138     # install modules
139 niro 1664 make ARCH=${ARCH/i*86/x86} INSTALL_MOD_PATH=${BINDIR} modules_install || die
140 niro 1661
141     # install kernelimage
142 niro 1664 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 niro 1661
155     # install System.map
156 niro 1664 minstallfile System.map \
157     /boot/System.map-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
158 niro 1661 || die
159    
160 niro 1664 # 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 niro 1661 # install kernel description
170     echo "
171 niro 1664 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 niro 1661 KRNINITRD=
175     " > ${BINDIR}/boot/kernelversion || die
176    
177     # install kernel-config from srcdir
178 niro 1664 minstallfile .config \
179     /boot/config-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
180 niro 1661 || die
181    
182     # fix build symlink
183 niro 1664 if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ]
184 niro 1661 then
185     echo "fixing build symlink"
186 niro 1664 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 niro 1661 || die
190     fi
191    
192     # and fixing source symlink
193 niro 1664 if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ]
194 niro 1661 then
195     echo "fixing source symlink"
196 niro 1664 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 niro 1661 || die
200     fi
201     }
202    
203 niro 2939 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 niro 2937 kernel_sources_src_install()
210 niro 1661 {
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 niro 1664 minstalldir /usr/src || die
218 niro 1661 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 niro 2937 # kernel_external_modules_install path/to/SRCDIR DESTDIRNAME
223     kernel_external_modules_install()
224 niro 1661 {
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 niro 2937 kernel_external_modules_tarball()
237 niro 1661 {
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 niro 1664 minstalldir /usr/src || die
246 niro 1661 mv ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
247     }
248    
249 niro 2937 kernel_src_install()
250 niro 1661 {
251     case ${KERNEL_TYPE} in
252     image)
253 niro 2937 kernel_image_src_install || die
254 niro 1661 ;;
255    
256 niro 2939 headers)
257     kernel_headers_src_install || die
258     ;;
259    
260 niro 1661 sources)
261 niro 2937 kernel_sources_src_install || die
262 niro 1661 ;;
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 niro 2938 local kmv
294 niro 1661
295 niro 2938 kmv=$(kernel_major_version ${ksrc})
296     if [[ ${kmv//.} -ge 26 ]]
297 niro 1661 then
298     mod_suffix="ko"
299     else
300     mod_suffix="o"
301     fi
302    
303     echo ${mod_suffix}
304     }
305    
306 niro 2937 kernel_image_preinstall()
307 niro 1664 {
308     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
309     then
310     mount /boot &> /dev/null
311     fi
312     }
313    
314 niro 2937 kernel_image_preremove()
315 niro 1664 {
316     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
317     then
318     mount /boot &> /dev/null
319     fi
320     }
321    
322 niro 2937 kernel_image_postremove()
323 niro 1664 {
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 niro 2937 kernel_image_postinstall()
332 niro 1664 {
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 niro 2937 kernel_sources_postinstall()
359 niro 1664 {
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 niro 2937 export_inherits kernel src_prepare src_compile src_install
396 niro 1664
397     # export pre/postinstall functions depending on KERNEL_TYPE
398     case ${KERNEL_TYPE} in
399     image)
400 niro 2937 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 niro 1664 ;;
403     sources)
404 niro 2937 export_inherits kernel_sources postinstall
405     SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel_sources_postinstall"
406 niro 1664 ;;
407     esac