Magellan Linux

Annotation of /smage/branches/alx-0_6_0/include/kernel26.sminc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3365 - (hide annotations) (download)
Tue Mar 27 14:11:21 2012 UTC (12 years, 1 month ago) by niro
File size: 12159 byte(s)
-backported linux-firmware and compression support from upstream
1 niro 1661 # kernel26 global smage functions
2 niro 1664 # $Id$
3 niro 1661
4     # needed extra vars:
5 niro 3365 # ${KERNEL_TYPE}: needed, 'sources', 'headers' 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 niro 1661 #
10 niro 3365 # ${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     # ${COMPRESS_MODULES}: compresses the kernel modules with given compressor (gzip|bzip2|xz)
15     # ${LINUX_FIRMWARE}: remove included firmware bits if requested
16     # set the version here like USE_LINUX_FIRMARE="20110605"
17     # version "internal" keeps the bits too
18     #
19 niro 1661
20 niro 1664 sminclude mtools
21    
22     # remove me when all distris support this:
23     if [[ ${USE_KERNEL_ARCH_EXTENSION} = true ]]
24     then
25     KERNEL_ARCH_EXTENSION="-${ARCH}"
26     else
27     KERNEL_ARCH_EXTENSION=""
28     fi
29    
30 niro 3365 if [[ ! -z ${COMPRESS_MODULES} ]]
31     then
32     case ${COMPRESS_MODULES} in
33     gzip)
34     COMPRESS_MODULES_CMD="gzip -9v"
35     SDEPEND="${SDEPEND}
36     >= app-arch/gzip-1.4"
37     ;;
38     bzip2)
39     COMPRESS_MODULES_CMD="bzip2 -9v"
40     SDEPEND="${SDEPEND}
41     >= app-arch/bzip2-1.0.6"
42     ;;
43     xz)
44     COMPRESS_MODULES_CMD="xz -9v"
45     SDEPEND="${SDEPEND}
46     >= app-arch/xz-5"
47     ;;
48     none)
49     echo "Disabled compressed kernel-modules!"
50     COMPRESS_MODULES_CMD=""
51     ;;
52     *) die "Unkown compression format '${COMPRESS_MODULES}'" ;;
53     esac
54     fi
55    
56 niro 1664 # some sane defaults
57     : ${SRCFILE="linux-${PVER/${PSUBVER}/}.tar.bz2"}
58     : ${SRCDIR="${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}"}
59    
60     : ${SRC_URI=(
61     http://www.kernel.org/pub/linux/kernel/v${PVER:0:3}/${SRCFILE}
62     mirror://kernel26-${BRANCH}/${SRCFILE}
63     mirror://kernel26-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-i686
64     mirror://kernel26-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-x86_64
65     )}
66    
67     : ${DEPEND=">= sys-apps/module-init-tools-3.2
68     >= sys-fs/udev-115
69     >= sys-apps/mkinitrd-5.0.8
70     >= sys-apps/initscripts-0.4.3"}
71    
72 niro 3365 if [[ ! -z ${LINUX_FIRMWARE} ]] && [[ ${LINUX_FIRMWARE} != internal ]]
73     then
74     DEPEND="${DEPEND}
75     >= sys-kernel/linux-firmware-${LINUX_FIRMWARE}"
76     fi
77    
78 niro 1664 : ${PROVIDE="virtual/kernel"}
79    
80     EXTRAVERSION="${PSUBVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}"
81 niro 1661 KERNEL_CONFIG="${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD}-${ARCH}"
82    
83 niro 1664 # special vars for mage file only
84     KPVER="${PVER}"
85     KPBUILD="${PBUILD}"
86     KBRANCH="${BRANCH}"
87     SPECIAL_VARS="${SPECIAL_VARS} KPVER KPBUILD KBRANCH"
88    
89 niro 1661 kernel26_src_prepare()
90     {
91     munpack ${SRCFILE} || die
92     mv ${BUILDDIR}/linux-${PVER/${PSUBVER}/} ${SRCDIR} || die
93    
94     # fix permissions
95     chown -R 0:0 ${SRCDIR} || die
96     chmod -R a+r-w+X,u+w ${SRCDIR} || die
97    
98     cd ${SRCDIR}
99    
100     # fixes INSTALL_PATH to /boot and EXTRAVERSION
101     sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' \
102     -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile || die
103     }
104    
105     kernel26_src_compile()
106     {
107     cd ${SRCDIR}
108    
109     make mrproper || die
110    
111     # inject our kernel config
112     cp ${KERNEL_CONFIG} ${SRCDIR}/.config || die
113 niro 1664 make ARCH=${ARCH/i*86/x86} oldconfig || die
114 niro 1661
115     case ${KERNEL_TYPE} in
116     image)
117 niro 1664 mmake ARCH=${ARCH/i*86/x86} || die
118 niro 1661 ;;
119    
120     sources)
121     make clean || die
122    
123     # needed to compile other programs like iptables
124 niro 1664 make ARCH=${ARCH/i*86/x86} prepare || die
125 niro 1661 # needed to cover >=2.6.14 builds
126 niro 1664 # but deprecated with >=2.6.21, prepare cover all targets there
127     [[ $(echo ${PVER} | sed "s:\.::g") < 2621 ]] && { make ARCH=${ARCH/i*86/x86} prepare-all || die; }
128     make ARCH=${ARCH/i*86/x86} scripts || die
129 niro 1661
130     # at least alsa-drivers needs this one ...
131     touch include/linux/autoconf.h || die
132     ;;
133     esac
134     }
135    
136     kernel26_image_src_install()
137     {
138     cd ${SRCDIR}
139    
140     # needed directories
141 niro 1664 minstalldir /boot || die
142 niro 1661
143     # install modules
144 niro 1664 make ARCH=${ARCH/i*86/x86} INSTALL_MOD_PATH=${BINDIR} modules_install || die
145 niro 1661
146     # install kernelimage
147 niro 1664 if [[ -z ${KERNEL_IMAGE_PATH} ]]
148     then
149     local my_arch="${ARCH}"
150     [[ ${my_arch} = i*86 ]] && my_arch=i386
151     minstallfile arch/${my_arch}/boot/bzImage \
152     /boot/kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
153     || die
154     else
155     minstallfile ${KERNEL_IMAGE_PATH} \
156     /boot/kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
157     || die
158     fi
159 niro 1661
160     # install System.map
161 niro 1664 minstallfile System.map \
162     /boot/System.map-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
163 niro 1661 || die
164    
165 niro 1664 # install Module.symvers in boot and /usr/src
166     minstallfile Module.symvers \
167     /boot/Module.symvers-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
168     || die
169     minstalldir /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} || die
170     minstallfile Module.symvers \
171     /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
172     || die
173    
174 niro 1661 # install kernel description
175     echo "
176 niro 1664 KRNVER=${BRANCH}-${PVER}-${ARCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}
177     KRNLIB=${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}
178     KRNIMG=kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}
179 niro 1661 KRNINITRD=
180     " > ${BINDIR}/boot/kernelversion || die
181    
182     # install kernel-config from srcdir
183 niro 1664 minstallfile .config \
184     /boot/config-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
185 niro 1661 || die
186    
187     # fix build symlink
188 niro 1664 if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ]
189 niro 1661 then
190     echo "fixing build symlink"
191 niro 1664 rm ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build || die
192     mlink /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
193     /lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build \
194 niro 1661 || die
195     fi
196    
197     # and fixing source symlink
198 niro 1664 if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ]
199 niro 1661 then
200     echo "fixing source symlink"
201 niro 1664 rm ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source || die
202     mlink /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \
203     /lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source \
204 niro 1661 || die
205     fi
206 niro 3365
207     # remove firmware bits if $LINUX_FIRMWARE was set
208     if [[ ! -z ${LINUX_FIRMWARE} ]] && [[ ${LINUX_FIRMWARE} != internal ]]
209     then
210     if [[ -d ${BINDIR}/lib/firmware ]]
211     then
212     rm -rv ${BINDIR}/lib/firmware
213     fi
214     fi
215    
216     # compress modules if COMPRESS_MODULES_CMD was set
217     if [[ ! -z ${COMPRESS_MODULES_CMD} ]]
218     then
219     # compress all kernel modules
220     find ${BINDIR} -name \*.ko | xargs ${COMPRESS_MODULES_CMD} || die
221     fi
222 niro 1661 }
223    
224     kernel26_sources_src_install()
225     {
226     cd ${BUILDDIR}
227    
228     echo "Creating linux-${PVER}-${BRANCH}-${PBUILD} sources tarball ... "
229     tar cvjf ${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 $(basename ${SRCDIR}) || die
230    
231     echo "Moving linux-${PVER}-${BRANCH}-${PBUILD} tarball to \${BINDIR}/usr/src ... "
232 niro 1664 minstalldir /usr/src || die
233 niro 1661 mv ${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
234     }
235    
236     # installs module-sources path/to/SRCDIR to MODDIR/MODNAME
237     # kernel26_external_modules_install path/to/SRCDIR DESTDIRNAME
238     kernel26_external_modules_install()
239     {
240     cd ${BUILDDIR}
241    
242     local modsrc="$1"
243     local moddest="$2"
244     local moddir="${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}"
245    
246     echo "Installing ${modsrc} to ${moddir}/${moddest} ..."
247     install -d ${moddir} || die
248     mv ${modsrc} ${moddir}/${moddest} || die
249     }
250    
251     kernel26_external_modules_tarball()
252     {
253     cd ${BUILDDIR}
254    
255     echo "Creating kernel-modules-${PVER}-${BRANCH}-${PBUILD} sources tarball ... "
256     tar cvjf ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 \
257     kernel-modules-${PVER}-${BRANCH}-${PBUILD} || die
258    
259     echo "Moving kernel-modules-${PVER}-${BRANCH}-${PBUILD} tarball to \${BINDIR}/usr/src ... "
260 niro 1664 minstalldir /usr/src || die
261 niro 1661 mv ${BUILDDIR}/kernel-modules-${PVER}-${BRANCH}-${PBUILD}.tar.bz2 ${BINDIR}/usr/src || die
262     }
263    
264     kernel26_src_install()
265     {
266     case ${KERNEL_TYPE} in
267     image)
268     kernel26_image_src_install || die
269     ;;
270    
271     sources)
272     kernel26_sources_src_install || die
273     ;;
274     esac
275     }
276    
277     kernel_major_version()
278     {
279     local ksrc="$@"
280     local kv
281    
282     if [[ -z ${ksrc} ]]
283     then
284     kv="$(uname -r|cut -d. -f1-2)"
285     else
286     local version
287     local patchlevel
288    
289     # get version from makefile
290     version=$(grep "^VERSION[[:space:]]*=[[:space:]]*[[:digit:]]" ${ksrc}/Makefile | sed "s/^.*=[[:space:]]*\([[:digit:]]\+\)/\1/g")
291     # get patchlevel from makefile
292     patchlevel=$(grep "^PATCHLEVEL[[:space:]]*=[[:space:]]*[[:digit:]]" ${ksrc}/Makefile | sed "s/^.*=[[:space:]]*\([[:digit:]]\+\)/\1/g")
293     # kernelversion
294     kv="${version}.${patchlevel}"
295     fi
296    
297     echo "${kv}"
298     }
299    
300     mod_suffix()
301     {
302     local ksrc="$@"
303     local mod_suffix
304    
305     if [[ $(kernel_major_version ${ksrc}) = 2.6 ]]
306     then
307     mod_suffix="ko"
308     else
309     mod_suffix="o"
310     fi
311    
312     echo ${mod_suffix}
313     }
314    
315 niro 1664 kernel26_image_preinstall()
316     {
317     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
318     then
319     mount /boot &> /dev/null
320     fi
321     }
322    
323     kernel26_image_preremove()
324     {
325     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
326     then
327     mount /boot &> /dev/null
328     fi
329     }
330    
331     kernel26_image_postremove()
332     {
333     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
334     then
335     # remove old image entry from grub
336     new-kernel-pkg -v --rminitrd --remove ${KPVER}-${KBRANCH}-${KPBUILD}
337     fi
338     }
339    
340     kernel26_image_postinstall()
341     {
342     [ ! -d ${MROOT}/sys ] && install -d ${MROOT}/sys
343    
344     # fixes a small glitch in <=mage-0.3.6-r15 with symlinks
345     [ -f ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD} ] && \
346     rm ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}
347    
348     [ -x ${MROOT}/sbin/depmod ] &&
349     ${MROOT}/sbin/depmod -ae \
350     -F /boot/System.map-${KPVER}-${KBRANCH}-${KPBUILD} \
351     ${KPVER}-${KBRANCH}-${KPBUILD}
352    
353     # do not run this if ${MROOT} is set !
354     if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
355     then
356     new-kernel-pkg -v --mkinitrd --make-default --install ${KPVER}-${KBRANCH}-${KPBUILD}
357     fi
358    
359     # symlink actual kernel to /boot/vmlinuz etc...
360     ln -snf kernel-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/vmlinuz
361     ln -snf System.map-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/System.map
362     ln -snf config-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/config
363     [[ -f ${MROOT}/boot/initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ]] &&
364     ln -snf initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ${MROOT}/boot/initrd
365     }
366    
367     kernel26_sources_postinstall()
368     {
369     # check for linux-VERSION/include as the kernel-image installs
370     # the file Modules.symver in the linux-VERSION directory
371     if [ ! -d ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}/include ]
372     then
373     echo "Unpacking linux-${KPVER}-${KBRANCH}-${KPBUILD} source tarball ... "
374     tar xvjf ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 -C ${MROOT}/usr/src
375     fi
376    
377     if [ ! -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ] &&
378     [ -f ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 ]
379     then
380     echo "Unpacking kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} source tarball ... "
381     tar xvjf ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 -C ${MROOT}/usr/src
382     fi
383    
384     # if not exist create linux symlink
385     if [ ! -h ${MROOT}/usr/src/linux ]
386     then
387     echo "Creating linux -> linux-${KPVER}-${KBRANCH}-${KPBUILD} symlink ... "
388     [ ! -d ${MROOT}/usr/src ] && install ${MROOT}/usr/src
389     ln -snf ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD} \
390     ${MROOT}/usr/src/linux || die
391     fi
392    
393     # if not exist create kernel-modules symlink
394     if [ ! -h ${MROOT}/usr/src/kernel-modules ] &&
395     [ -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ]
396     then
397     echo "Creating kernel-modules -> kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} symlink ... "
398     [ ! -d ${MROOT}/usr/src ] && install ${MROOT}/usr/src
399     ln -snf ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} \
400     ${MROOT}/usr/src/kernel-modules || die
401     fi
402     }
403    
404 niro 1661 export_inherits kernel26 src_prepare src_compile src_install
405 niro 1664
406     # export pre/postinstall functions depending on KERNEL_TYPE
407     case ${KERNEL_TYPE} in
408     image)
409     export_inherits kernel26_image preinstall preremove postinstall postremove
410     SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel26_image_preinstall kernel26_image_preremove kernel26_image_postinstall kernel26_image_postremove"
411     ;;
412     sources)
413     export_inherits kernel26_sources postinstall
414     SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel26_sources_postinstall"
415     ;;
416     esac