xref: /OK3568_Linux_fs/yocto/poky/meta/classes/live-vm-common.bbclass (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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