Skip to content

Commit 63820f0

Browse files
committed
Ocre containers: Adding support for NRF5340-DK board
WIP: Using nordic NRF5340DK board for testing and leveraging Ocre containers. Currently adding minimal support to make it compile and run on the actual hardware. Will continue adding configs across with the functionalities Signed-off-by: Federico Roux <rouxfederico@gmail.com>
1 parent 6c98588 commit 63820f0

File tree

10 files changed

+161
-13
lines changed

10 files changed

+161
-13
lines changed

CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ endif()
88
if(TARGET_PLATFORM_NAME STREQUAL "Linux")
99
project(ocre LANGUAGES C ASM)
1010
elseif(TARGET_PLATFORM_NAME STREQUAL "Zephyr")
11-
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
11+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
1212
project(ocre VERSION ${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}.${APP_PATCHLEVEL}.${APP_VERSION_TWEAK} LANGUAGES C ASM)
1313
else()
1414
message(FATAL_ERROR "Unsupported TARGET_PLATFORM_NAME: ${TARGET_PLATFORM_NAME}")
@@ -57,15 +57,15 @@ add_custom_target(generate_messages DEPENDS ${MSG_GENERATED_FILE})
5757

5858
if(NOT "${OCRE_INPUT_FILE}" STREQUAL "")
5959
message("Using input file: ${OCRE_INPUT_FILE}")
60-
60+
6161
# Extract filename without extension for use in software
6262
get_filename_component(OCRE_INPUT_FILE_NAME ${OCRE_INPUT_FILE} NAME_WE)
6363
message("Input file name (without extension): ${OCRE_INPUT_FILE_NAME}")
6464
add_definitions(-DOCRE_INPUT_FILE_NAME="${OCRE_INPUT_FILE_NAME}")
65-
65+
6666
add_custom_command(
6767
OUTPUT ${CMAKE_CURRENT_LIST_DIR}/src/ocre/ocre_input_file.g
68-
COMMAND xxd -n wasm_binary -i ${OCRE_INPUT_FILE} | sed 's/^unsigned/static const unsigned/' > ${OCRE_ROOT_DIR}/src/ocre/ocre_input_file.g
68+
COMMAND xxd -i ${OCRE_INPUT_FILE} | sed 's/unsigned char .*\\[/static unsigned char wasm_binary[/' | sed 's/unsigned int .*_len/static unsigned int wasm_binary_len/' > ${CMAKE_CURRENT_LIST_DIR}/src/ocre/ocre_input_file.g
6969
DEPENDS ${OCRE_INPUT_FILE}
7070
COMMENT "Generating C header from ${OCRE_INPUT_FILE}"
7171
)
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
CONFIG_ARM_MPU=y
2+
CONFIG_MAIN_STACK_SIZE=4096
3+
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
4+
CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=-1
5+
CONFIG_HEAP_MEM_POOL_SIZE=32768
6+
7+
# Container defaults - Reduced for nRF5340's limited RAM
8+
CONFIG_MAX_CONTAINERS=2
9+
CONFIG_OCRE_WAMR_HEAP_BUFFER_SIZE=180000
10+
CONFIG_OCRE_CONTAINER_DEFAULT_HEAP_SIZE=4096
11+
CONFIG_OCRE_CONTAINER_DEFAULT_STACK_SIZE=4096
12+
13+
# DISABLE OCRE SHELL (this is what's causing the shell_fprintf errors!)
14+
CONFIG_OCRE_SHELL=n
15+
16+
# Disable the main Zephyr shell AND all shell subsystems
17+
CONFIG_NET_SHELL=n
18+
CONFIG_FILE_SYSTEM_SHELL=n
19+
CONFIG_SENSOR_SHELL=n
20+
21+
# Override shell-related configs from prj.conf since shell is disabled
22+
23+
# Random number generator (REQUIRED by networking and RNG sensor)
24+
CONFIG_ENTROPY_GENERATOR=y
25+
CONFIG_TEST_RANDOM_GENERATOR=y
26+
27+
# Reduce networking stack sizes to save RAM
28+
CONFIG_NET_TX_STACK_SIZE=1024
29+
CONFIG_NET_RX_STACK_SIZE=2048
30+
CONFIG_NET_BUF_TX_COUNT=8
31+
CONFIG_NET_BUF_RX_COUNT=16
32+
CONFIG_NET_MGMT_EVENT_STACK_SIZE=1024
33+
CONFIG_NET_PKT_RX_COUNT=8
34+
CONFIG_NET_PKT_TX_COUNT=8
35+
CONFIG_NET_BUF_DATA_SIZE=128
36+
37+
# Bus interfaces
38+
CONFIG_GPIO=y
39+
40+
# Ocre Sensors support
41+
CONFIG_SENSOR=y
42+
CONFIG_OCRE_SENSORS=y
43+
CONFIG_RNG_SENSOR=y
44+
45+
# Ocre GPIO Support (minimal)
46+
CONFIG_OCRE_GPIO=y
47+
CONFIG_OCRE_GPIO_MAX_PORTS=4
48+
CONFIG_OCRE_GPIO_PINS_PER_PORT=8
49+
CONFIG_OCRE_GPIO_MAX_PINS=32
50+
51+
# Disable container messaging to save RAM
52+
CONFIG_OCRE_CONTAINER_MESSAGING=y
53+
54+
# Enable container filesystem for WASI stdio
55+
CONFIG_OCRE_CONTAINER_FILESYSTEM=y
56+
57+
# CONFIG_BOOTLOADER_MCUBOOT=n
58+
# # CONFIG_IMG_MANAGER=n
59+
# CONFIG_MCUBOOT_IMG_MANAGER=n
60+
# CONFIG_STREAM_FLASH=n
61+
# CONFIG_IMG_ERASE_PROGRESSIVELY=n
62+
63+
# Flash settings
64+
CONFIG_FLASH=y
65+
CONFIG_FLASH_MAP=y
66+
CONFIG_FLASH_PAGE_LAYOUT=y
67+
68+
# Serial/UART
69+
CONFIG_SERIAL=y
70+
CONFIG_UART_CONSOLE=y
71+
CONFIG_CONSOLE=y
72+
73+
# Reduce other buffers
74+
CONFIG_ZVFS_OPEN_MAX=8
75+
CONFIG_ZVFS_EVENTFD_MAX=5
76+
77+
CONFIG_LOG_TRACE_SHORT_TIMESTAMP=n
78+
79+
CONFIG_SHELL_PROMPT_UART=""
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/ {
2+
aliases {
3+
rng0 = &rng_device;
4+
led0 = &led0;
5+
};
6+
7+
rng_device: rng_0 {
8+
compatible = "custom,rng-sensor";
9+
label = "RNG Sensor";
10+
status = "okay";
11+
};
12+
13+
devices {
14+
compatible = "custom,devices";
15+
status = "okay";
16+
device_list = <&rng_device>;
17+
};
18+
};
19+
20+
/* Enable one LED for blinky */
21+
&led0 {
22+
status = "okay";
23+
};
24+
25+
&flash0 {
26+
partitions {
27+
/delete-node/ partition@f8000;
28+
29+
user_data_partition: partition@e0000 {
30+
label = "user_data";
31+
reg = <0x000e0000 DT_SIZE_K(128)>;
32+
};
33+
};
34+
};

