mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 06:33:41 +00:00
b322243d2f
Currently bootloader always stays on the same version as when first written to boot medium (not true if partition layout changed, which will trigger sysupgrade process to write full disk image). That creates inconveniences as it always stays with same features or/and bugs. Users wishing to add support to additional modules or new version, would need to write the whole image, potentially destroying previous system configuration. To fix these, this commit adds additional routine to sysupgrade which upgrades unconditionally the bootloader to the latest state provided by OpenWrt. Signed-off-by: Tomasz Maciej Nowak <tomek_n@o2.pl>
185 lines
6.0 KiB
Makefile
185 lines
6.0 KiB
Makefile
#
|
|
# Copyright (C) 2006-2012 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
|
|
|
|
export PATH=$(TARGET_PATH):/sbin
|
|
|
|
GRUB2_MODULES = biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial test vga
|
|
GRUB2_MODULES_ISO = biosdisk boot chain configfile iso9660 linux ls part_msdos reboot serial test vga
|
|
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_MODULES += at_keyboard
|
|
GRUB2_MODULES_ISO += at_keyboard
|
|
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))
|
|
|
|
ifneq ($(CONFIG_GRUB_IMAGES),)
|
|
|
|
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 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
|
|
grub-mkimage \
|
|
-p /boot/grub \
|
|
-d $(STAGING_DIR_HOST)/lib/grub/i386-pc \
|
|
-o $(KDIR)/root.grub/boot/grub/core.img \
|
|
-O i386-pc \
|
|
-c ./grub-early.cfg \
|
|
$(GRUB2_MODULES)
|
|
$(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img $(KDIR)/root.grub/boot/grub/
|
|
echo '(hd0) $(BIN_DIR)/$(IMG_COMBINED)-$(1).img' > $(KDIR)/grub2/device.map
|
|
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#@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" \
|
|
-r "hd0,msdos1" \
|
|
"$(BIN_DIR)/$(IMG_COMBINED)-$(1).img"
|
|
endef
|
|
endif
|
|
|
|
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
|
|
grub-mkimage \
|
|
-p /boot/grub \
|
|
-d $(STAGING_DIR_HOST)/lib/grub/i386-pc \
|
|
-o $(KDIR)/grub2/eltorito.img \
|
|
-O i386-pc \
|
|
-c ./grub-early.cfg \
|
|
$(GRUB2_MODULES_ISO)
|
|
cat \
|
|
$(STAGING_DIR_HOST)/lib/grub/i386-pc/cdboot.img \
|
|
$(KDIR)/grub2/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/
|
|
mkisofs -R -b boot/grub/eltorito.img -no-emul-boot -boot-info-table \
|
|
-o $(KDIR)/root.iso $(KDIR)/root.grub $(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
|
|
|
|
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 Image/Build/gzip
|
|
gzip -f9n $(BIN_DIR)/$(IMG_COMBINED)-$(1).img
|
|
gzip -f9n $(BIN_DIR)/$(IMG_ROOTFS)-$(1).img
|
|
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
|
|
|
|
define Image/Build/Initramfs
|
|
$(CP) $(KDIR)/bzImage-initramfs $(BIN_DIR)/$(IMG_PREFIX)-ramfs.bzImage
|
|
endef
|
|
|
|
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)
|
|
endif
|
|
endef
|
|
|
|
$(eval $(call BuildImage))
|