Magellan Linux

Annotation of /trunk/core/include/kernel26.sminc

Parent Directory Parent Directory | Revision Log Revision Log


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