Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3365 - (show 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 # kernel26 global smage functions
2 # $Id$
3
4 # needed extra vars:
5 # ${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 #
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 # ${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
20 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 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 # 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 if [[ ! -z ${LINUX_FIRMWARE} ]] && [[ ${LINUX_FIRMWARE} != internal ]]
73 then
74 DEPEND="${DEPEND}
75 >= sys-kernel/linux-firmware-${LINUX_FIRMWARE}"
76 fi
77
78 : ${PROVIDE="virtual/kernel"}
79
80 EXTRAVERSION="${PSUBVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}"
81 KERNEL_CONFIG="${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD}-${ARCH}"
82
83 # 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 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 make ARCH=${ARCH/i*86/x86} oldconfig || die
114
115 case ${KERNEL_TYPE} in
116 image)
117 mmake ARCH=${ARCH/i*86/x86} || die
118 ;;
119
120 sources)
121 make clean || die
122
123 # needed to compile other programs like iptables
124 make ARCH=${ARCH/i*86/x86} prepare || die
125 # needed to cover >=2.6.14 builds
126 # 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
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 minstalldir /boot || die
142
143 # install modules
144 make ARCH=${ARCH/i*86/x86} INSTALL_MOD_PATH=${BINDIR} modules_install || die
145
146 # install kernelimage
147 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
160 # install System.map
161 minstallfile System.map \
162 /boot/System.map-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
163 || die
164
165 # 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 # install kernel description
175 echo "
176 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 KRNINITRD=
180 " > ${BINDIR}/boot/kernelversion || die
181
182 # install kernel-config from srcdir
183 minstallfile .config \
184 /boot/config-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} \
185 || die
186
187 # fix build symlink
188 if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ]
189 then
190 echo "fixing build symlink"
191 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 || die
195 fi
196
197 # and fixing source symlink
198 if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ]
199 then
200 echo "fixing source symlink"
201 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 || die
205 fi
206
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 }
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 minstalldir /usr/src || die
233 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 minstalldir /usr/src || die
261 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 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 export_inherits kernel26 src_prepare src_compile src_install
405
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