Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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