bootimg.bbclass - This creates a bootable image using syslinux, your kernel and an...
[vuplus_openembedded] / classes / bootimg.bbclass
1 # bootimg.oeclass
2 # Copyright (C) 2004, Advanced Micro Devices, Inc.  All Rights Reserved
3 # Released under the MIT license (see packages/COPYING)
4
5 # This creates a bootable image using syslinux, your kernel and an optional
6 # initrd
7
8 # External variables needed
9 # ${INITRD} - indicates a filesystem image to use as an initrd (optional)
10 # ${AUTO_SYSLINUXCFG} - set this to 1 to enable creating an automatic config
11 # ${LABELS} - a list of targets for the automatic config
12 # ${APPEND} - an override list of append strings for each label
13 # ${SYSLINUX_OPTS} - additional options to add to the syslinux file ';' delimited 
14
15 DEPENDS_append=" dosfstools-native syslinux-native mtools-native cdrtools-native"
16
17 BDIR="${WORKDIR}/boot"
18 ISODIR="${IMAGE_ROOTFS}/isolinux/"
19
20 BOOTIMG_VOLUME_ID ?= "oe"
21 BOOTIMG_EXTRA_SPACE ?= "64"
22
23 # Get the build_syslinux_cfg() function from the syslinux class
24
25 SYSLINUXCFG="${BDIR}/syslinux.cfg"
26 SYSLINUXMENU="${BDIR}/menu"
27 inherit syslinux
28                 
29 build_boot_bin() {
30         install -d ${BDIR}
31         install -m 0644 ${STAGING_KERNEL_DIR}/bzImage \
32         ${BDIR}/vmlinuz
33
34         if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then 
35                 install -m 0644 ${INITRD} ${BDIR}/initrd
36         fi
37
38         install -m 444 ${STAGING_DIR}/${BUILD_SYS}/share/syslinux/ldlinux.sys \
39         ${BDIR}/ldlinux.sys
40
41         # Do a little math, bash style
42         #BLOCKS=`du -s ${BDIR} | cut -f 1`
43         BLOCKS=`du -bks ${BDIR} | cut -f 1`
44         SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}`    
45
46         mkdosfs -F 12 -n ${BOOTIMG_VOLUME_ID} -d ${BDIR} \
47         -C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-boot.bin $SIZE 
48
49         syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-boot.bin
50
51         #Create an ISO if we have an INITRD
52         if [ -n "${INITRD}" ] && [ -s "${INITRD}" ] && [ "${NOISO}" != "1" ] ; then
53                 install -d ${ISODIR}
54
55                 # Install the kernel
56
57                 install -m 0644 ${STAGING_KERNEL_DIR}/bzImage \
58                         ${ISODIR}/vmlinuz
59
60                 # Install the configuration files
61
62                 cp ${BDIR}/syslinux.cfg ${ISODIR}/isolinux.cfg
63
64                 if [ -f ${SYSLINUXMENU} ]; then
65                         cp ${SYSLINUXMENU} ${ISODIR}
66                 fi
67
68                 install -m 0644 ${INITRD} ${ISODIR}/initrd
69
70                 # And install the syslinux stuff 
71                 cp ${STAGING_DIR}/${BUILD_SYS}/share/syslinux/isolinux.bin \
72                 ${ISODIR}
73
74                 mkisofs -V ${BOOTIMG_VOLUME_ID} \
75                 -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \
76                 -b isolinux/isolinux.bin -c isolinux/boot.cat -r \
77                 -no-emul-boot -boot-load-size 4 -boot-info-table \
78                 ${IMAGE_ROOTFS}
79         fi
80
81
82 python do_bootimg() {
83         docfg = bb.data.getVar('AUTO_SYSLINUXCFG', d, 1)
84         if docfg:
85                 bb.build.exec_func('build_syslinux_cfg', d)
86         bb.build.exec_func('build_boot_bin', d)
87 }
88
89 # We need to run after bootsplash if it exists, so thats why this line
90 # is such.  Don't worry, if you don't do bootsplash, nobody will notice
91
92 addtask bootimg before do_build after do_bootsplash