openwrt/target/linux/x86/image/Makefile
Paul Spooren 6fcca31fc3 x86: fix padding in images
The previous rework of x86 image creation done in commit  cb007a7bf6
("x86: switch image generation to new code") broke the padding in
images.

 sda: p2 size 212992 extends beyond EOD, enabling native capacity
 sda: p2 size 212992 extends beyond EOD, truncated
 sd 0:0:0:0: [sda] Attached SCSI disk
 SQUASHFS error: squashfs_read_data failed to read block 0x2cc556
 unable to read id index table
 VFS: Cannot open root device "PARTUUID=ac5c9cd8-02" or unknown-block(8,2): error -5
 Please append a correct "root=" boot option; here are the available partitions:
 0800           19761 sda
  driver: sd
   0801           16384 sda1 ac5c9cd8-01

   0802            2865 sda2 ac5c9cd8-02

 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,2)

Tested with x86/64 with Docker (squashfs), qemustart (ext4/squashfs) and
virtualbox (ext4/squashfs).

Ref: FS#2935
Fixes: cb007a7bf6 ("x86: switch image generation to new code")
Suggested-by: Russell Senior <russell@personaltelco.net>
Signed-off-by: Paul Spooren <mail@aparcar.org>
[commit subject and description tweaks]
Signed-off-by: Petr Štetiar <ynezz@true.cz>
2020-03-28 13:03:02 +01:00

141 lines
3.8 KiB
Makefile

#
# Copyright (C) 2006-2020 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
GRUB2_VARIANT =
GRUB_TERMINALS =
GRUB_SERIAL_CONFIG =
GRUB_TERMINAL_CONFIG =
GRUB_CONSOLE_CMDLINE =
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
endif
GRUB_SERIAL:=$(call qstrip,$(CONFIG_GRUB_SERIAL))
ifneq ($(GRUB_SERIAL),)
GRUB_CONSOLE_CMDLINE += console=$(GRUB_SERIAL),$(CONFIG_GRUB_BAUDRATE)n8$(if $(CONFIG_GRUB_FLOWCONTROL),r,)
GRUB_SERIAL_CONFIG := serial --unit=0 --speed=$(CONFIG_GRUB_BAUDRATE) --word=8 --parity=no --stop=1 --rtscts=$(if $(CONFIG_GRUB_FLOWCONTROL),on,off)
GRUB_TERMINALS += serial
endif
ifneq ($(GRUB_TERMINALS),)
GRUB_TERMINAL_CONFIG := terminal_input $(GRUB_TERMINALS); terminal_output $(GRUB_TERMINALS)
endif
ROOTPART:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_PARTNAME))
ROOTPART:=$(if $(ROOTPART),$(ROOTPART),PARTUUID=$(IMG_PART_SIGNATURE)-02)
GRUB_TIMEOUT:=$(call qstrip,$(CONFIG_GRUB_TIMEOUT))
GRUB_TITLE:=$(call qstrip,$(CONFIG_GRUB_TITLE))
BOOTOPTS:=$(call qstrip,$(CONFIG_GRUB_BOOTOPTS))
define Build/combined
$(CP) $(KDIR)/$(KERNEL_NAME) $@.boot/boot/vmlinuz
-$(CP) $(STAGING_DIR_ROOT)/boot/. $@.boot/boot/
PADDING="1" SIGNATURE="$(IMG_PART_SIGNATURE)" $(SCRIPT_DIR)/gen_image_generic.sh \
$@ \
$(CONFIG_TARGET_KERNEL_PARTSIZE) $@.boot \
$(CONFIG_TARGET_ROOTFS_PARTSIZE) $(IMAGE_ROOTFS) \
256
endef
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#@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-$(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" \
$@
endef
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 \
> $@.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 $@ $@.boot $(TARGET_DIR)
endef
DEVICE_VARS += GRUB2_VARIANT
define Device/Default
ARTIFACT/image.iso := grub-config iso | iso
IMAGE/combined.img := grub-config pc | combined | grub-install
IMAGE/combined.img.gz := grub-config pc | combined | grub-install | gzip
IMAGE/combined.vdi := grub-config pc | combined | grub-install | qemu-image vdi
IMAGE/combined.vmdk := grub-config pc | combined | grub-install | qemu-image vmdk
ifeq ($(CONFIG_TARGET_IMAGES_GZIP),y)
IMAGES := combined.img.gz
else
IMAGES := combined.img
endif
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))
ifeq ($(SUBTARGET),64)
include 64.mk
endif
ifeq ($(SUBTARGET),generic)
include generic.mk
endif
ifeq ($(SUBTARGET),geode)
include geode.mk
endif
ifeq ($(SUBTARGET),legacy)
include legacy.mk
endif
$(eval $(call BuildImage))