diff options
| author | Fabio Berton <fabio.berton@ossystems.com.br> | 2016-10-04 10:54:10 -0300 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-10-07 16:43:58 +0100 |
| commit | 7df195106caefe2f6272221f2676d621e04b586c (patch) | |
| tree | 64e9a8c5c5e64a31e1b91d9cd43f3bb1118437d5 /meta/classes/uboot-extlinux-config.bbclass | |
| parent | 09a9de45e1d715ca5897fefc7935392f20a7d519 (diff) | |
| download | poky-7df195106caefe2f6272221f2676d621e04b586c.tar.gz | |
classes/uboot-extlinux-config: Add class
This class allow the extlinux.conf generation for U-Boot use.
The U-Boot support for it is given to allow the Generic Distribution
Configuration specification use by OpenEmbedded-based products.
This class can be inherited by u-boot recipes to create extlinux.conf
and boot using menu options.
U-boot with extlinux support is machine dependent, so to use this class
you need to set UBOOT_EXTLINUX to 1 in machine configuration file and
also set root= kernel cmdline UBOOT_EXTLINUX_ROOT. This variable is used
to pass root kernel cmdline, e.g:
UBOOT_EXTLINUX_ROOT = "root=/dev/mmcblk2p2"
(From OE-Core rev: 7c18abeb2a6ef8b7bb53aa92a9ee76bd465fada2)
Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/uboot-extlinux-config.bbclass')
| -rw-r--r-- | meta/classes/uboot-extlinux-config.bbclass | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/meta/classes/uboot-extlinux-config.bbclass b/meta/classes/uboot-extlinux-config.bbclass new file mode 100644 index 0000000000..df91386c00 --- /dev/null +++ b/meta/classes/uboot-extlinux-config.bbclass | |||
| @@ -0,0 +1,126 @@ | |||
| 1 | # uboot-extlinux-config.bbclass | ||
| 2 | # | ||
| 3 | # This class allow the extlinux.conf generation for U-Boot use. The | ||
| 4 | # U-Boot support for it is given to allow the Generic Distribution | ||
| 5 | # Configuration specification use by OpenEmbedded-based products. | ||
| 6 | # | ||
| 7 | # External variables: | ||
| 8 | # | ||
| 9 | # UBOOT_EXTLINUX_CONSOLE - Set to "console=ttyX" to change kernel boot | ||
| 10 | # default console. | ||
| 11 | # UBOOT_EXTLINUX_LABELS - A list of targets for the automatic config. | ||
| 12 | # UBOOT_EXTLINUX_KERNEL_ARGS - Add additional kernel arguments. | ||
| 13 | # UBOOT_EXTLINUX_KERNEL_IMAGE - Kernel image name. | ||
| 14 | # UBOOT_EXTLINUX_FDTDIR - Device tree directory. | ||
| 15 | # UBOOT_EXTLINUX_INITRD - Indicates a list of filesystem images to | ||
| 16 | # concatenate and use as an initrd (optional). | ||
| 17 | # UBOOT_EXTLINUX_MENU_DESCRIPTION - Name to use as description. | ||
| 18 | # UBOOT_EXTLINUX_ROOT - Root kernel cmdline. | ||
| 19 | # | ||
| 20 | # If there's only one label system will boot automatically and menu won't be | ||
| 21 | # created. If you want to use more than one labels, e.g linux and alternate, | ||
| 22 | # use overrides to set menu description, console and others variables. | ||
| 23 | # | ||
| 24 | # Ex: | ||
| 25 | # | ||
| 26 | # UBOOT_EXTLINUX_LABELS ??= "default fallback" | ||
| 27 | # | ||
| 28 | # UBOOT_EXTLINUX_KERNEL_IMAGE_default ??= "../zImage" | ||
| 29 | # UBOOT_EXTLINUX_MENU_DESCRIPTION_default ??= "Linux Default" | ||
| 30 | # | ||
| 31 | # UBOOT_EXTLINUX_KERNEL_IMAGE_fallback ??= "../zImage-fallback" | ||
| 32 | # UBOOT_EXTLINUX_MENU_DESCRIPTION_fallback ??= "Linux Fallback" | ||
| 33 | # | ||
| 34 | # Results: | ||
| 35 | # | ||
| 36 | # menu title Select the boot mode | ||
| 37 | # LABEL Linux Default | ||
| 38 | # KERNEL ../zImage | ||
| 39 | # FDTDIR ../ | ||
| 40 | # APPEND root=/dev/mmcblk2p2 rootwait rw console=${console} | ||
| 41 | # LABEL Linux Fallback | ||
| 42 | # KERNEL ../zImage-fallback | ||
| 43 | # FDTDIR ../ | ||
| 44 | # APPEND root=/dev/mmcblk2p2 rootwait rw console=${console} | ||
| 45 | # | ||
| 46 | # Copyright (C) 2016, O.S. Systems Software LTDA. All Rights Reserved | ||
| 47 | # Released under the MIT license (see packages/COPYING) | ||
| 48 | # | ||
| 49 | # The kernel has an internal default console, which you can override with | ||
| 50 | # a console=...some_tty... | ||
| 51 | UBOOT_EXTLINUX_CONSOLE ??= "console=${console}" | ||
| 52 | UBOOT_EXTLINUX_LABELS ??= "linux" | ||
| 53 | UBOOT_EXTLINUX_FDTDIR ??= "../" | ||
| 54 | UBOOT_EXTLINUX_KERNEL_IMAGE ??= "../${KERNEL_IMAGETYPE}" | ||
| 55 | UBOOT_EXTLINUX_KERNEL_ARGS ??= "rootwait rw" | ||
| 56 | UBOOT_EXTLINUX_MENU_DESCRIPTION_linux ??= "${DISTRO_NAME}" | ||
| 57 | |||
| 58 | UBOOT_EXTLINUX_CONFIG = "${B}/extlinux.conf" | ||
| 59 | |||
| 60 | python create_extlinux_config() { | ||
| 61 | if d.getVar("UBOOT_EXTLINUX", True) != "1": | ||
| 62 | return | ||
| 63 | |||
| 64 | if not d.getVar('WORKDIR', True): | ||
| 65 | bb.error("WORKDIR not defined, unable to package") | ||
| 66 | |||
| 67 | labels = d.getVar('UBOOT_EXTLINUX_LABELS', True) | ||
| 68 | if not labels: | ||
| 69 | bb.fatal("UBOOT_EXTLINUX_LABELS not defined, nothing to do") | ||
| 70 | |||
| 71 | if not labels.strip(): | ||
| 72 | bb.fatal("No labels, nothing to do") | ||
| 73 | |||
| 74 | cfile = d.getVar('UBOOT_EXTLINUX_CONFIG', True) | ||
| 75 | if not cfile: | ||
| 76 | bb.fatal('Unable to read UBOOT_EXTLINUX_CONFIG') | ||
| 77 | |||
| 78 | try: | ||
| 79 | with open(cfile, 'w') as cfgfile: | ||
| 80 | cfgfile.write('# Generic Distro Configuration file generated by OpenEmbedded\n') | ||
| 81 | |||
| 82 | if len(labels.split()) > 1: | ||
| 83 | cfgfile.write('menu title Select the boot mode\n') | ||
| 84 | |||
| 85 | for label in labels.split(): | ||
| 86 | localdata = bb.data.createCopy(d) | ||
| 87 | |||
| 88 | overrides = localdata.getVar('OVERRIDES', True) | ||
| 89 | if not overrides: | ||
| 90 | bb.fatal('OVERRIDES not defined') | ||
| 91 | |||
| 92 | localdata.setVar('OVERRIDES', label + ':' + overrides) | ||
| 93 | bb.data.update_data(localdata) | ||
| 94 | |||
| 95 | extlinux_console = localdata.getVar('UBOOT_EXTLINUX_CONSOLE', True) | ||
| 96 | |||
| 97 | menu_description = localdata.getVar('UBOOT_EXTLINUX_MENU_DESCRIPTION', True) | ||
| 98 | if not menu_description: | ||
| 99 | menu_description = label | ||
| 100 | |||
| 101 | root = localdata.getVar('UBOOT_EXTLINUX_ROOT', True) | ||
| 102 | if not root: | ||
| 103 | bb.fatal('UBOOT_EXTLINUX_ROOT not defined') | ||
| 104 | |||
| 105 | kernel_image = localdata.getVar('UBOOT_EXTLINUX_KERNEL_IMAGE', True) | ||
| 106 | fdtdir = localdata.getVar('UBOOT_EXTLINUX_FDTDIR', True) | ||
| 107 | if fdtdir: | ||
| 108 | cfgfile.write('LABEL %s\n\tKERNEL %s\n\tFDTDIR %s\n' % | ||
| 109 | (menu_description, kernel_image, fdtdir)) | ||
| 110 | else: | ||
| 111 | cfgfile.write('LABEL %s\n\tKERNEL %s\n' % (menu_description, kernel_image)) | ||
| 112 | |||
| 113 | kernel_args = localdata.getVar('UBOOT_EXTLINUX_KERNEL_ARGS', True) | ||
| 114 | |||
| 115 | initrd = localdata.getVar('UBOOT_EXTLINUX_INITRD', True) | ||
| 116 | if initrd: | ||
| 117 | cfgfile.write('\tINITRD %s\n'% initrd) | ||
| 118 | |||
| 119 | kernel_args = root + " " + kernel_args | ||
| 120 | cfgfile.write('\tAPPEND %s %s\n' % (kernel_args, extlinux_console)) | ||
| 121 | |||
| 122 | except OSError: | ||
| 123 | bb.fatal('Unable to open %s' % (cfile)) | ||
| 124 | } | ||
| 125 | |||
| 126 | do_install[prefuncs] += "create_extlinux_config" | ||
