From 6910857376a31f806509f68da8232f9919f0da44 Mon Sep 17 00:00:00 2001 From: guts <3254579927@qq.com> Date: Fri, 3 Jul 2026 20:41:28 +0800 Subject: [PATCH 1/4] feat: add initramfs loading support for all architectures Add initramfs_filepath and initramfs_load_paddr JSON fields to zone_start_from_json. When both fields are present, the initramfs image is loaded to the specified physical address using the existing HVISOR_LOAD_IMAGE ioctl, similar to how kernel and dtb are loaded. This is architecture-independent and does not require changes to zone_config_t or CONFIG_MAGIC_VERSION. --- tools/hvisor.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tools/hvisor.c b/tools/hvisor.c index 101717c0..5e79cf9f 100644 --- a/tools/hvisor.c +++ b/tools/hvisor.c @@ -857,6 +857,29 @@ static int zone_start_from_json(const char *json_config_path, #ifndef X86_64 config->dtb_size = load_image_to_memory(dtb_filepath_json->valuestring, config->dtb_load_paddr); + + // Load initramfs if configured (architecture-independent) + { + const cJSON *const initramfs_filepath_json = + SAFE_CJSON_GET_OBJECT_ITEM(root, "initramfs_filepath"); + const cJSON *const initramfs_load_paddr_json = + SAFE_CJSON_GET_OBJECT_ITEM(root, "initramfs_load_paddr"); + if (initramfs_filepath_json != NULL && + initramfs_load_paddr_json != NULL) { + uintptr_t initramfs_load_paddr; + if (parse_json_address(initramfs_load_paddr_json, + &initramfs_load_paddr) != 0) { + log_error("Failed to parse initramfs_load_paddr"); + goto err_out; + } + __u64 initramfs_size = load_image_to_memory( + initramfs_filepath_json->valuestring, initramfs_load_paddr); + log_info("Loaded initramfs (%s) to 0x%" PRIxPTR + ", size: %llu bytes", + initramfs_filepath_json->valuestring, + initramfs_load_paddr, initramfs_size); + } + } #endif log_info("Kernel size: %llu, DTB size: %llu", config->kernel_size, From fb09db623ca99710026ef0ea03a5af09a814ed1e Mon Sep 17 00:00:00 2001 From: guts <3254579927@qq.com> Date: Fri, 3 Jul 2026 20:47:20 +0800 Subject: [PATCH 2/4] fix: clang-format style for initramfs loading code Remove anonymous block, fix line breaking and indentation to match the project's LLVM-based clang-format style (4-space indent). --- tools/hvisor.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/tools/hvisor.c b/tools/hvisor.c index 5e79cf9f..dffc801f 100644 --- a/tools/hvisor.c +++ b/tools/hvisor.c @@ -859,26 +859,23 @@ static int zone_start_from_json(const char *json_config_path, config->dtb_load_paddr); // Load initramfs if configured (architecture-independent) - { - const cJSON *const initramfs_filepath_json = - SAFE_CJSON_GET_OBJECT_ITEM(root, "initramfs_filepath"); - const cJSON *const initramfs_load_paddr_json = - SAFE_CJSON_GET_OBJECT_ITEM(root, "initramfs_load_paddr"); - if (initramfs_filepath_json != NULL && - initramfs_load_paddr_json != NULL) { - uintptr_t initramfs_load_paddr; - if (parse_json_address(initramfs_load_paddr_json, - &initramfs_load_paddr) != 0) { - log_error("Failed to parse initramfs_load_paddr"); - goto err_out; - } - __u64 initramfs_size = load_image_to_memory( - initramfs_filepath_json->valuestring, initramfs_load_paddr); - log_info("Loaded initramfs (%s) to 0x%" PRIxPTR - ", size: %llu bytes", - initramfs_filepath_json->valuestring, - initramfs_load_paddr, initramfs_size); + const cJSON *const initramfs_filepath_json = + SAFE_CJSON_GET_OBJECT_ITEM(root, "initramfs_filepath"); + const cJSON *const initramfs_load_paddr_json = + SAFE_CJSON_GET_OBJECT_ITEM(root, "initramfs_load_paddr"); + if (initramfs_filepath_json != NULL && + initramfs_load_paddr_json != NULL) { + uintptr_t initramfs_load_paddr; + if (parse_json_address(initramfs_load_paddr_json, + &initramfs_load_paddr) != 0) { + log_error("Failed to parse initramfs_load_paddr"); + goto err_out; } + __u64 initramfs_size = load_image_to_memory( + initramfs_filepath_json->valuestring, initramfs_load_paddr); + log_info("Loaded initramfs (%s) to 0x%" PRIxPTR ", size: %llu bytes", + initramfs_filepath_json->valuestring, initramfs_load_paddr, + initramfs_size); } #endif From 6770b73779cdb69449d510d29fcd09f909a10866 Mon Sep 17 00:00:00 2001 From: guts <3254579927@qq.com> Date: Fri, 3 Jul 2026 21:00:49 +0800 Subject: [PATCH 3/4] fix: apply clang-format to initramfs loading code From 87214525e7d740fec356400fe476df0b286a9d5f Mon Sep 17 00:00:00 2001 From: guts <3254579927@qq.com> Date: Fri, 3 Jul 2026 21:04:34 +0800 Subject: [PATCH 4/4] fix: join if-condition to one line for clang-format-14 --- tools/hvisor.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/hvisor.c b/tools/hvisor.c index dffc801f..7a035f37 100644 --- a/tools/hvisor.c +++ b/tools/hvisor.c @@ -863,8 +863,7 @@ static int zone_start_from_json(const char *json_config_path, SAFE_CJSON_GET_OBJECT_ITEM(root, "initramfs_filepath"); const cJSON *const initramfs_load_paddr_json = SAFE_CJSON_GET_OBJECT_ITEM(root, "initramfs_load_paddr"); - if (initramfs_filepath_json != NULL && - initramfs_load_paddr_json != NULL) { + if (initramfs_filepath_json != NULL && initramfs_load_paddr_json != NULL) { uintptr_t initramfs_load_paddr; if (parse_json_address(initramfs_load_paddr_json, &initramfs_load_paddr) != 0) {