1*4882a593Smuzhiyun# Some of the vars for vm and live image are conflicted, this function 2*4882a593Smuzhiyun# is used for fixing the problem. 3*4882a593Smuzhiyundef set_live_vm_vars(d, suffix): 4*4882a593Smuzhiyun vars = ['GRUB_CFG', 'SYSLINUX_CFG', 'ROOT', 'LABELS', 'INITRD'] 5*4882a593Smuzhiyun for var in vars: 6*4882a593Smuzhiyun var_with_suffix = var + '_' + suffix 7*4882a593Smuzhiyun if d.getVar(var): 8*4882a593Smuzhiyun bb.warn('Found potential conflicted var %s, please use %s rather than %s' % \ 9*4882a593Smuzhiyun (var, var_with_suffix, var)) 10*4882a593Smuzhiyun elif d.getVar(var_with_suffix): 11*4882a593Smuzhiyun d.setVar(var, d.getVar(var_with_suffix)) 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunEFI = "${@bb.utils.contains("MACHINE_FEATURES", "efi", "1", "0", d)}" 15*4882a593SmuzhiyunEFI_PROVIDER ?= "grub-efi" 16*4882a593SmuzhiyunEFI_CLASS = "${@bb.utils.contains("MACHINE_FEATURES", "efi", "${EFI_PROVIDER}", "", d)}" 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunMKDOSFS_EXTRAOPTS ??= "-S 512" 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun# Include legacy boot if MACHINE_FEATURES includes "pcbios" or if it does not 21*4882a593Smuzhiyun# contain "efi". This way legacy is supported by default if neither is 22*4882a593Smuzhiyun# specified, maintaining the original behavior. 23*4882a593Smuzhiyundef pcbios(d): 24*4882a593Smuzhiyun pcbios = bb.utils.contains("MACHINE_FEATURES", "pcbios", "1", "0", d) 25*4882a593Smuzhiyun if pcbios == "0": 26*4882a593Smuzhiyun pcbios = bb.utils.contains("MACHINE_FEATURES", "efi", "0", "1", d) 27*4882a593Smuzhiyun return pcbios 28*4882a593Smuzhiyun 29*4882a593SmuzhiyunPCBIOS = "${@pcbios(d)}" 30*4882a593SmuzhiyunPCBIOS_CLASS = "${@['','syslinux'][d.getVar('PCBIOS') == '1']}" 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun# efi_populate_common DEST BOOTLOADER 33*4882a593Smuzhiyunefi_populate_common() { 34*4882a593Smuzhiyun # DEST must be the root of the image so that EFIDIR is not 35*4882a593Smuzhiyun # nested under a top level directory. 36*4882a593Smuzhiyun DEST=$1 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun install -d ${DEST}${EFIDIR} 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun install -m 0644 ${DEPLOY_DIR_IMAGE}/$2-${EFI_BOOT_IMAGE} ${DEST}${EFIDIR}/${EFI_BOOT_IMAGE} 41*4882a593Smuzhiyun EFIPATH=$(echo "${EFIDIR}" | sed 's/\//\\/g') 42*4882a593Smuzhiyun printf 'fs0:%s\%s\n' "$EFIPATH" "${EFI_BOOT_IMAGE}" >${DEST}/startup.nsh 43*4882a593Smuzhiyun} 44*4882a593Smuzhiyun 45*4882a593Smuzhiyunefi_iso_populate() { 46*4882a593Smuzhiyun iso_dir=$1 47*4882a593Smuzhiyun efi_populate $iso_dir 48*4882a593Smuzhiyun # Build a EFI directory to create efi.img 49*4882a593Smuzhiyun mkdir -p ${EFIIMGDIR}/${EFIDIR} 50*4882a593Smuzhiyun cp $iso_dir/${EFIDIR}/* ${EFIIMGDIR}${EFIDIR} 51*4882a593Smuzhiyun cp $iso_dir/${KERNEL_IMAGETYPE} ${EFIIMGDIR} 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun EFIPATH=$(echo "${EFIDIR}" | sed 's/\//\\/g') 54*4882a593Smuzhiyun printf 'fs0:%s\%s\n' "$EFIPATH" "${EFI_BOOT_IMAGE}" >${EFIIMGDIR}/startup.nsh 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun if [ -f "$iso_dir/initrd" ] ; then 57*4882a593Smuzhiyun cp $iso_dir/initrd ${EFIIMGDIR} 58*4882a593Smuzhiyun fi 59*4882a593Smuzhiyun} 60*4882a593Smuzhiyun 61*4882a593Smuzhiyunefi_hddimg_populate() { 62*4882a593Smuzhiyun efi_populate $1 63*4882a593Smuzhiyun} 64*4882a593Smuzhiyun 65*4882a593Smuzhiyuninherit ${EFI_CLASS} 66*4882a593Smuzhiyuninherit ${PCBIOS_CLASS} 67*4882a593Smuzhiyun 68*4882a593Smuzhiyunpopulate_kernel() { 69*4882a593Smuzhiyun dest=$1 70*4882a593Smuzhiyun install -d $dest 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun # Install bzImage, initrd, and rootfs.img in DEST for all loaders to use. 73*4882a593Smuzhiyun bbnote "Trying to install ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} as $dest/${KERNEL_IMAGETYPE}" 74*4882a593Smuzhiyun if [ -e ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} ]; then 75*4882a593Smuzhiyun install -m 0644 ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} $dest/${KERNEL_IMAGETYPE} 76*4882a593Smuzhiyun else 77*4882a593Smuzhiyun bbwarn "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} doesn't exist" 78*4882a593Smuzhiyun fi 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun # initrd is made of concatenation of multiple filesystem images 81*4882a593Smuzhiyun if [ -n "${INITRD}" ]; then 82*4882a593Smuzhiyun rm -f $dest/initrd 83*4882a593Smuzhiyun for fs in ${INITRD} 84*4882a593Smuzhiyun do 85*4882a593Smuzhiyun if [ -s "$fs" ]; then 86*4882a593Smuzhiyun cat $fs >> $dest/initrd 87*4882a593Smuzhiyun else 88*4882a593Smuzhiyun bbfatal "$fs is invalid. initrd image creation failed." 89*4882a593Smuzhiyun fi 90*4882a593Smuzhiyun done 91*4882a593Smuzhiyun chmod 0644 $dest/initrd 92*4882a593Smuzhiyun fi 93*4882a593Smuzhiyun} 94*4882a593Smuzhiyun 95