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/Makefile | 4 +- target/linux/x86/geode/target.mk | 2 +- target/linux/x86/image/64.mk | 5 + target/linux/x86/image/Makefile | 179 +++++++++++++++--------------------- target/linux/x86/image/generic.mk | 8 ++ target/linux/x86/image/geode.mk | 16 ++++ target/linux/x86/image/grub-iso.cfg | 2 +- target/linux/x86/image/grub-pc.cfg | 13 +++ target/linux/x86/image/grub.cfg | 13 --- target/linux/x86/image/legacy.mk | 8 ++ 10 files changed, 129 insertions(+), 121 deletions(-) create mode 100644 target/linux/x86/image/64.mk create mode 100644 target/linux/x86/image/generic.mk create mode 100644 target/linux/x86/image/geode.mk create mode 100644 target/linux/x86/image/grub-pc.cfg delete mode 100644 target/linux/x86/image/grub.cfg create mode 100644 target/linux/x86/image/legacy.mk (limited to 'target') diff --git a/target/linux/x86/Makefile b/target/linux/x86/Makefile index a646e6e8a7..045d043e4d 100644 --- a/target/linux/x86/Makefile +++ b/target/linux/x86/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=i386 BOARD:=x86 BOARDNAME:=x86 -FEATURES:=squashfs ext4 vdi vmdk pcmcia targz fpu +FEATURES:=squashfs ext4 vdi vmdk pcmcia targz fpu boot-part rootfs-part SUBTARGETS:=generic legacy geode 64 KERNEL_PATCHVER:=5.4 @@ -23,6 +23,6 @@ DEFAULT_PACKAGES += partx-utils mkf2fs e2fsprogs $(eval $(call BuildTarget)) -$(eval $(call $(if $(CONFIG_TARGET_ROOTFS_ISO),RequireCommand,Ignore),mkisofs, \ +$(eval $(call $(if $(CONFIG_ISO_IMAGES),RequireCommand,Ignore),mkisofs, \ Please install mkisofs. \ )) diff --git a/target/linux/x86/geode/target.mk b/target/linux/x86/geode/target.mk index f1d7b9fe14..f4c7b9564e 100644 --- a/target/linux/x86/geode/target.mk +++ b/target/linux/x86/geode/target.mk @@ -1,5 +1,5 @@ BOARDNAME:=AMD Geode based systems -FEATURES:=squashfs ext4 pci usb gpio +FEATURES:=pci usb gpio DEFAULT_PACKAGES += \ kmod-crypto-hw-geode kmod-crypto-cbc \ kmod-ath5k kmod-ath9k \ diff --git a/target/linux/x86/image/64.mk b/target/linux/x86/image/64.mk new file mode 100644 index 0000000000..bde76ceba5 --- /dev/null +++ b/target/linux/x86/image/64.mk @@ -0,0 +1,5 @@ +define Device/generic + DEVICE_TITLE := Generic x86/64 + GRUB2_VARIANT := generic +endef +TARGET_DEVICES += generic 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)) + diff --git a/target/linux/x86/image/generic.mk b/target/linux/x86/image/generic.mk new file mode 100644 index 0000000000..65f7361184 --- /dev/null +++ b/target/linux/x86/image/generic.mk @@ -0,0 +1,8 @@ +define Device/generic + DEVICE_TITLE := Generic x86 + DEVICE_PACKAGES += kmod-3c59x kmod-8139too kmod-e100 kmod-e1000 kmod-natsemi \ + kmod-ne2k-pci kmod-pcnet32 kmod-r8169 kmod-sis900 kmod-tg3 \ + kmod-via-rhine kmod-via-velocity + GRUB2_VARIANT := generic +endef +TARGET_DEVICES += generic diff --git a/target/linux/x86/image/geode.mk b/target/linux/x86/image/geode.mk new file mode 100644 index 0000000000..0b463e36ed --- /dev/null +++ b/target/linux/x86/image/geode.mk @@ -0,0 +1,16 @@ +define Device/generic + DEVICE_TITLE := Generic x86/Geode + DEVICE_PACKAGES += kmod-crypto-cbc kmod-crypto-hw-geode kmod-ledtrig-gpio \ + kmod-ledtrig-heartbeat kmod-ledtrig-netdev kmod-via-rhine + GRUB2_VARIANT := legacy +endef +TARGET_DEVICES += generic + +define Device/geos + $(call Device/generic) + DEVICE_TITLE := Traverse Technologies Geos + DEVICE_PACKAGES += br2684ctl flashrom kmod-8139cp kmod-hwmon-lm90 kmod-mppe \ + kmod-pppoa kmod-usb-ohci-pci linux-atm ppp-mod-pppoa pppdump pppstats \ + soloscli tc +endef +TARGET_DEVICES += geos diff --git a/target/linux/x86/image/grub-iso.cfg b/target/linux/x86/image/grub-iso.cfg index 9c59bdf6d4..f5848b3853 100644 --- a/target/linux/x86/image/grub-iso.cfg +++ b/target/linux/x86/image/grub-iso.cfg @@ -6,5 +6,5 @@ set timeout="@TIMEOUT@" set root='(cd)' menuentry "@TITLE@" { - linux /boot/vmlinuz @CMDLINE@ noinitrd + linux /boot/vmlinuz root=/dev/sr0 rootfstype=iso9660 rootwait @CMDLINE@ noinitrd } diff --git a/target/linux/x86/image/grub-pc.cfg b/target/linux/x86/image/grub-pc.cfg new file mode 100644 index 0000000000..75605bcabf --- /dev/null +++ b/target/linux/x86/image/grub-pc.cfg @@ -0,0 +1,13 @@ +@SERIAL_CONFIG@ +@TERMINAL_CONFIG@ + +set default="0" +set timeout="@TIMEOUT@" +set root='(hd0,msdos1)' + +menuentry "@TITLE@" { + linux /boot/vmlinuz @ROOTPART@ @CMDLINE@ noinitrd +} +menuentry "@TITLE@ (failsafe)" { + linux /boot/vmlinuz failsafe=true @ROOTPART@ @CMDLINE@ noinitrd +} diff --git a/target/linux/x86/image/grub.cfg b/target/linux/x86/image/grub.cfg deleted file mode 100644 index 76a9885544..0000000000 --- a/target/linux/x86/image/grub.cfg +++ /dev/null @@ -1,13 +0,0 @@ -@SERIAL_CONFIG@ -@TERMINAL_CONFIG@ - -set default="0" -set timeout="@TIMEOUT@" -set root='(hd0,msdos1)' - -menuentry "@TITLE@" { - linux /boot/vmlinuz @CMDLINE@ noinitrd -} -menuentry "@TITLE@ (failsafe)" { - linux /boot/vmlinuz failsafe=true @CMDLINE@ noinitrd -} diff --git a/target/linux/x86/image/legacy.mk b/target/linux/x86/image/legacy.mk new file mode 100644 index 0000000000..9909341729 --- /dev/null +++ b/target/linux/x86/image/legacy.mk @@ -0,0 +1,8 @@ +define Device/generic + DEVICE_TITLE := Generic x86/legacy + DEVICE_PACKAGES += kmod-3c59x kmod-8139too kmod-e100 kmod-e1000 \ + kmod-natsemi kmod-ne2k-pci kmod-pcnet32 kmod-r8169 kmod-sis900 \ + kmod-tg3 kmod-via-rhine kmod-via-velocity + GRUB2_VARIANT := legacy +endef +TARGET_DEVICES += generic -- cgit v1.2.3