Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2939 - (hide 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 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     : ${SRCFILE="linux-${PVER/${PSUBVER}/}.tar.bz2"}
27     : ${SRCDIR="${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}"}
28    
29 niro 2939 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 niro 1664
46     : ${DEPEND=">= sys-apps/module-init-tools-3.2
47     >= sys-fs/udev-115
48     >= sys-apps/mkinitrd-5.0.8
49 niro 2938 >= virtual/initscripts"}
50 niro 1664
51 niro 2939 case ${KERNEL_TYPE} in
52     image) : ${PROVIDE="virtual/kernel"} ;;
53     sources) : ${PROVIDE="virtual/kernel-sources"} ;;
54     headers) : ${PROVIDE="virtual/kernel-headers"} ;;
55     esac
56 niro 1664
57     EXTRAVERSION="${PSUBVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}"
58 niro 1661 KERNEL_CONFIG="${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD}-${ARCH}"
59    
60 niro 1664 # 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 niro 2937 kernel_src_prepare()
67 niro 1661 {
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 niro 2937 kernel_src_compile()
83 niro 1661 {
84     cd ${SRCDIR}
85    
86     make mrproper || die
87    
88 niro 2939 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 niro 1661
95     case ${KERNEL_TYPE} in
96     image)
97 niro 1664 mmake ARCH=${ARCH/i*86/x86} || die
98 niro 1661 ;;
99    
100 niro 2939 headers)
101     make ARCH=${ARCH/i*86/x86} headers_check || die
102     ;;
103    
104 niro 1661 sources)
105     make clean || die
106    
107     # needed to compile other programs like iptables
108 niro 1664 make ARCH=${ARCH/i*86/x86} prepare || die
109 niro 1661 # needed to cover >=2.6.14 builds
110 niro 1664 # but deprecated with >=2.6.21, prepare cover all targets there
111 niro 2938 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 niro 1664 make ARCH=${ARCH/i*86/x86} scripts || die
122 niro 1661
123     # at least alsa-drivers needs this one ...
124     touch include/linux/autoconf.h || die
125     ;;
126     esac
127     }
128    
129 niro 2937 kernel_image_src_install()
130 niro 1661 {
131     cd ${SRCDIR}
132    
133     # needed directories
134 niro 1664 minstalldir /boot || die
135 niro 1661
136     # install modules
137 niro 1664 make ARCH=${ARCH/i*86/x86} INSTALL_MOD_PATH=${BINDIR} modules_install || die
138 niro 1661
139     # install kernelimage
140 niro 1664 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 niro 1661
153     # install System.map
154 niro 1664 minstallfile System.map \
155     /boot/System.map-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
156 niro 1661 || die
157    
158 niro 1664 # 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 niro 1661 # install kernel description
168     echo "
169 niro 1664 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 niro 1661 KRNINITRD=
173     " > ${BINDIR}/boot/kernelversion || die
174    
175     # install kernel-config from srcdir
176 niro 1664 minstallfile .config \
177     /boot/config-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
178 niro 1661 || die
179    
180     # fix build symlink
181 niro 1664 if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ]
182 niro 1661 then
183     echo "fixing build symlink"
184 niro 1664 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 niro 1661 || die
188     fi
189    
190     # and fixing source symlink
191 niro 1664 if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ]
192 niro 1661 then
193     echo "fixing source symlink"
194 niro 1664 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 niro 1661 || die
198     fi
199     }
200    
201 niro 2939 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 niro 2937 kernel_sources_src_install()
208 niro 1661 {
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 niro 1664 minstalldir /usr/src || die
216 niro 1661 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 niro 2937 # kernel_external_modules_install path/to/SRCDIR DESTDIRNAME
221     kernel_external_modules_install()
222 niro 1661 {
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 niro 2937 kernel_external_modules_tarball()
235 niro 1661 {
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 niro 1664 minstalldir /usr/src || die
244 niro 1661 mv ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
245     }
246    
247 niro 2937 kernel_src_install()
248 niro 1661 {
249     case ${KERNEL_TYPE} in
250     image)
251 niro 2937 kernel_image_src_install || die
252 niro 1661 ;;
253    
254 niro 2939 headers)
255     kernel_headers_src_install || die
256     ;;
257    
258 niro 1661 sources)
259 niro 2937 kernel_sources_src_install || die
260 niro 1661 ;;
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 niro 2938 local kmv
292 niro 1661
293 niro 2938 kmv=$(kernel_major_version ${ksrc})
294     if [[ ${kmv//.} -ge 26 ]]
295 niro 1661 then
296     mod_suffix="ko"
297     else
298     mod_suffix="o"
299     fi
300    
301     echo ${mod_suffix}
302     }
303    
304 niro 2937 kernel_image_preinstall()
305 niro 1664 {
306     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
307     then
308     mount /boot &> /dev/null
309     fi
310     }
311    
312 niro 2937 kernel_image_preremove()
313 niro 1664 {
314     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
315     then
316     mount /boot &> /dev/null
317     fi
318     }
319    
320 niro 2937 kernel_image_postremove()
321 niro 1664 {
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 niro 2937 kernel_image_postinstall()
330 niro 1664 {
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 niro 2937 kernel_sources_postinstall()
357 niro 1664 {
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 niro 2937 export_inherits kernel src_prepare src_compile src_install
394 niro 1664
395     # export pre/postinstall functions depending on KERNEL_TYPE
396     case ${KERNEL_TYPE} in
397     image)
398 niro 2937 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 niro 1664 ;;
401     sources)
402 niro 2937 export_inherits kernel_sources postinstall
403     SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel_sources_postinstall"
404 niro 1664 ;;
405     esac