Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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