build.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,11 @@ if [[ "$TARGET" == "z" ]]; then
9191
-DDTC_OVERLAY_FILE=boards/${ZEPHYR_BOARD}.overlay\;boards/enc28j60.overlay"
9292
echo "Building for b_u585i_iot02a with ENC28J60 support"
9393
;;
94+
5340)
95+
ZEPHYR_BOARD="nrf5340dk/nrf5340/cpuapp"
96+
CONF_EXTRA=""
97+
echo "Building for nrf5340dk board: App CPU"
98+
;;
9499
*)
95100
ZEPHYR_BOARD="$BOARD_ARG"
96101
CONF_EXTRA=""

src/ocre/components/container_supervisor/cs_sm_impl.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,9 @@ ocre_container_runtime_status_t CS_runtime_init(ocre_cs_ctx *ctx, ocre_container
263263
#ifdef CONFIG_OCRE_TIMER
264264
ocre_timer_init();
265265
#endif
266+
#ifdef CONFIG_OCRE_GPIO
267+
ocre_gpio_init();
268+
#endif
266269
#ifdef CONFIG_OCRE_CONTAINER_MESSAGING
267270
ocre_messaging_init();
268271
#endif

src/ocre/ocre_gpio/ocre_gpio.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ int ocre_gpio_init(void) {
104104
#elif defined(CONFIG_BOARD_W5500_EVB_PICO2)
105105
INIT_GPIO_PORT_NAMED(0, DT_NODELABEL(gpio0), "GPIO0");
106106

107+
#elif defined(CONFIG_BOARD_NRF5340DK_NRF5340_CPUAPP)
108+
INIT_GPIO_PORT_NAMED(0, DT_NODELABEL(gpio0), "GPIO0");
109+
INIT_GPIO_PORT_NAMED(1, DT_NODELABEL(gpio1), "GPIO1");
110+
107111
#else
108112
// Generic fallback
109113
#if DT_NODE_EXISTS(DT_NODELABEL(gpio0))
@@ -384,7 +388,7 @@ static void gpio_callback_handler(const struct device *port, struct gpio_callbac
384388
}
385389

386390
//========================================================================================================================================================================================================================================================================================================
387-
// By Name
391+
// By Name
388392
//========================================================================================================================================================================================================================================================================================================
389393
static int find_port_index(const struct device *port) {
390394
if (!port) {
@@ -662,12 +666,12 @@ int ocre_gpio_wasm_register_callback_by_name(wasm_exec_env_t exec_env, const cha
662666

663667
int global_pin = port_idx * CONFIG_OCRE_GPIO_PINS_PER_PORT + pin;
664668
LOG_INF("Registering callback by name: %s, global_pin=%d", name, global_pin);
665-
669+
666670
if (global_pin >= CONFIG_OCRE_GPIO_MAX_PINS) {
667671
LOG_ERR("Global pin %d exceeds max %d", global_pin, CONFIG_OCRE_GPIO_MAX_PINS);
668672
return -EINVAL;
669673
}
670-
674+
671675
return ocre_gpio_register_callback(global_pin);
672676
}
673677

@@ -686,6 +690,6 @@ int ocre_gpio_wasm_unregister_callback_by_name(wasm_exec_env_t exec_env, const c
686690

687691
int global_pin = port_idx * CONFIG_OCRE_GPIO_PINS_PER_PORT + pin;
688692
LOG_INF("Unregistering callback by name: %s, global_pin=%d", name, global_pin);
689-
693+
690694
return ocre_gpio_unregister_callback(global_pin);
691695
}

src/samples-mini/zephyr/main.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,22 @@ int main(int argc, char *argv[]) {
4747
ocre_container_runtime_status_t ret = ocre_container_runtime_init(&ctx, &args);
4848

4949
if (ret == RUNTIME_STATUS_INITIALIZED) {
50-
printf("\n\nOcre runtime started\n");
5150

51+
#ifndef CONFIG_SOC_SERIES
52+
#define CONFIG_SOC_SERIES "undefined"
53+
#endif
54+
55+
printf("\n\n");
56+
printf("═══════════════════════════════════════════════════════\n");
57+
printf(" Ocre Runtime v%s\n", APP_VERSION_STRING);
58+
printf("═══════════════════════════════════════════════════════\n");
59+
printf(" Zephyr: %s\n", KERNEL_VERSION_STRING);
60+
printf(" Board: %s\n", CONFIG_BOARD_TARGET);
61+
printf(" SoC: %s (%s)\n", CONFIG_SOC, CONFIG_SOC_SERIES);
62+
printf(" Arch: %s\n", CONFIG_ARCH);
63+
printf(" RAM: %d KB heap\n", CONFIG_HEAP_MEM_POOL_SIZE / 1024);
64+
printf(" WAMR: %d KB\n", CONFIG_OCRE_WAMR_HEAP_BUFFER_SIZE / 1024);
65+
printf("═══════════════════════════════════════════════════════\n\n");
5266
create_sample_container(container_filename);
5367

5468
// Step 2: Create the container, this allocates and loads the container binary
@@ -70,7 +84,10 @@ int main(int argc, char *argv[]) {
7084

7185
} else {
7286
printf("\n\nOcre runtime failed to start.\n");
87+
return 1;
7388
}
89+
90+
return 0;
7491
}
7592

7693
/**

src/shared/platform/zephyr/ocre_internal.cmake

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ elseif (DEFINED CONFIG_XTENSA)
2020
elseif (DEFINED CONFIG_RISCV)
2121
set(TARGET_ISA RISCV32)
2222
elseif (DEFINED CONFIG_ARCH_POSIX)
23-
set(TARGET_ISA X86_32)
23+
set(TARGET_ISA X86_32)
2424
else ()
2525
message(FATAL_ERROR "Unsupported ISA: ${CONFIG_ARCH}")
2626
endif ()
@@ -117,6 +117,11 @@ target_sources(app PRIVATE
117117
${OCRE_ROOT_DIR}/src/samples-mini/zephyr/main.c
118118
)
119119

120+
set_source_files_properties(
121+
${WAMR_RUNTIME_LIB_SOURCE}
122+
PROPERTIES COMPILE_FLAGS "-w"
123+
)
124+
120125
add_dependencies(app generate_messages)
121126

122127
if(NOT "${OCRE_INPUT_FILE}" STREQUAL "")

wasm-micro-runtime

Submodule wasm-micro-runtime updated 122 files

west.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ manifest:
1414
- hal_st
1515
- mbedtls
1616
- cmsis_6
17-
17+
- hal_nordic
18+
1819
self:
19-
path: application
20+
path: application

0 commit comments

Comments
 (0)