[OpenWrt-Devel] [RFC 2/6] x86: switch image generation to new code

Tomasz Maciej Nowak tomek_n at o2.pl
Sun Jan 13 16:49:11 EST 2019


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 <tomek_n at o2.pl>
---
 config/Config-images.in                       |  22 +--
 include/image.mk                              |   1 -
 target/linux/x86/Makefile                     |   4 +-
 target/linux/x86/geode/target.mk              |   2 +-
 target/linux/x86/image/64.mk                  |   5 +
 target/linux/x86/image/Makefile               | 181 +++++++-----------
 target/linux/x86/image/generic.mk             |   8 +
 target/linux/x86/image/geode.mk               |  16 ++
 target/linux/x86/image/grub-iso.cfg           |   2 +-
 .../linux/x86/image/{grub.cfg => grub-pc.cfg} |   4 +-
 target/linux/x86/image/legacy.mk              |   8 +
 11 files changed, 124 insertions(+), 129 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
 rename target/linux/x86/image/{grub.cfg => grub-pc.cfg} (57%)
 create mode 100644 target/linux/x86/image/legacy.mk

diff --git a/config/Config-images.in b/config/Config-images.in
index 3eb8113fb3..8adede41b6 100644
--- a/config/Config-images.in
+++ b/config/Config-images.in
@@ -119,13 +119,6 @@ menu "Target Images"
 			help
 			  Create an ext4 filesystem with a journal.
 
-	config TARGET_ROOTFS_ISO
-		bool "iso"
-		default n
-		depends on TARGET_x86_generic
-		help
-		  Create a bootable ISO image.
-
 	config TARGET_ROOTFS_JFFS2
 		bool "jffs2"
 		depends on USES_JFFS2
@@ -190,7 +183,7 @@ menu "Target Images"
 	config GRUB_IMAGES
 		bool "Build GRUB images (Linux x86 or x86_64 host only)"
 		depends on TARGET_x86
-		depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS
+		depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS
 		select PACKAGE_grub2
 		default y
 
@@ -236,6 +229,11 @@ menu "Target Images"
 		  This is the title of the GRUB menu entry.
 		  If unspecified, it defaults to OpenWrt.
 
+	config ISO_IMAGES
+		bool "Build LiveCD image (ISO)"
+		depends on TARGET_x86_generic
+		select GRUB_IMAGES
+
 	config VDI_IMAGES
 		bool "Build VirtualBox image files (VDI)"
 		depends on TARGET_x86
@@ -251,12 +249,12 @@ menu "Target Images"
 		select PACKAGE_kmod-e1000
 
 	config TARGET_IMAGES_PAD
-		bool "Pad images to filesystem size (for JFFS2)"
+		bool "Pad images to filesystem size"
 		depends on GRUB_IMAGES
 
 	config TARGET_IMAGES_GZIP
 		bool "GZip images"
-		depends on TARGET_IMAGES_PAD || TARGET_ROOTFS_EXT4FS || TARGET_x86
+		depends on TARGET_ROOTFS_EXT4FS
 		default y
 
 	comment "Image Options"
@@ -265,13 +263,13 @@ menu "Target Images"
 
 	config TARGET_KERNEL_PARTSIZE
 		int "Kernel partition size (in MB)"
-		depends on GRUB_IMAGES || USES_BOOT_PART
+		depends on USES_BOOT_PART
 		default 8 if TARGET_apm821xx_sata
 		default 16
 
 	config TARGET_ROOTFS_PARTSIZE
 		int "Root filesystem partition size (in MB)"
-		depends on GRUB_IMAGES || USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_mvebu || TARGET_rb532 || TARGET_sunxi || TARGET_uml
+		depends on USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_mvebu || TARGET_rb532 || TARGET_sunxi || TARGET_uml
 		default 256
 		help
 		  Select the root filesystem partition size.
diff --git a/include/image.mk b/include/image.mk
index a2b106d909..bbcd231e4e 100644
--- a/include/image.mk
+++ b/include/image.mk
@@ -90,7 +90,6 @@ fs-types-$(CONFIG_TARGET_ROOTFS_SQUASHFS) += squashfs
 fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addprefix jffs2-,$(JFFS2_BLOCKSIZE))
 fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2_NAND) += $(addprefix jffs2-nand-,$(NAND_BLOCKSIZE))
 fs-types-$(CONFIG_TARGET_ROOTFS_EXT4FS) += ext4
-fs-types-$(CONFIG_TARGET_ROOTFS_ISO) += iso
 fs-types-$(CONFIG_TARGET_ROOTFS_UBIFS) += ubifs
 fs-subtypes-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addsuffix -raw,$(addprefix jffs2-,$(JFFS2_BLOCKSIZE)))
 
diff --git a/target/linux/x86/Makefile b/target/linux/x86/Makefile
index 533c0e5248..2818402594 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
 MAINTAINER:=Felix Fietkau <nbd at nbd.name>
 
