hrev54358 adds 1 changeset to branch 'master'
old head: 90530755d22da22d491341805852fb5cdbe345c3
new head: 398b7899e8b510e7ebdc817f20bd366ebc288eb1
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=398b7899e8b5+%5E90530755d22d
----------------------------------------------------------------------------
398b7899e8b5: arm: Generate proper mmc image
* Stub out makebootable like on u-boot
* Place haiku_loader.efi at EFI/BOOT/BOOTXXX.EFI
* Generate boot.scr for u-boot + EFI
* haiku-mmc.image now attempts to auto-boot in qemu-system-arm
* Same code paths should roughly apply for arm64,riscv,etc
Change-Id: I563ebd77422d9e5dfcfeeedadcbc60471e8a57f4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2938
Reviewed-by: Alex von Gluck IV <kallisti5@xxxxxxxxxxx>
Reviewed-by: Adrien Destugues <pulkomandy@xxxxxxxxx>
[ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev54358
Commit: 398b7899e8b510e7ebdc817f20bd366ebc288eb1
URL: https://git.haiku-os.org/haiku/commit/?id=398b7899e8b5
Author: Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date: Sun Jun 21 02:15:00 2020 UTC
Committer: Alex von Gluck IV <kallisti5@xxxxxxxxxxx>
Commit-Date: Mon Jun 22 18:48:20 2020 UTC
----------------------------------------------------------------------------
5 files changed, 154 insertions(+), 50 deletions(-)
build/jam/images/MMCImage | 176 +++++++++++++------
src/bin/makebootable/platform/efi/Jamfile | 3 +
.../makebootable/platform/efi/makebootable.cpp | 6 +
src/system/boot/Jamfile | 6 +
src/tools/makebootable/platform/efi/Jamfile | 13 ++
----------------------------------------------------------------------------
diff --git a/build/jam/images/MMCImage b/build/jam/images/MMCImage
index df85b6c4e0..907e19f50a 100644
--- a/build/jam/images/MMCImage
+++ b/build/jam/images/MMCImage
@@ -7,65 +7,141 @@ HAIKU_MMC_LABEL ?= $(HAIKU_DEFAULT_MMC_LABEL) ;
# SD/mmc image rule
# requires mtools package on linux
# Files must be in this order: loader floppyboot everything_else
-rule BuildUBootSDImage image : files
+rule BuildSDImage image : files
{
- Depends $(image) : $(files) $(TARGET_DEVICE_TREES) ;
- SDIMAGE_BLOCK_SIZE on $(image) = 1048576 ; # 1MiB
- SDIMAGE_MTOOLS_H on $(image) = 255 ;
- SDIMAGE_MTOOLS_S on $(image) = 63 ;
- SDIMAGE_MTOOLS_C on $(image) = 8 ;
- SDIMAGE_SIZE on $(image) = $(HAIKU_BOOT_SDIMAGE_SIZE) ;
- SDIMAGE_BEGIN on $(image) = $(HAIKU_BOOT_SDIMAGE_BEGIN:E=63) ;
- BuildUBootSDImage1 $(image) : $(files) ;
+ Depends $(image) : $(files) $(TARGET_DEVICE_TREES) ;
+ SDIMAGE_BLOCK_SIZE on $(image) = 1048576 ; # 1MiB
+ SDIMAGE_MTOOLS_H on $(image) = 255 ;
+ SDIMAGE_MTOOLS_S on $(image) = 63 ;
+ SDIMAGE_MTOOLS_C on $(image) = 8 ;
+ SDIMAGE_SIZE on $(image) = $(HAIKU_BOOT_SDIMAGE_SIZE) ;
+ SDIMAGE_BEGIN on $(image) = $(HAIKU_BOOT_SDIMAGE_BEGIN:E=63) ;
+
+ if $(TARGET_BOOT_PLATFORM) = efi {
+ switch $(TARGET_ARCH) {
+ case x86_64 :
+ EFINAME on $(image) = "BOOTX64.EFI" ;
+ case arm :
+ EFINAME on $(image) = "BOOTARM.EFI" ;
+ case arm64 :
+ EFINAME on $(image) = "BOOTAA64.EFI" ;
+ case riscv32 :
+ EFINAME on $(image) = "BOOTRISCV32.EFI" ;
+ case riscv64 :
+ EFINAME on $(image) = "BOOTRISCV64.EFI" ;
+ case * :
+ Exit "Error: Unknown EFI architecture!" ;
+ }
+ BuildEfiSDImage1 $(image) : $(files) ;
+ } else {
+ BuildUBootSDImage1 $(image) : $(files) ;
+ }
}
actions BuildUBootSDImage1
{
- $(RM) $(1)
- $(RM) $(1).mtools
+ $(RM) $(1)
+ $(RM) $(1).mtools
+
+ # make an empty image
+ dd of=$(1) \
+ if=/dev/zero \
+ bs=$(SDIMAGE_BLOCK_SIZE) \
+ count=$(SDIMAGE_SIZE)
+ # generate mtools config
+ echo 'drive i: file="$(1)" partition=1 cylinders=$(SDIMAGE_MTOOLS_C)
+ heads=$(SDIMAGE_MTOOLS_H) sectors=$(SDIMAGE_MTOOLS_S)
+ mformat_only' > $(1).mtools
+ # partition it
+ MTOOLSRC=$(1).mtools mpartition -b$(SDIMAGE_BEGIN) -cI -T 0xc i:
+ # format the image
+ MTOOLSRC=$(1).mtools mformat -L 32 -v "HAIKU" i:
+
+ # generate u-boot environment variables
+ echo 'os=haiku' > uEnv.txt
+ echo 'platform=u-boot' >> uEnv.txt
+ echo 'loader=haiku_loader.ub' >> uEnv.txt
+
+ # populate
+ MTOOLSRC=$(1).mtools mcopy $(2[2-2]) i:/haiku_loader.ub
+ MTOOLSRC=$(1).mtools mcopy $(2[3-3]) i:/haiku_floppyboot.ub
+ MTOOLSRC=$(1).mtools mcopy $(2[4-]) i:
+ MTOOLSRC=$(1).mtools mcopy uEnv.txt i:
+ # populate fdts
+ MTOOLSRC=$(1).mtools mmd i:/fdt
+ MTOOLSRC=$(1).mtools mcopy $(TARGET_DEVICE_TREES[1-]) i:/fdt/
+ # list content
+ MTOOLSRC=$(1).mtools mdir i:
+ MTOOLSRC=$(1).mtools mdir i:/fdt
+ # cleanup
+ $(RM) $(1).mtools
+ $(RM) uEnv.txt
+ $(RM) boot.scr
+ # Add haiku bootstrap partition to MMC image
+ cat $(2[0]) >> $(1)
+}
+
- # make an empty image
- dd of=$(1) \
- if=/dev/zero \
- bs=$(SDIMAGE_BLOCK_SIZE) \
- count=$(SDIMAGE_SIZE)
- # generate mtools config
- echo 'drive i: file="$(1)" partition=1 cylinders=$(SDIMAGE_MTOOLS_C)
- heads=$(SDIMAGE_MTOOLS_H) sectors=$(SDIMAGE_MTOOLS_S)
- mformat_only' > $(1).mtools
- # partition it
- MTOOLSRC=$(1).mtools mpartition -b$(SDIMAGE_BEGIN) -cI -T 0xc i:
- # format the image
- MTOOLSRC=$(1).mtools mformat -L 32 -v "HAIKU" i:
+actions BuildEfiSDImage1
+{
+ $(RM) $(1)
+ $(RM) $(1).mtools
+
+ # make an empty image
+ dd of=$(1) \
+ if=/dev/zero \
+ bs=$(SDIMAGE_BLOCK_SIZE) \
+ count=$(SDIMAGE_SIZE)
+ # generate mtools config
+ echo 'drive i: file="$(1)" partition=1 cylinders=$(SDIMAGE_MTOOLS_C)
+ heads=$(SDIMAGE_MTOOLS_H) sectors=$(SDIMAGE_MTOOLS_S)
+ mformat_only' > $(1).mtools
+ # partition it
+ MTOOLSRC=$(1).mtools mpartition -b$(SDIMAGE_BEGIN) -cI -T 0xc i:
+ # format the image
+ MTOOLSRC=$(1).mtools mformat -L 32 -v "HAIKU" i:
+
+ # generate u-boot environment variables
+ echo 'os=haiku' > uEnv.txt
+ echo 'platform=efi' >> uEnv.txt
+ echo "loader=EFI/BOOT/$(EFINAME)" >> uEnv.txt
+
+ # populate
+ MTOOLSRC=$(1).mtools mmd i:/EFI
+ MTOOLSRC=$(1).mtools mmd i:/EFI/BOOT
+ MTOOLSRC=$(1).mtools mcopy $(2[2-2]) i:/EFI/BOOT/$(EFINAME)
+ # Not really needed on EFI since we use EFI runtime services.
+ #MTOOLSRC=$(1).mtools mcopy $(2[3-3]) i:/haiku_floppyboot.ub
+ MTOOLSRC=$(1).mtools mcopy $(2[4-]) i:
+ MTOOLSRC=$(1).mtools mcopy uEnv.txt i:
+ # populate fdts
+ MTOOLSRC=$(1).mtools mmd i:/fdt
+ MTOOLSRC=$(1).mtools mcopy $(TARGET_DEVICE_TREES[1-]) i:/fdt/
+ # list content
+ MTOOLSRC=$(1).mtools mdir i:
+ MTOOLSRC=$(1).mtools mdir i:/fdt
+ MTOOLSRC=$(1).mtools mdir i:/EFI/BOOT
+ # cleanup
+ $(RM) $(1).mtools
+ $(RM) uEnv.txt
+ $(RM) boot.scr
+ # Add haiku bootstrap partition to MMC image
+ cat $(2[0]) >> $(1)
+}
- # generate u-boot environment variables
- echo 'os=haiku' > uEnv.txt
- # populate
- $(CP) $(2[2-2]) haiku_loader.ub
- MTOOLSRC=$(1).mtools mcopy haiku_loader.ub i:
- $(RM) haiku_loader.ub
- $(CP) $(2[3-3]) haiku_floppyboot.ub
- MTOOLSRC=$(1).mtools mcopy haiku_floppyboot.ub i:
- $(RM) haiku_floppyboot.ub
- MTOOLSRC=$(1).mtools mcopy $(2[4-]) i:
- MTOOLSRC=$(1).mtools mcopy uEnv.txt i:
- # populate fdts
- MTOOLSRC=$(1).mtools mmd i:\fdt
- MTOOLSRC=$(1).mtools mcopy $(TARGET_DEVICE_TREES[1-]) i:\fdt\
- # list content
- MTOOLSRC=$(1).mtools mdir i:
- MTOOLSRC=$(1).mtools mdir i:\fdt
- # cleanup
- $(RM) $(1).mtools
- $(RM) uEnv.txt
- $(RM) boot.scr
- # Add haiku bootstrap partition to MMC image
- cat $(2[0]) >> $(1)
+for platform in [ MultiBootSubDirSetup ] {
+ on $(platform) {
+ # SD/mmc image targets
+ if $(TARGET_BOOT_PLATFORM) = efi {
+ BuildSDImage $(HAIKU_MMC_NAME) :
+ $(HAIKU_IMAGE)
haiku_loader.$(TARGET_BOOT_PLATFORM)
haiku-floppyboot.tgz.$(TARGET_BOOT_PLATFORM) boot.scr ;
+ } else {
+ BuildSDImage $(HAIKU_MMC_NAME) :
+ $(HAIKU_IMAGE)
haiku_loader.$(TARGET_BOOT_PLATFORM)
haiku-floppyboot.tgz.$(TARGET_BOOT_PLATFORM) boot.scr ;
+ }
+ }
}
-# SD/mmc image targets
-BuildUBootSDImage $(HAIKU_MMC_NAME) :
- $(HAIKU_IMAGE) haiku_loader.u-boot haiku-floppyboot.tgz.u-boot boot.scr ;
#BlessSDImage haiku-$(TARGET_KERNEL_ARCH).mmc ;
NotFile haiku-mmc-image ;
Depends haiku-mmc-image : $(HAIKU_MMC_NAME) ;
diff --git a/src/bin/makebootable/platform/efi/Jamfile
b/src/bin/makebootable/platform/efi/Jamfile
new file mode 100644
index 0000000000..d5d62e6ed4
--- /dev/null
+++ b/src/bin/makebootable/platform/efi/Jamfile
@@ -0,0 +1,3 @@
+SubDir HAIKU_TOP src bin makebootable platform efi ;
+
+BinCommand makebootable : makebootable.cpp ;
diff --git a/src/bin/makebootable/platform/efi/makebootable.cpp
b/src/bin/makebootable/platform/efi/makebootable.cpp
new file mode 100644
index 0000000000..8d3ab2762f
--- /dev/null
+++ b/src/bin/makebootable/platform/efi/makebootable.cpp
@@ -0,0 +1,6 @@
+int
+main()
+{
+ return 0;
+}
+
diff --git a/src/system/boot/Jamfile b/src/system/boot/Jamfile
index e23eac3572..e26fb3fd39 100644
--- a/src/system/boot/Jamfile
+++ b/src/system/boot/Jamfile
@@ -317,6 +317,12 @@ for platform in [ MultiBootSubDirSetup ] {
switch $(TARGET_BOOT_PLATFORM) {
case efi :
BuildEFILoader
haiku_loader.$(TARGET_BOOT_PLATFORM) : boot_loader_$(TARGET_BOOT_PLATFORM) ;
+ if $(TARGET_ARCH) = arm || $(TARGET_ARCH) =
arm64 {
+ BuildUImage
haiku-floppyboot.tgz.$(TARGET_BOOT_PLATFORM) : haiku-floppyboot.tgz :
+ -A $(TARGET_ARCH) -O linux -T
ramdisk -C none
+ -n 'Haiku $(TARGET_KERNEL_ARCH)
floppyboot' ;
+ BuildUImageScript boot.scr :
$(HAIKU_MMC_UBOOT_SCRIPT) ;
+ }
case bios_ia32 :
BuildBiosLoader
haiku_loader.$(TARGET_BOOT_PLATFORM) : boot_loader_$(TARGET_BOOT_PLATFORM) ;
diff --git a/src/tools/makebootable/platform/efi/Jamfile
b/src/tools/makebootable/platform/efi/Jamfile
new file mode 100644
index 0000000000..1aa97cc9db
--- /dev/null
+++ b/src/tools/makebootable/platform/efi/Jamfile
@@ -0,0 +1,13 @@
+SubDir HAIKU_TOP src tools makebootable platform efi ;
+
+SEARCH_SOURCE
+ += [ FDirName $(HAIKU_TOP) src bin makebootable platform efi ] ;
+
+BuildPlatformMain <build>makebootable :
+ makebootable.cpp
+ $(hostPlatformSources)
+ :
+ # $(HOST_LIBBE)
+ $(HOST_LIBSTDC++) $(HOST_LIBSUPC++)
+;
+