From cb007a7bf6199ebca89f79c8ee5f9b1807a0c5b0 Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Fri, 20 Mar 2020 00:10:55 -1000 Subject: x86: switch image generation to new code This commit introduces few related changes which need to be done in single commit to keep images buildable between git revisions. In result it retains all previous image creation possibilities with slight name change of generated images. Brief summary of the commit: * Split up image generation recipe to smaller chunks to make it more generic and reusable. * Make iso images x86 specific and drop their definition as root filesystem. * Convert image creation process to generic code specified in image.mk. * Make geode subtarget inherit features from the main target instead of redefining them. * For subtargets create device definitions with basic packages set. Signed-off-by: Tomasz Maciej Nowak [rebased] Signed-off-by: Paul Spooren --- target/linux/x86/image/Makefile | 179 +++++++++++++++++----------------------- 1 file changed, 75 insertions(+), 104 deletions(-) (limited to 'target/linux/x86/image/Makefile') diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index 4e090bcf07..494a190b86 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -1,5 +1,5 @@ -# -# Copyright (C) 2006-2012 OpenWrt.org +# +# Copyright (C) 2006-2020 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -7,16 +7,12 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/image.mk -export PATH=$(TARGET_PATH):/sbin - GRUB2_VARIANT = GRUB_TERMINALS = GRUB_SERIAL_CONFIG = GRUB_TERMINAL_CONFIG = GRUB_CONSOLE_CMDLINE = -USE_ATKBD = generic 64 - ifneq ($(strip $(foreach subtarget,$(USE_ATKBD),$(CONFIG_TARGET_x86_$(subtarget)))),) GRUB2_VARIANT := generic else @@ -46,125 +42,100 @@ ROOTPART:=$(if $(ROOTPART),$(ROOTPART),PARTUUID=$(IMG_PART_SIGNATURE)-02) GRUB_TIMEOUT:=$(call qstrip,$(CONFIG_GRUB_TIMEOUT)) GRUB_TITLE:=$(call qstrip,$(CONFIG_GRUB_TITLE)) -ifneq ($(CONFIG_GRUB_IMAGES),) - - BOOTOPTS:=$(call qstrip,$(CONFIG_GRUB_BOOTOPTS)) - - define Image/cmdline/ext4 - root=$(ROOTPART) rootfstype=ext4 rootwait - endef +BOOTOPTS:=$(call qstrip,$(CONFIG_GRUB_BOOTOPTS)) - define Image/cmdline/squashfs - root=$(ROOTPART) rootfstype=squashfs rootwait - endef +define Build/combined + $(CP) $(KDIR)/$(KERNEL_NAME) $@.boot/boot/vmlinuz + -$(CP) $(STAGING_DIR_ROOT)/boot/. $@.boot/boot/ + PADDING="$(CONFIG_TARGET_IMAGES_PAD)" SIGNATURE="$(IMG_PART_SIGNATURE)" $(SCRIPT_DIR)/gen_image_generic.sh \ + $@ \ + $(CONFIG_TARGET_KERNEL_PARTSIZE) $@.boot \ + $(CONFIG_TARGET_ROOTFS_PARTSIZE) $(IMAGE_ROOTFS) \ + 256 +endef - define Image/Build/grub2 - # left here because the image builder doesnt need these - rm -fR $(KDIR)/root.grub $(KDIR)/grub2 - $(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2 - $(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz - $(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img \ - $(STAGING_DIR_HOST)/lib/grub/grub2-$(strip $(GRUB2_VARIANT))/core.img \ - $(KDIR)/grub2/ - echo '(hd0) $(BIN_DIR)/$(IMG_COMBINED)-$(1).img' > $(KDIR)/grub2/device.map +define Build/grub-config + rm -fR $@.boot + $(INSTALL_DIR) $@.boot/boot/grub sed \ -e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \ -e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \ - -e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \ + -e 's#@ROOTPART@#root=$(ROOTPART) rootwait#g' \ + -e 's#@CMDLINE@#$(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE)#g' \ -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \ -e 's#@TITLE@#$(GRUB_TITLE)#g' \ - ./grub.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg - -$(CP) $(STAGING_DIR_ROOT)/boot/. $(KDIR)/root.grub/boot/ - grub-bios-setup -V | cut -d' ' -f3 > $(KDIR)/root.grub/boot/grub/version - PADDING="1" SIGNATURE="$(IMG_PART_SIGNATURE)" PATH="$(TARGET_PATH)" $(SCRIPT_DIR)/gen_image_generic.sh \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).img \ - $(CONFIG_TARGET_KERNEL_PARTSIZE) $(KDIR)/root.grub \ - $(CONFIG_TARGET_ROOTFS_PARTSIZE) $(KDIR)/root.$(1) \ - 256 - grub-bios-setup \ - --device-map="$(KDIR)/grub2/device.map" \ - -d "$(KDIR)/root.grub/boot/grub" \ + ./grub-$(1).cfg > $@.boot/boot/grub/grub.cfg +endef + +define Build/grub-install + rm -fR $@.grub2 + $(INSTALL_DIR) $@.grub2 + $(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img \ + $(STAGING_DIR_HOST)/lib/grub/grub2-$(GRUB2_VARIANT)/core.img \ + $@.grub2/ + echo '(hd0) $@' > $@.grub2/device.map + $(STAGING_DIR_HOST)/bin/grub-bios-setup \ + -m "$@.grub2/device.map" \ + -d "$@.grub2" \ -r "hd0,msdos1" \ - "$(BIN_DIR)/$(IMG_COMBINED)-$(1).img" - endef -endif + $@ +endef -define Image/Build/iso - rm -fR $(KDIR)/root.grub $(KDIR)/grub2 - $(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2 - $(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz +define Build/iso + $(CP) $(KDIR)/$(KERNEL_NAME) $@.boot/boot/vmlinuz + cat \ + $(STAGING_DIR_HOST)/lib/grub/i386-pc/cdboot.img \ $(STAGING_DIR_HOST)/lib/grub/grub2-iso/eltorito.img \ - > $(KDIR)/root.grub/boot/grub/eltorito.img - sed \ - -e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \ - -e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \ - -e 's#@CMDLINE@#root=/dev/sr0 rootfstype=iso9660 rootwait $(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \ - -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \ - -e 's#@TITLE@#$(GRUB_TITLE)#g' \ - ./grub-iso.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg - -$(CP) $(STAGING_DIR_ROOT)/boot/. $(KDIR)/root.grub/boot/ + > $@.boot/boot/grub/eltorito.img + -$(CP) $(STAGING_DIR_ROOT)/boot/. $@.boot/boot/ mkisofs -R -b boot/grub/eltorito.img -no-emul-boot -boot-info-table \ - -o $(KDIR)/root.iso $(KDIR)/root.grub $(TARGET_DIR) + -o $@ $@.boot $(TARGET_DIR) endef -ifneq ($(CONFIG_VDI_IMAGES),) - define Image/Build/vdi - rm $(BIN_DIR)/$(IMG_COMBINED)-$(1).vdi || true - $(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vdi \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).img \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).vdi - endef -endif +define Build/vdi + qemu-img convert -f raw -O vdi $@ $@.new + @mv $@.new $@ +endef -ifneq ($(CONFIG_VMDK_IMAGES),) - define Image/Build/vmdk - rm $(BIN_DIR)/$(IMG_COMBINED)-$(1).vmdk || true - $(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vmdk \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).img \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).vmdk - #build the ESXI VMDK with - rm $(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi.vmdk || true - rm $(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi-flat.vmdk || true - $(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).img \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi.vmdk - endef -endif +define Build/vmdk + qemu-img convert -f raw -O vmdk $@ $@.new + @mv $@.new $@ +endef -define Image/Build/gzip - gzip -f9n $(BIN_DIR)/$(IMG_COMBINED)-$(1).img - gzip -f9n $(BIN_DIR)/$(IMG_ROOTFS)-$(1).img +DEVICE_VARS += GRUB2_VARIANT +define Device/Default + ARTIFACT/image.iso := grub-config iso | iso + IMAGES := combined.img.gz + IMAGE/combined.img.gz := append-rootfs | pad-extra 128k | grub-config pc | combined | grub-install | gzip + IMAGE/combined.vdi := append-rootfs | pad-extra 128k | grub-config pc | combined | grub-install | vdi + IMAGE/combined.vmdk := append-rootfs | pad-extra 128k | grub-config pc | combined | grub-install | vmdk + KERNEL := kernel-bin + KERNEL_INSTALL := 1 + KERNEL_NAME := bzImage + ifeq ($(CONFIG_ISO_IMAGES),y) + ARTIFACTS := image.iso + endif + ifeq ($(CONFIG_VDI_IMAGES),y) + IMAGES += combined.vdi + endif + ifeq ($(CONFIG_VMDK_IMAGES),y) + IMAGES += combined.vmdk + endif endef $(eval $(call Image/gzip-ext4-padded-squashfs)) -define Image/BuildKernel - $(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz -endef - -define Image/Prepare - $(call Image/Prepare/grub2) -endef +ifeq ($(SUBTARGET),64) + include 64.mk +endif -define Image/Build/Initramfs - $(CP) $(KDIR)/bzImage-initramfs $(BIN_DIR)/$(IMG_PREFIX)-ramfs.bzImage -endef +ifeq ($(SUBTARGET),generic) + include generic.mk +endif -define Image/Build - $(call Image/Build/$(1)) - ifneq ($(1),iso) - $(call Image/Build/grub2,$(1)) - $(call Image/Build/vdi,$(1)) - $(call Image/Build/vmdk,$(1)) - $(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_ROOTFS)-$(1).img - else - $(CP) $(KDIR)/root.iso $(BIN_DIR)/$(IMG_PREFIX).iso - endif - $(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz - $(call Image/Build/gzip/$(1)) -ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) - $(call Image/Build/Initramfs) +ifeq ($(SUBTARGET),legacy) + include legacy.mk endif -endef $(eval $(call BuildImage)) + -- cgit v1.2.3