@@ -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..5473d2a32b 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..f9efb67a99
--- /dev/null
+++ b/target/linux/x86/image/64.mk
@@ -0,0 +1,5 @@
+define Device/generic
+  DEVICE_TITLE := Generic
+  GRUB2_VARIANT := generic
+endef
+TARGET_DEVICES += generic
diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile
index 91cd2f9a04..939402f54c 100644
--- a/target/linux/x86/image/Makefile
+++ b/target/linux/x86/image/Makefile
@@ -7,22 +7,11 @@
 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
-  GRUB2_VARIANT := legacy
-endif
-
 ifneq ($(CONFIG_GRUB_CONSOLE),)
   GRUB_CONSOLE_CMDLINE += console=tty0
   GRUB_TERMINALS += console
@@ -47,129 +36,101 @@ ROOTPART:=$(if $(ROOTPART),$(ROOTPART),PARTUUID=$(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))
+BOOTOPTS:=$(call qstrip,$(CONFIG_GRUB_BOOTOPTS))
 
-  define Image/cmdline/ext4
-    root=$(ROOTPART) rootfstype=ext4 rootwait
-  endef
-
-  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="$(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
-	$(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_PREFIX)-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/
-	PADDING="$(CONFIG_TARGET_IMAGES_PAD)" SIGNATURE="$(SIGNATURE)" PATH="$(TARGET_PATH)" $(SCRIPT_DIR)/gen_image_generic.sh \
-		$(BIN_DIR)/$(IMG_PREFIX)-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)/grub2" \
-		-r "hd0,msdos1" \
-		"$(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img"
-  endef
-endif
+		./grub-$(1).cfg > $@.boot/boot/grub/grub.cfg
+endef
 
-define Image/Build/squashfs
-	dd if=/dev/zero bs=128k count=1 >> $(KDIR)/root.squashfs
+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" \
+		$@
 endef
 
-define Image/Build/iso
-	$(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_PREFIX)-combined-$(1).vdi || true
-	qemu-img convert -f raw -O vdi \
-		$(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \
-		$(BIN_DIR)/$(IMG_PREFIX)-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_PREFIX)-combined-$(1).vmdk || true
-	qemu-img convert -f raw -O vmdk \
-		$(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \
-		$(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).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_PREFIX)-combined-$(1).img
-	gzip -f9n $(BIN_DIR)/$(IMG_PREFIX)-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
 
-ifneq ($(CONFIG_TARGET_IMAGES_GZIP),)
-  define Image/Build/gzip/ext4
-	$(call Image/Build/gzip,ext4)
-  endef
-  define Image/Build/gzip/squashfs
-	$(call Image/Build/gzip,squashfs)
-  endef
+ifeq ($(SUBTARGET),64)
+  include 64.mk
 endif
 
-define Image/BuildKernel
-	$(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz
-endef
-
-define Image/Prepare
-	$(call Image/Prepare/grub2)
-endef
+ifeq ($(SUBTARGET),geode)
+  include geode.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_PREFIX)-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..ade6236395
--- /dev/null
+++ b/target/linux/x86/image/generic.mk
@@ -0,0 +1,8 @@
+define Device/generic
+  DEVICE_TITLE := Generic
+  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..130b74d0ed
--- /dev/null
+++ b/target/linux/x86/image/geode.mk
@@ -0,0 +1,16 @@
+define Device/generic
+  DEVICE_TITLE := Generic
+  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.cfg b/target/linux/x86/image/grub-pc.cfg
similarity index 57%
rename from target/linux/x86/image/grub.cfg
rename to target/linux/x86/image/grub-pc.cfg
index 76a9885544..75605bcabf 100644
--- a/target/linux/x86/image/grub.cfg
+++ b/target/linux/x86/image/grub-pc.cfg
@@ -6,8 +6,8 @@ set timeout="@TIMEOUT@"
 set root='(hd0,msdos1)'
 
 menuentry "@TITLE@" {
-	linux /boot/vmlinuz @CMDLINE@ noinitrd
+	linux /boot/vmlinuz @ROOTPART@ @CMDLINE@ noinitrd
 }
 menuentry "@TITLE@ (failsafe)" {
-	linux /boot/vmlinuz failsafe=true @CMDLINE@ noinitrd
+	linux /boot/vmlinuz failsafe=true @ROOTPART@ @CMDLINE@ noinitrd
 }
diff --git a/target/linux/x86/image/legacy.mk b/target/linux/x86/image/legacy.mk
new file mode 100644
index 0000000000..f97908f792
--- /dev/null
+++ b/target/linux/x86/image/legacy.mk
@@ -0,0 +1,8 @@
+define Device/generic
+  DEVICE_TITLE := Generic
+  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
-- 
2.20.1


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list