[haiku-commits] haiku: hrev54358 - build/jam/images src/system/boot src/tools/makebootable/platform/efi

  • From: Alex von Gluck IV <kallisti5@xxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 22 Jun 2020 14:48:23 -0400 (EDT)

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++)
+;
+


Other related posts:

  • » [haiku-commits] haiku: hrev54358 - build/jam/images src/system/boot src/tools/makebootable/platform/efi - Alex von Gluck IV