From b4f96bf19dd34f6cee9e63761782e0978e9dca75 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 25 Aug 2025 14:49:19 +0200 Subject: feat! fixed the boot flow and validation in AArch64. note: - Was already patched in STB. Signed-off-by: Amlal El Mahrouss --- src/arm64/makefile | 2 +- src/neboot-start.c | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/arm64/makefile b/src/arm64/makefile index a85553b..c4e7083 100644 --- a/src/arm64/makefile +++ b/src/arm64/makefile @@ -28,7 +28,7 @@ FLAGS_LD= --script=script.lds -o core-boot.elf -nostdlib OBJCOPY=aarch64-elf-objcopy EMU=qemu-system-aarch64 -EMU_FLAGS=-M virt -cpu cortex-a57 -bios $(FIRMWARE) -m 256M -d int -smp 2 +EMU_FLAGS=-M virt -cpu cortex-a57 -bios $(FIRMWARE) -device loader,file=$(STAGE2),addr=0x60000000 -m 4G -d int -d guest_errors WAIT=sleep 1 diff --git a/src/neboot-start.c b/src/neboot-start.c index 8384791..b72793e 100644 --- a/src/neboot-start.c +++ b/src/neboot-start.c @@ -113,7 +113,7 @@ void cb_start_exec(void) { } else { cb_put_string("CB> Trying EPM partition...\r\n"); - part_block_t* blk = cb_parse_partition_block_at((voidptr_t) NB_BOOT_ADDR, EPM_PART_BLK_SZ, 0); + part_block_t* blk = cb_parse_partition_block_at((voidptr_t) NB_FLASH_BASE_ADDR, EPM_PART_BLK_SZ, 0); if (blk) { cb_pci_append_tree("@stage2-epm", (cb_pci_num_t) blk, sizeof(part_block_t) * blk->num_blocks); @@ -144,12 +144,10 @@ void cb_start_exec(void) { } /// end of TODO - - if (hart > 1) { - while (yes) { - if (__cb_hart_counter == 0) { - cb_restart_machine(); - } + + while (yes) { + if (__cb_hart_counter == 0) { + cb_restart_machine(); } } } -- cgit v1.2.3 From 93baf62a3d02ad107a92c429fc528c26a9f7b664 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 27 Aug 2025 22:48:37 +0200 Subject: feat: netboot: Fix BootNet header structure layout Signed-off-by: Amlal El Mahrouss --- lib/bootnet.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/bootnet.h b/lib/bootnet.h index 8363c39..b0c3fd9 100644 --- a/lib/bootnet.h +++ b/lib/bootnet.h @@ -13,11 +13,13 @@ #define BOOTNET_NAME_LEN (256) +struct _bootnet_inet_header; + /// @brief Netboot Internet Header /// Consists of 4 magic characters, and a set of fields describing the current patch that's being /// sent (if m_preflight = 0) /// @note Can be used to patch ROMs too (if m_implies_rom = 1) -typedef struct bootnet_inet_header { +typedef struct _bootnet_inet_header { ascii_char_t m_nb1; /// magic char 1 'N' ascii_char_t m_nb2; /// magic char 2 'E' ascii_char_t m_nb3; /// magic char 3 'T' @@ -29,4 +31,7 @@ typedef struct bootnet_inet_header { uint8_t m_implies_rom; /// does it imply reprogramming? uint8_t m_preflight; /// Do we just check if this endpoint exists/is valid? uint8_t m_blob[]; -} bootnet_inet_header; +} __attribute__((packed)) bootnet_inet_header_t; + +/// @brief Alias for the BootNet pointer. +typedef bootnet_inet_header_t* bootnet_inet_header_ptr_t; -- cgit v1.2.3