Magellan Linux

Annotation of /branches/magellan-next/include/kernel26.sminc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1072 - (hide annotations) (download)
Sun Jan 25 09:32:23 2009 UTC (15 years, 3 months ago) by niro
Original Path: trunk/core/include/kernel26.sminc
File size: 10205 byte(s)
-fixed cross-compile issues
1 niro 2 # kernel26 global smage functions
2     # $Header: /magellan-cvs/smage/include/kernel26.sminc,v 1.25 2008/05/24 09:33:17 niro Exp $
3    
4     # needed extra vars:
5     # ${KERNEL_TYPE}: needed, 'sources' 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     # remove me when all distris support this:
16     if [[ ${USE_KERNEL_ARCH_EXTENSION} = true ]]
17     then
18     KERNEL_ARCH_EXTENSION="-${ARCH}"
19     else
20     KERNEL_ARCH_EXTENSION=""
21     fi
22    
23     # some sane defaults
24     : ${SRCFILE="linux-${PVER/${PSUBVER}/}.tar.bz2"}
25     : ${SRCDIR="${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}"}
26    
27     : ${SRC_URI=(
28     http://www.kernel.org/pub/linux/kernel/v${PVER:0:3}/${SRCFILE}
29     mirror://kernel26-${BRANCH}/${SRCFILE}
30     mirror://kernel26-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-i686
31     mirror://kernel26-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-x86_64
32     )}
33    
34     : ${DEPEND=">= sys-apps/module-init-tools-3.2
35     >= sys-fs/udev-115
36     >= sys-apps/mkinitrd-5.0.8
37     >= sys-apps/initscripts-0.4.3"}
38    
39     : ${PROVIDE="virtual/kernel"}
40    
41     EXTRAVERSION="${PSUBVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}"
42     KERNEL_CONFIG="${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD}-${ARCH}"
43    
44     # special vars for mage file only
45     KPVER="${PVER}"
46     KPBUILD="${PBUILD}"
47     KBRANCH="${BRANCH}"
48     SPECIAL_VARS="${SPECIAL_VARS} KPVER KPBUILD KBRANCH"
49    
50     kernel26_src_prepare()
51     {
52     munpack ${SRCFILE} || die
53     mv ${BUILDDIR}/linux-${PVER/${PSUBVER}/} ${SRCDIR} || die
54    
55     # fix permissions
56     chown -R 0:0 ${SRCDIR} || die
57     chmod -R a+r-w+X,u+w ${SRCDIR} || die
58    
59     cd ${SRCDIR}
60    
61     # fixes INSTALL_PATH to /boot and EXTRAVERSION
62     sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' \
63     -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile || die
64     }
65    
66     kernel26_src_compile()
67     {
68     cd ${SRCDIR}
69    
70     make mrproper || die
71    
72     # inject our kernel config
73     cp ${KERNEL_CONFIG} ${SRCDIR}/.config || die
74 niro 1072 make ARCH=${ARCH/i*86/x86} oldconfig || die
75 niro 2
76     case ${KERNEL_TYPE} in
77     image)
78 niro 10 mmake ARCH=${ARCH/i*86/x86} || die
79 niro 2 ;;
80    
81     sources)
82     make clean || die
83    
84     # needed to compile other programs like iptables
85 niro 10 make ARCH=${ARCH/i*86/x86} prepare || die
86 niro 2 # needed to cover >=2.6.14 builds
87     # but deprecated with >=2.6.21, prepare cover all targets there
88 niro 10 [[ $(echo ${PVER} | sed "s:\.::g") < 2621 ]] && { make ARCH=${ARCH/i*86/x86} prepare-all || die; }
89     make ARCH=${ARCH/i*86/x86} scripts || die
90 niro 2
91     # at least alsa-drivers needs this one ...
92     touch include/linux/autoconf.h || die
93     ;;
94     esac
95     }
96    
97     kernel26_image_src_install()
98     {
99     cd ${SRCDIR}
100    
101     # needed directories
102     install -d ${BINDIR}/boot || die
103    
104     # install modules
105     make INSTALL_MOD_PATH=${BINDIR} modules_install || die
106    
107     # install kernelimage
108     if [[ -z ${KERNEL_IMAGE_PATH} ]]
109     then
110     local my_arch="${ARCH}"
111     [[ ${my_arch} = i*86 ]] && my_arch=i386
112     install -m 0644 -o root -g root \
113     arch/${my_arch}/boot/bzImage \
114     ${BINDIR}/boot/kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
115     || die
116     else
117     install -m 0644 -o root -g root \
118     ${KERNEL_IMAGE_PATH} \
119     ${BINDIR}/boot/kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
120     || die
121     fi
122    
123     # install System.map
124     install -m 0644 -o root -g root \
125     System.map \
126     ${BINDIR}/boot/System.map-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
127     || die
128    
129     # install kernel description
130     echo "
131     KRNVER=${BRANCH}-${PVER}-${ARCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}
132     KRNLIB=${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}
133     KRNIMG=kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}
134     KRNINITRD=
135     " > ${BINDIR}/boot/kernelversion || die
136    
137     # install kernel-config from srcdir
138     install -m 0644 -o root -g root \
139     .config \
140     ${BINDIR}/boot/config-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
141     || die
142    
143     # fix build symlink
144     if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ]
145     then
146     echo "fixing build symlink"
147     rm ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build || die
148     ln -snf /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
149     ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build \
150     || die
151     fi
152    
153     # and fixing source symlink
154     if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ]
155     then
156     echo "fixing source symlink"
157     rm ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source || die
158     ln -snf /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
159     ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source \
160     || die
161     fi
162     }
163    
164     kernel26_sources_src_install()
165     {
166     cd ${BUILDDIR}
167    
168     echo "Creating linux-${PVER}-${BRANCH}-${PBUILD} sources tarball ... "
169     tar cvjf ${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 $(basename ${SRCDIR}) || die
170    
171     echo "Moving linux-${PVER}-${BRANCH}-${PBUILD} tarball to \${BINDIR}/usr/src ... "
172     install -d ${BINDIR}/usr/src || die
173     mv ${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
174     }
175    
176     # installs module-sources path/to/SRCDIR to MODDIR/MODNAME
177     # kernel26_external_modules_install path/to/SRCDIR DESTDIRNAME
178     kernel26_external_modules_install()
179     {
180     cd ${BUILDDIR}
181    
182     local modsrc="$1"
183     local moddest="$2"
184     local moddir="${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}"
185    
186     echo "Installing ${modsrc} to ${moddir}/${moddest} ..."
187     install -d ${moddir} || die
188     mv ${modsrc} ${moddir}/${moddest} || die
189     }
190    
191     kernel26_external_modules_tarball()
192     {
193     cd ${BUILDDIR}
194    
195     echo "Creating kernel-modules-${PVER}-${BRANCH}-${PBUILD} sources tarball ... "
196     tar cvjf ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 \
197     kernel-modules-${PVER}-${BRANCH}-${PBUILD} || die
198    
199     echo "Moving kernel-modules-${PVER}-${BRANCH}-${PBUILD} tarball to \${BINDIR}/usr/src ... "
200     install -d ${BINDIR}/usr/src || die
201     mv ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
202     }
203    
204     kernel26_src_install()
205     {
206     case ${KERNEL_TYPE} in
207     image)
208     kernel26_image_src_install || die
209     ;;
210    
211     sources)
212     kernel26_sources_src_install || die
213     ;;
214     esac
215     }
216    
217     kernel_major_version()
218     {
219     local ksrc="$@"
220     local kv
221    
222     if [[ -z ${ksrc} ]]
223     then
224     kv="$(uname -r|cut -d. -f1-2)"
225     else
226     local version
227     local patchlevel
228    
229     # get version from makefile
230     version=$(grep "^VERSION[[:space:]]*=[[:space:]]*[[:digit:]]" ${ksrc}/Makefile | sed "s/^.*=[[:space:]]*\([[:digit:]]\+\)/\1/g")
231     # get patchlevel from makefile
232     patchlevel=$(grep "^PATCHLEVEL[[:space:]]*=[[:space:]]*[[:digit:]]" ${ksrc}/Makefile | sed "s/^.*=[[:space:]]*\([[:digit:]]\+\)/\1/g")
233     # kernelversion
234     kv="${version}.${patchlevel}"
235     fi
236    
237     echo "${kv}"
238     }
239    
240     mod_suffix()
241     {
242     local ksrc="$@"
243     local mod_suffix
244    
245     if [[ $(kernel_major_version ${ksrc}) = 2.6 ]]
246     then
247     mod_suffix="ko"
248     else
249     mod_suffix="o"
250     fi
251    
252     echo ${mod_suffix}
253     }
254    
255     kernel26_image_preinstall()
256     {
257     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
258     then
259     mount /boot &> /dev/null
260     fi
261     }
262    
263     kernel26_image_preremove()
264     {
265     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
266     then
267     mount /boot &> /dev/null
268     fi
269     }
270    
271     kernel26_image_postinstall()
272     {
273     [ ! -d ${MROOT}/sys ] && install -d ${MROOT}/sys
274    
275     # fixes a small glitch in <=mage-0.3.6-r15 with symlinks
276     [ -f ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD} ] && \
277     rm ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}
278    
279     [ -x ${MROOT}/sbin/depmod ] &&
280     ${MROOT}/sbin/depmod -ae \
281     -F /boot/System.map-${KPVER}-${KBRANCH}-${KPBUILD} \
282     ${KPVER}-${KBRANCH}-${KPBUILD}
283    
284     # do not run this if ${MROOT} is set !
285     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
286     then
287     new-kernel-pkg -v --mkinitrd --make-default --install ${KPVER}-${KBRANCH}-${KPBUILD}
288     fi
289    
290     # symlink actual kernel to /boot/vmlinuz etc...
291     ln -snf kernel-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/vmlinuz
292     ln -snf System.map-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/System.map
293     ln -snf config-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/config
294     [[ -f ${MROOT}/boot/initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ]] &&
295     ln -snf initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ${MROOT}/boot/initrd
296     }
297    
298     kernel26_sources_postinstall()
299     {
300     if [ ! -d ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD} ]
301     then
302     echo "Unpacking linux-${KPVER}-${KBRANCH}-${KPBUILD} source tarball ... "
303     tar xvjf ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 -C ${MROOT}/usr/src
304     fi
305    
306     if [ ! -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ] &&
307     [ -f ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 ]
308     then
309     echo "Unpacking kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} source tarball ... "
310     tar xvjf ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 -C ${MROOT}/usr/src
311     fi
312    
313     # if not exist create linux symlink
314     if [ ! -h ${MROOT}/usr/src/linux ]
315     then
316     echo "Creating linux -> linux-${KPVER}-${KBRANCH}-${KPBUILD} symlink ... "
317     [ ! -d ${MROOT}/usr/src ] && install ${MROOT}/usr/src
318     ln -snf ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD} \
319     ${MROOT}/usr/src/linux || die
320     fi
321    
322     # if not exist create kernel-modules symlink
323     if [ ! -h ${MROOT}/usr/src/kernel-modules ]
324     then
325     echo "Creating kernel-modules -> kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} symlink ... "
326     [ ! -d ${MROOT}/usr/src ] && install ${MROOT}/usr/src
327     ln -snf ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} \
328     ${MROOT}/usr/src/kernel-modules || die
329     fi
330     }
331    
332     export_inherits kernel26 src_prepare src_compile src_install
333    
334     # export pre/postinstall functions depending on KERNEL_TYPE
335     case ${KERNEL_TYPE} in
336     image)
337     export_inherits kernel26_image preinstall preremove postinstall
338     SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel26_image_preinstall kernel26_image_preremove kernel26_image_postinstall"
339     ;;
340     sources)
341     export_inherits kernel26_sources postinstall
342     SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel26_sources_postinstall"
343     ;;
344     esac