diff --git a/build/jam/BuildSetup b/build/jam/BuildSetup index fe2189418e..6cef465e1c 100644 --- a/build/jam/BuildSetup +++ b/build/jam/BuildSetup @@ -84,6 +84,11 @@ HAIKU_DEFAULT_ANYBOOT_NAME = haiku-anyboot.image ; HAIKU_DEFAULT_ANYBOOT_DIR = $(HAIKU_OUTPUT_DIR) ; HAIKU_DEFAULT_ANYBOOT_LABEL ?= Haiku ; +# Haiku MMC defaults +HAIKU_DEFAULT_MMC_IMAGE_NAME = haiku-mmc.image ; +HAIKU_DEFAULT_MMC_DIR = $(HAIKU_OUTPUT_DIR) ; +HAIKU_DEFAULT_MMC_LABEL ?= Haiku ; + # analyze and optionally replace jam's target parameters ProcessCommandLineArguments ; diff --git a/build/jam/DefaultBuildProfiles b/build/jam/DefaultBuildProfiles index 13525bfbea..1640d1b8a1 100644 --- a/build/jam/DefaultBuildProfiles +++ b/build/jam/DefaultBuildProfiles @@ -45,6 +45,7 @@ rule DefineDefaultBuildProfiles # bootstrap profiles DefineBuildProfile bootstrap-raw : image : "haiku-bootstrap.image" ; + DefineBuildProfile bootstrap-mmc : haiku-mmc-image : "haiku-mmc.image" ; DefineBuildProfile bootstrap-vmware : vmware-image : "haiku-bootstrap.vmdk" ; diff --git a/build/jam/MiscRules b/build/jam/MiscRules index 15e93648ff..bf97fbb91e 100644 --- a/build/jam/MiscRules +++ b/build/jam/MiscRules @@ -369,6 +369,14 @@ rule DefineBuildProfile name : type : path { buildTarget = haiku-image ; } + case "haiku-mmc-image" : { + targetName ?= $(HAIKU_MMC_IMAGE_NAME) ; + targetName ?= $(HAIKU_DEFAULT_MMC_IMAGE_NAME) ; + HAIKU_IMAGE_DIR = $(targetDir) ; + HAIKU_IMAGE_NAME = $(targetName) ; + buildTarget = haiku-mmc-image ; + } + case "vmware-image" : { targetName ?= $(HAIKU_VMWARE_IMAGE_NAME) ; targetName ?= $(HAIKU_DEFAULT_VMWARE_IMAGE_NAME) ; diff --git a/build/jam/board/beagle/BoardSetup b/build/jam/board/beagle/BoardSetup index 6bc8bb0ae2..0c54643aad 100644 --- a/build/jam/board/beagle/BoardSetup +++ b/build/jam/board/beagle/BoardSetup @@ -29,13 +29,13 @@ HAIKU_BOARD_LOADER_STACK_BASE = 0x84000000 ; # OMAP x-loader image, must be first file on FAT partition HAIKU_BOARD_MLO_IMAGE ?= MLO ; HAIKU_BOARD_MLO_IMAGE_URL = - http://www.angstrom-distribution.org/demo/beagleboard/MLO ; + http://downloads.angstrom-distribution.org/demo/beagleboard/MLO ; # u-boot binary image filename, to build the flash image # XXX: Locate it somehow (for now just put it in generated/) -HAIKU_BOARD_UBOOT_IMAGE ?= u-boot.bin ; +HAIKU_BOARD_UBOOT_IMAGE ?= u-boot.img ; HAIKU_BOARD_UBOOT_IMAGE_URL = - http://www.angstrom-distribution.org/demo/beagleboard/u-boot.bin ; + http://downloads.angstrom-distribution.org/demo/beagleboard/u-boot.img ; # # mmc/SD image @@ -47,13 +47,15 @@ HAIKU_BOARD_SDIMAGE_SIZE = 64 ; # in MB HAIKU_BOARD_SDIMAGE_FAT_SIZE = 32 ; -# offset in blocks XXX: FIXME -# (autodetect from sfdisk or use cylinder count for fat size) -HAIKU_BOARD_SDIMAGE_BFS_OFFSET = ; +mloFile = [ DownloadFile $(HAIKU_BOARD_MLO_IMAGE) + : $(HAIKU_BOARD_MLO_IMAGE_URL) ] ; + +ubootFile = [ DownloadFile $(HAIKU_BOARD_UBOOT_IMAGE) + : $(HAIKU_BOARD_UBOOT_IMAGE_URL) ] ; HAIKU_BOARD_SDIMAGE_FILES = - $(HAIKU_BOARD_MLO_IMAGE) - $(HAIKU_BOARD_UBOOT_IMAGE) + $(mloFile) + $(ubootFile) haiku_loader_nbsd.ub ; diff --git a/src/system/boot/platform/u-boot/Jamfile b/src/system/boot/platform/u-boot/Jamfile index 9143546e95..8eb7611623 100644 --- a/src/system/boot/platform/u-boot/Jamfile +++ b/src/system/boot/platform/u-boot/Jamfile @@ -155,13 +155,9 @@ rule BuildUBootSDImage image : files Depends $(image) : $(files) ; SDIMAGE_BLOCK_SIZE on $(image) = 1048576 ; # 1M SDIMAGE_SIZE on $(image) = $(HAIKU_BOARD_SDIMAGE_SIZE) ; - SDIMAGE_FDISK on $(image) = $(HOST_SFDISK) ; - SDIMAGE_FDISK_SCRIPT on $(image) = - "0,$(HAIKU_BOARD_SDIMAGE_FAT_SIZE),0c,-\\\n,,eb\\\n\\\n" ; - SDIMAGE_FDISK_H on $(image) = 255 ; - SDIMAGE_FDISK_S on $(image) = 63 ; - SDIMAGE_FDISK_C on $(image) = ; - SDIMAGE_FDISK_UNIT on $(image) = M ; + SDIMAGE_MTOOLS_H on $(image) = 255 ; + SDIMAGE_MTOOLS_S on $(image) = 63 ; + SDIMAGE_MTOOLS_C on $(image) = 8 ; BuildUBootSDImage1 $(image) : $(files) ; } @@ -175,21 +171,29 @@ actions BuildUBootSDImage1 if=/dev/zero \ bs=$(SDIMAGE_BLOCK_SIZE) \ count=$(SDIMAGE_SIZE) - # partition it - printf '$(SDIMAGE_FDISK_SCRIPT)' | $(SDIMAGE_FDISK) -f -D \ - -H $(SDIMAGE_FDISK_H) -S $(SDIMAGE_FDISK_S) \ - -u$(SDIMAGE_FDISK_UNIT) $(<) - #-H $(SDIMAGE_FDISK_H) -S $(SDIMAGE_FDISK_S) -C \\\$(( $(SDIMAGE_SIZE) * 1024 * 1024 / $(SDIMAGE_FDISK_H) / $(SDIMAGE_FDISK_S))) \ # generate mtools config - echo 'drive i: file="$(<)" partition=1' > $(<).mtools + echo 'drive i: file="$(<)" partition=1 cylinders=$(SDIMAGE_MTOOLS_C) + heads=$(SDIMAGE_MTOOLS_H) sectors=$(SDIMAGE_MTOOLS_S) + mformat_only' > $(<).mtools + # partition it + MTOOLSRC=$(<).mtools mpartition -cI -T 0xc i: # format the image - MTOOLSRC=$(<).mtools mformat -v "Haiku" i: + MTOOLSRC=$(<).mtools mformat -L 32 -v "Haiku" i: + # generate u-boot environment variables + echo 'uenvcmd=run loadImage; run mmcboot; + loadImage=fatload mmc0 0 0x80008000 haiku_loader_nbsd.ub + mmcboot=bootm 0x80008000' > uEnv.txt # populate MTOOLSRC=$(<).mtools mcopy $(>) i: + MTOOLSRC=$(<).mtools mcopy uEnv.txt i: # list content - #MTOOLSRC=$(<).mtools mdir i: + MTOOLSRC=$(<).mtools mdir i: # cleanup $(RM) $(<).mtools + $(RM) uEnv.txt + # Add haiku bootstrap partition to MMC image + dd if=$(HAIKU_IMAGE_NAME) of=$(<) conv=notrunc oflag=append bs=1M \ + count=`du -sm $(HAIKU_IMAGE_NAME) | cut -f 1` } # uimage targets @@ -215,16 +219,6 @@ if $(HAIKU_BOARD_SDIMAGE_UBOOT_SCRIPT_NAME) { $(HAIKU_BOARD_SDIMAGE_UBOOT_SCRIPT) ; } -if $(HAIKU_BOARD_MLO_IMAGE) && $(HAIKU_BOARD_MLO_IMAGE_URL) { - DownloadFile $(HAIKU_BOARD_MLO_IMAGE) $(HAIKU_BOARD_MLO_IMAGE_URL) ; -} - -if $(HAIKU_BOARD_UBOOT_IMAGE) && $(HAIKU_BOARD_UBOOT_IMAGE_URL) { - # Download the u-boot binary file. - ubootFile = [ DownloadFile $(HAIKU_BOARD_UBOOT_IMAGE) - : $(HAIKU_BOARD_UBOOT_IMAGE_URL) ] ; -} - # flash image targets BuildUBootFlashImage haiku-$(HAIKU_BOOT_BOARD)_flash_image_raw.img : haiku_loader : $(ubootFile) ; @@ -245,6 +239,7 @@ Depends haiku-flash-uimage : haiku-$(HAIKU_BOOT_BOARD)_flash_image_uimage.img ; BuildUBootSDImage haiku-$(HAIKU_BOOT_BOARD).mmc : $(HAIKU_BOARD_SDIMAGE_FILES) ; NotFile haiku-mmc-image ; Depends haiku-mmc-image : haiku-$(HAIKU_BOOT_BOARD).mmc ; +Depends haiku-$(HAIKU_BOOT_BOARD).mmc : $(HAIKU_IMAGE_NAME) ; SEARCH on [ FGristFiles $(genericPlatformSources) ] = [ FDirName $(HAIKU_TOP) src system boot platform generic ] ;