xref: /OK3568_Linux_fs/yocto/poky/meta/classes/systemd-boot-cfg.bbclass (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunSYSTEMD_BOOT_CFG ?= "${S}/loader.conf"
2*4882a593SmuzhiyunSYSTEMD_BOOT_ENTRIES ?= ""
3*4882a593SmuzhiyunSYSTEMD_BOOT_TIMEOUT ?= "10"
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun# Uses MACHINE specific KERNEL_IMAGETYPE
6*4882a593SmuzhiyunPACKAGE_ARCH = "${MACHINE_ARCH}"
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun# Need UUID utility code.
9*4882a593Smuzhiyuninherit fs-uuid
10*4882a593Smuzhiyun
11*4882a593Smuzhiyunpython build_efi_cfg() {
12*4882a593Smuzhiyun    s = d.getVar("S")
13*4882a593Smuzhiyun    labels = d.getVar('LABELS')
14*4882a593Smuzhiyun    if not labels:
15*4882a593Smuzhiyun        bb.debug(1, "LABELS not defined, nothing to do")
16*4882a593Smuzhiyun        return
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun    if labels == []:
19*4882a593Smuzhiyun        bb.debug(1, "No labels, nothing to do")
20*4882a593Smuzhiyun        return
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun    cfile = d.getVar('SYSTEMD_BOOT_CFG')
23*4882a593Smuzhiyun    cdir = os.path.dirname(cfile)
24*4882a593Smuzhiyun    if not os.path.exists(cdir):
25*4882a593Smuzhiyun        os.makedirs(cdir)
26*4882a593Smuzhiyun    try:
27*4882a593Smuzhiyun         cfgfile = open(cfile, 'w')
28*4882a593Smuzhiyun    except OSError:
29*4882a593Smuzhiyun        bb.fatal('Unable to open %s' % cfile)
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun    cfgfile.write('# Automatically created by OE\n')
32*4882a593Smuzhiyun    cfgfile.write('default %s\n' % (labels.split()[0]))
33*4882a593Smuzhiyun    timeout = d.getVar('SYSTEMD_BOOT_TIMEOUT')
34*4882a593Smuzhiyun    if timeout:
35*4882a593Smuzhiyun        cfgfile.write('timeout %s\n' % timeout)
36*4882a593Smuzhiyun    else:
37*4882a593Smuzhiyun        cfgfile.write('timeout 10\n')
38*4882a593Smuzhiyun    cfgfile.close()
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun    for label in labels.split():
41*4882a593Smuzhiyun        localdata = d.createCopy()
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun        entryfile = "%s/%s.conf" % (s, label)
44*4882a593Smuzhiyun        if not os.path.exists(s):
45*4882a593Smuzhiyun            os.makedirs(s)
46*4882a593Smuzhiyun        d.appendVar("SYSTEMD_BOOT_ENTRIES", " " + entryfile)
47*4882a593Smuzhiyun        try:
48*4882a593Smuzhiyun            entrycfg = open(entryfile, "w")
49*4882a593Smuzhiyun        except OSError:
50*4882a593Smuzhiyun            bb.fatal('Unable to open %s' % entryfile)
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun        entrycfg.write('title %s\n' % label)
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun        kernel = localdata.getVar("KERNEL_IMAGETYPE")
55*4882a593Smuzhiyun        entrycfg.write('linux /%s\n' % kernel)
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun        append = localdata.getVar('APPEND')
58*4882a593Smuzhiyun        initrd = localdata.getVar('INITRD')
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun        if initrd:
61*4882a593Smuzhiyun            entrycfg.write('initrd /initrd\n')
62*4882a593Smuzhiyun        lb = label
63*4882a593Smuzhiyun        if label == "install":
64*4882a593Smuzhiyun            lb = "install-efi"
65*4882a593Smuzhiyun        entrycfg.write('options LABEL=%s ' % lb)
66*4882a593Smuzhiyun        if append:
67*4882a593Smuzhiyun            append = replace_rootfs_uuid(d, append)
68*4882a593Smuzhiyun            entrycfg.write('%s' % append)
69*4882a593Smuzhiyun        entrycfg.write('\n')
70*4882a593Smuzhiyun        entrycfg.close()
71*4882a593Smuzhiyun}
72