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@unixzen.com> Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
This commit is contained in:
parent
90530755d2
commit
398b7899e8
@ -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:
|
||||
# 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
|
||||
# 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)
|
||||
# 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)
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
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) ;
|
||||
|
3
src/bin/makebootable/platform/efi/Jamfile
Normal file
3
src/bin/makebootable/platform/efi/Jamfile
Normal file
@ -0,0 +1,3 @@
|
||||
SubDir HAIKU_TOP src bin makebootable platform efi ;
|
||||
|
||||
BinCommand makebootable : makebootable.cpp ;
|
6
src/bin/makebootable/platform/efi/makebootable.cpp
Normal file
6
src/bin/makebootable/platform/efi/makebootable.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
int
|
||||
main()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -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) ;
|
||||
|
13
src/tools/makebootable/platform/efi/Jamfile
Normal file
13
src/tools/makebootable/platform/efi/Jamfile
Normal file
@ -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++)
|
||||
;
|
||||
|
Loading…
Reference in New Issue
Block a user