1 # SPDX-License-Identifier: GPL-2.0-only
3 # Copyright (C) 2006-2020 OpenWrt.org
5 include $(TOPDIR
)/rules.mk
6 include $(INCLUDE_DIR
)/image.mk
11 GRUB_TERMINAL_CONFIG
=
12 GRUB_CONSOLE_CMDLINE
=
14 ifneq ($(CONFIG_GRUB_CONSOLE
),)
15 GRUB_CONSOLE_CMDLINE
+= console
=tty0
16 GRUB_TERMINALS
+= console
19 GRUB_SERIAL
:=$(call qstrip
,$(CONFIG_GRUB_SERIAL
))
21 GRUB_CONSOLE_CMDLINE
+= console
=$(GRUB_SERIAL
),$(CONFIG_GRUB_BAUDRATE
)n8
$(if
$(CONFIG_GRUB_FLOWCONTROL
),r
,)
22 GRUB_SERIAL_CONFIG
:= serial
--unit
=0 --speed
=$(CONFIG_GRUB_BAUDRATE
) --word=8 --parity
=no
--stop
=1 --rtscts
=$(if
$(CONFIG_GRUB_FLOWCONTROL
),on
,off
)
23 GRUB_TERMINALS
+= serial
25 GRUB_TERMINAL_CONFIG
:= terminal_input
$(GRUB_TERMINALS
); terminal_output
$(GRUB_TERMINALS
)
27 ROOTPART
:=$(call qstrip
,$(CONFIG_TARGET_ROOTFS_PARTNAME
))
28 ROOTPART
:=$(if
$(ROOTPART
),$(ROOTPART
),PARTUUID
=$(IMG_PART_SIGNATURE
)-02)
29 GPT_ROOTPART
:=$(call qstrip
,$(CONFIG_TARGET_ROOTFS_PARTNAME
))
30 GPT_ROOTPART
:=$(if
$(GPT_ROOTPART
),$(GPT_ROOTPART
),PARTUUID
=$(shell echo
$(IMG_PART_DISKGUID
) | sed
's/00$$/02/'))
32 GRUB_TIMEOUT
:=$(call qstrip
,$(CONFIG_GRUB_TIMEOUT
))
33 GRUB_TITLE
:=$(call qstrip
,$(CONFIG_GRUB_TITLE
))
35 BOOTOPTS
:=$(call qstrip
,$(CONFIG_GRUB_BOOTOPTS
))
38 $(CP
) $(KDIR
)/$(KERNEL_NAME
) $@.boot
/boot
/vmlinuz
39 -$(CP
) $(STAGING_DIR_ROOT
)/boot
/.
$@.boot
/boot
/
40 $(CP
) $(STAGING_DIR_IMAGE
)/grub2
/boot.img
$@.boot
/boot
/grub
/
41 $(CP
) $(STAGING_DIR_IMAGE
)/grub2
/$(if
$(filter $(1),efi
),gpt
,$(GRUB2_VARIANT
))-core.img \
42 $@.boot
/boot
/grub
/core.img
43 $(if
$(filter $(1),efi
),
44 $(INSTALL_DIR
) $@.boot
/efi
/boot
45 $(CP
) $(STAGING_DIR_IMAGE
)/grub2
/boot
$(if
$(CONFIG_x86_64
),x64
,ia32
).efi
$@.boot
/efi
/boot
/
47 PADDING
="1" SIGNATURE
="$(IMG_PART_SIGNATURE)" \
48 $(if
$(filter $(1),efi
),GUID
="$(IMG_PART_DISKGUID)") $(SCRIPT_DIR
)/gen_image_generic.sh \
50 $(CONFIG_TARGET_KERNEL_PARTSIZE
) $@.boot \
51 $(CONFIG_TARGET_ROOTFS_PARTSIZE
) $(IMAGE_ROOTFS
) \
55 define Build
/grub-config
57 $(INSTALL_DIR
) $@.boot
/boot
/grub
59 -e
's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \
60 -e
's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \
61 -e
's#@ROOTPART@#root=$(ROOTPART) rootwait#g' \
62 -e
's#@GPT_ROOTPART@#root=$(GPT_ROOTPART) rootwait#g' \
63 -e
's#@CMDLINE@#$(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE)#g' \
64 -e
's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
65 -e
's#@TITLE@#$(GRUB_TITLE)#g' \
66 .
/grub-
$(1).cfg
> $@.boot
/boot
/grub
/grub.cfg
69 define Build
/grub-install
71 $(INSTALL_DIR
) $@.grub2
72 $(CP
) $(STAGING_DIR_IMAGE
)/grub2
/boot.img
$@.grub2
/
73 $(CP
) $(STAGING_DIR_IMAGE
)/grub2
/$(if
$(filter $(1),efi
),gpt
,$(GRUB2_VARIANT
))-core.img
$@.grub2
/core.img
74 echo
'(hd0) $@' > $@.grub2
/device.map
75 $(STAGING_DIR_HOST
)/bin
/grub-bios-setup \
76 -m
"$@.grub2/device.map" \
78 -r
"hd0,$(if $(filter $(1),efi),gpt1,msdos1)" \
83 $(CP
) $(KDIR
)/$(KERNEL_NAME
) $@.boot
/boot
/vmlinuz
85 $(STAGING_DIR_IMAGE
)/grub2
/cdboot.img \
86 $(STAGING_DIR_IMAGE
)/grub2
/eltorito.img \
87 > $@.boot
/boot
/grub
/eltorito.img
88 -$(CP
) $(STAGING_DIR_ROOT
)/boot
/.
$@.boot
/boot
/
89 $(if
$(filter $(1),efi
),
90 mkfs.fat
-C
$@.boot
/boot
/grub
/isoboot.img
-S
512 1440
91 mmd
-i
$@.boot
/boot
/grub
/isoboot.img
::/efi
::/efi
/boot
92 mcopy
-i
$@.boot
/boot
/grub
/isoboot.img \
93 $(STAGING_DIR_IMAGE
)/grub2
/iso-boot
$(if
$(CONFIG_x86_64
),x64
,ia32
).efi \
94 ::/efi
/boot
/boot
$(if
$(CONFIG_x86_64
),x64
,ia32
).efi
96 mkisofs
-R
-b boot
/grub
/eltorito.img
-no-emul-boot
-boot-info-table \
97 $(if
$(filter $(1),efi
),-boot-load-size
4 -c boot.cat
-eltorito-alt-boot
-b boot
/grub
/isoboot.img
-no-emul-boot
) \
98 -o
$@
$@.boot
$(TARGET_DIR
)
101 DEVICE_VARS
+= GRUB2_VARIANT
102 define Device
/Default
103 ARTIFACT
/image.iso
:= grub-config iso | iso
104 IMAGE
/combined.img
:= grub-config
pc | combined | grub-install | append-metadata
105 IMAGE
/combined.img.gz
:= grub-config
pc | combined | grub-install | gzip | append-metadata
106 IMAGE
/combined.vdi
:= grub-config
pc | combined | grub-install | qemu-image vdi
107 IMAGE
/combined.vmdk
:= grub-config
pc | combined | grub-install | qemu-image vmdk
108 IMAGE
/combined.vhdx
:= grub-config
pc | combined | grub-install | qemu-image vhdx
-o subformat
=dynamic
109 IMAGE
/rootfs.img
:= append-rootfs | pad-to
$(ROOTFS_PARTSIZE
)
110 IMAGE
/rootfs.img.gz
:= append-rootfs | pad-to
$(ROOTFS_PARTSIZE
) | gzip
111 ARTIFACT
/image-efi.iso
:= grub-config iso | iso efi
112 IMAGE
/combined-efi.img
:= grub-config efi | combined efi | grub-install efi | append-metadata
113 IMAGE
/combined-efi.img.gz
:= grub-config efi | combined efi | grub-install efi | gzip | append-metadata
114 IMAGE
/combined-efi.vdi
:= grub-config efi | combined efi | grub-install efi | qemu-image vdi
115 IMAGE
/combined-efi.vmdk
:= grub-config efi | combined efi | grub-install efi | qemu-image vmdk
116 IMAGE
/combined-efi.vhdx
:= grub-config efi | combined efi | grub-install efi | qemu-image vhdx
-o subformat
=dynamic
117 ifeq ($(CONFIG_TARGET_IMAGES_GZIP
),y
)
118 IMAGES-y
:= rootfs.img.gz
119 IMAGES-
$$(CONFIG_GRUB_IMAGES
) += combined.img.gz
120 IMAGES-
$$(CONFIG_GRUB_EFI_IMAGES
) += combined-efi.img.gz
122 IMAGES-y
:= rootfs.img
123 IMAGES-
$$(CONFIG_GRUB_IMAGES
) += combined.img
124 IMAGES-
$$(CONFIG_GRUB_EFI_IMAGES
) += combined-efi.img
128 KERNEL_NAME
:= bzImage
129 ifeq ($(CONFIG_ISO_IMAGES
),y
)
130 ARTIFACTS-
$$(CONFIG_GRUB_IMAGES
) += image.iso
131 ARTIFACTS-
$$(CONFIG_GRUB_EFI_IMAGES
) += image-efi.iso
133 ifeq ($(CONFIG_VDI_IMAGES
),y
)
134 IMAGES-
$$(CONFIG_GRUB_IMAGES
) += combined.vdi
135 IMAGES-
$$(CONFIG_GRUB_EFI_IMAGES
) += combined-efi.vdi
137 ifeq ($(CONFIG_VMDK_IMAGES
),y
)
138 IMAGES-
$$(CONFIG_GRUB_IMAGES
) += combined.vmdk
139 IMAGES-
$$(CONFIG_GRUB_EFI_IMAGES
) += combined-efi.vmdk
141 ifeq ($(CONFIG_VHDX_IMAGES
),y
)
142 IMAGES-
$$(CONFIG_GRUB_IMAGES
) += combined.vhdx
143 IMAGES-
$$(CONFIG_GRUB_EFI_IMAGES
) += combined-efi.vhdx
145 IMAGES
:= $$(IMAGES-y
)
146 ARTIFACTS
:= $$(ARTIFACTS-y
)
150 include $(SUBTARGET
).mk
152 $(eval
$(call BuildImage
))