Meadow.OS source code migration - Part 1 - Take 2

This patch starts to implement the ability to build Meadow.OS for the Meadow F7 board with the NuttX  mainline. It will be followed by more patches, progressively enabling full Meadow.OS functionality. This configuration is a work in progress.

The Meadow.OS source code is needed to build this configuration. Meadow.OS is being open-sourced under the Apache 2.0 license. A prototype of the source code release and integration with NuttX  is at https://github.com/WildernessLabs/Meadow.OS/tree/prototype

This is the second revision of this patch, as the first one (https://github.com/apache/nuttx/pull/9997) was causing build issues on NuttX CI and was reverted.

This should only impact the Meadow F7 board configurations.

No testing to be done, as the configuration is under development.
This commit is contained in:
Alexis Christoforides
2023-08-17 11:02:42 -04:00
committed by Mateusz Szafoni
parent 81a9a2e5e0
commit 033f265e53
6 changed files with 286 additions and 2 deletions
@@ -5,4 +5,63 @@
if ARCH_BOARD_MEADOW_F7MICRO
config HCOM_FILESYSTEM_INIT
bool "Enables HCOM FS initialization support"
default y
config HCOM_MTD_STRESS_TEST
bool "Enables HCOM MTD stress testing support"
default n
config HCOM_MONO_STDERR_STDOUT
bool "Enables HCOM routing of Mono stdout and stderr to PC/Mac"
default y
config HCOM_MONO_REMOTE_DEBUGGING
bool "Enables HCOM Mono remote debugging support"
default y
config HCOM_COMMS_DEVICE_NAME
string "Specifies the device name for HCOM communications"
default "/dev/ttyACM0"
config MEADOW_CLOUD
string "Enables Meadow Cloud support"
default y
config MEADOW_ETHNET_INCLUDE_IN_BUILD
bool "Build Meadow and include Ethernet for compute module"
default n
---help---
This must be used with a 'defconfig' file that includes the correct Ethernet configuration.
config HCOM_ESP32_COMMS
bool "Enables HCOM file download to the ESP32"
default y
menu "ESP32 Coprocessor Configuration"
source "boards/arm/stm32f7/stm32f777zit6-meadow/Kconfig-ESP32"
endmenu
config ARCH_BOARD_MEADOW
bool "Enables Meadow board features"
default y
# See meadow-adc.c file, currently unused.
config MEADOW_ADC
bool "Enables Meadow ADC support"
config MEADOW_HCOM
bool "Enables Meadow HCOM support"
default n
config MEADOW_TIMER_SUPPORT
bool "Enables Meadow timer support"
default n
config MEADOW_PWR_MGMT_SUPPORT
bool "Enables Meadow power management support"
default n
endif # ARCH_BOARD_MEADOW_F7MICRO
@@ -0,0 +1,31 @@
#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
config MEADOW_ESPCP_MANAGER
bool "Enable ESP32 Coprocessor"
default y
---help---
Enable or disable ESP32 coprocessor support.
if MEADOW_ESPCP_MANAGER
config MEADOW_ESPCP_USE_EXTERNAL_ESP32_BOARD
bool "Use external ESP32 chip"
default n
---help---
Use an external ESP32 for debugging purposes.
config MEADOW_ESPCP_RESET_ESP32_AT_STARTUP
bool "Reset the ESP32 at startup?"
default y
---help---
Should the ESP32 be reset as part of the startup process. The default for production
is "Y". For development it is sometimes necessary to attach a debugger to the ESP32
and in this case resetting the chip interferes with debugging.
For debugging set this to Y
For production set this to N (default).
endif
@@ -0,0 +1,57 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
# CONFIG_STM32F7_USE_LEGACY_PINMAP is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="stm32f777zit6-meadow"
CONFIG_ARCH_BOARD_MEADOW_F7MICRO=y
CONFIG_ARCH_CHIP="stm32f7"
CONFIG_ARCH_CHIP_STM32F777ZI=y
CONFIG_ARCH_CHIP_STM32F7=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARMV7M_DCACHE=y
CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
CONFIG_ARMV7M_DTCM=y
CONFIG_ARMV7M_ICACHE=y
CONFIG_BCH=y
CONFIG_BOARDCTL_USBDEVCTRL=y
CONFIG_BOARD_LATE_INITIALIZE=y
CONFIG_BOARD_LOOPSPERMSEC=43103
CONFIG_BUILTIN=y
CONFIG_CDCACM=y
CONFIG_CDCACM_CONSOLE=y
CONFIG_CDCACM_PRODUCTID=0x0001
CONFIG_CDCACM_PRODUCTSTR="Wilderness Labs"
CONFIG_CDCACM_VENDORID=0x2E6A
CONFIG_CDCACM_VENDORSTR="Meadow F7 Micro"
CONFIG_CRYPTO=y
CONFIG_CRYPTO_RANDOM_POOL=y
CONFIG_DEV_URANDOM=y
CONFIG_DEV_URANDOM_RANDOM_POOL=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INTELHEX_BINARY=y
CONFIG_MEADOW_HCOM=y
CONFIG_MM_REGIONS=3
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_LINELEN=64
CONFIG_NSH_READLINE=y
CONFIG_PREALLOC_TIMERS=4
CONFIG_RAM_SIZE=245760
CONFIG_RAM_START=0x20010000
CONFIG_RAW_BINARY=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=14
CONFIG_STM32F7_OTGFS=y
CONFIG_STM32F7_USART1=y
CONFIG_SYSTEM_NSH=y
CONFIG_TASK_NAME_SIZE=64
CONFIG_USBDEV=y
@@ -27,7 +27,7 @@ ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe -I $(BOARD_DIR)$(DELIM)src -I $(BOARD_DIR)$(DELIM)src/Meadow.OS/include
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
@@ -20,6 +20,7 @@
include $(TOPDIR)/Make.defs
CSRCS = stm32_boot.c stm32_bringup.c stm32_spi.c
ifeq ($(CONFIG_ARCH_LEDS),y)
@@ -57,4 +58,127 @@ else ifeq ($(CONFIG_STM32F7_OTGFSHS),y)
CSRCS += stm32_usb.c
endif
ifeq ($(CONFIG_USBMSC),y)
CSRCS += stm32_usbmsc.c
endif
ifeq ($(CONFIG_ARCH_IDLE_CUSTOM),y)
CSRCS += stm32_idle.c
endif
ifeq ($(CONFIG_STM32F7_SDMMC2),y)
CSRCS += meadow_sdmmc.c
endif
ifdef MEADOW_OS
# Enable Meadow.OS build (WORK IN PROGRESS)
MEADOW_OS_DIR=Meadow.OS
CFLAGS += -DMEADOW_OS
ifeq ($(CONFIG_MEADOW_HCOM),y)
CSRCS += $(MEADOW_OS_DIR)/hcom_nx/hcom_nx_upd.c \
$(MEADOW_OS_DIR)/hcom_nx/hcom_nx_startup_mgr.c \
$(MEADOW_OS_DIR)/hcom_nx/hcom_nx_common_utils.c \
$(MEADOW_OS_DIR)/hcom_nx/hcom_nx_bbreg_access.c \
$(MEADOW_OS_DIR)/hcom_nx/hcom_nx_upd_route_cmd.c \
$(MEADOW_OS_DIR)/hcom_nx/hcom_nx_config_manager.c \
$(MEADOW_OS_DIR)/hcom_nx/commands/hcom_nx_ex_flash.c \
$(MEADOW_OS_DIR)/hcom_nx/comms/hcom_nx_host_send.c \
$(MEADOW_OS_DIR)/hcom_nx/create_fs/hcom_nx_fs.c \
$(MEADOW_OS_DIR)/hcom_nx/create_fs/hcom_nx_fs_littlefs.c \
$(MEADOW_OS_DIR)/hcom_nx/diag/hcom_nx_route_text_to_host.c \
$(MEADOW_OS_DIR)/hcom_nx/diag/hcom_nx_trace_msg_proc.c \
$(MEADOW_OS_DIR)/hcom_nx/tests/hcom_nx_qspi_flash_tests.c
ifeq ($(CONFIG_ARCH_IDLE_CUSTOM),y)
CSRCS += $(MEADOW_OS_DIR)/misc/meadow_idle_monitor.c
endif
ifeq ($(CONFIG_MEADOW_PWR_MGMT_SUPPORT),y)
CSRCS += $(MEADOW_OS_DIR)/pwrmgmt_calib_lsi_clock.c \
$(MEADOW_OS_DIR)/pwrmgmt_config_wakeup_timer.c \
$(MEADOW_OS_DIR)/pwrmgmt_config_wakeup_alarm.c \
$(MEADOW_OS_DIR)/pwrmgmt_control.c \
$(MEADOW_OS_DIR)/pwrmgmt_enter_stop_mode.c \
$(MEADOW_OS_DIR)/pwrmgmt_misc.c \
$(MEADOW_OS_DIR)/pwrmgmt_switch_rtc_clock.c \
$(MEADOW_OS_DIR)/pwrmgmt_time_support.c
endif
ifeq ($(CONFIG_MEADOW_TIMER_SUPPORT),y)
CSRCS += $(MEADOW_OS_DIR)/timers/timer_manager.c \
$(MEADOW_OS_DIR)/timers/cpu_measure.c \
$(MEADOW_OS_DIR)/timers/pulse_width.c \
$(MEADOW_OS_DIR)/timers/freq_duty.c \
$(MEADOW_OS_DIR)/timers/rc_servo_decode.c \
$(MEADOW_OS_DIR)/timers/lsi_clk_freq_measure.c
endif
CSRCS += $(MEADOW_OS_DIR)/ethernet/meadow_ethnet_start.c \
$(MEADOW_OS_DIR)/ethernet/meadow_ethnet_utils.c \
$(MEADOW_OS_DIR)/ethernet/meadow_ethnet_connect.c \
$(MEADOW_OS_DIR)/ethernet/meadow_ethnet_monitor.c \
$(MEADOW_OS_DIR)/ethernet/meadow_ethnet_dhcp.c \
$(MEADOW_OS_DIR)/ethernet/meadow_ethnet_ping.c
ifeq ($(CONFIG_MEADOW_ESPCP_MANAGER),y)
CSRCS += $(MEADOW_OS_DIR)/espcp/espcp_thread.c \
$(MEADOW_OS_DIR)/espcp/espcp_queue.c \
$(MEADOW_OS_DIR)/espcp/espcp_encoders.c \
$(MEADOW_OS_DIR)/espcp/espcp_message.c \
$(MEADOW_OS_DIR)/espcp/espcp_message_dispatcher.c \
$(MEADOW_OS_DIR)/espcp/generic_list.c \
$(MEADOW_OS_DIR)/espcp/espcp_coprocessor.c \
$(MEADOW_OS_DIR)/espcp/espcp_wifi.c \
$(MEADOW_OS_DIR)/espcp/espcp_system.c \
$(MEADOW_OS_DIR)/espcp/espcp_common.c \
$(MEADOW_OS_DIR)/espcp/espcp_usrsock_sockif.c \
$(MEADOW_OS_DIR)/espcp/espcp_event_handlers.c \
$(MEADOW_OS_DIR)/espcp/espcp_file_system.c
endif
CSRCS += $(MEADOW_OS_DIR)/kerneltests/espcp_tests.c \
$(MEADOW_OS_DIR)/kerneltests/ethernet_tests.c \
$(MEADOW_OS_DIR)/kerneltests/bg77_tests.c \
$(MEADOW_OS_DIR)/kerneltests/network_tests.c \
$(MEADOW_OS_DIR)/kerneltests/sdcard_tests.c \
$(MEADOW_OS_DIR)/kerneltests/power_management_tests.c \
$(MEADOW_OS_DIR)/kerneltests/iso8601_time_tests.c \
$(MEADOW_OS_DIR)/kerneltests/quick_misc_tests.c
#
# Add the NTP client.
#
CSRCS += $(MEADOW_OS_DIR)/ntpclient/ntpclient.c $(MEADOW_OS_DIR)/misc/long_period_scheduler.c
#
# Add the Meadow logging system.
#
CSRCS += $(MEADOW_OS_DIR)/misc/meadow_logging.c
#
# The libyaml library is required by cyaml.
#
CSRCS += $(MEADOW_OS_DIR)/libyaml/api.c $(MEADOW_OS_DIR)/libyaml/dumper.c $(MEADOW_OS_DIR)/libyaml/emitter.c $(MEADOW_OS_DIR)/libyaml/loader.c \
$(MEADOW_OS_DIR)/libyaml/parser.c $(MEADOW_OS_DIR)/libyaml/reader.c $(MEADOW_OS_DIR)/libyaml/scanner.c $(MEADOW_OS_DIR)/libyaml//writer.c
#
# The cyaml library maps the items from the libyaml output to the structures used by the application.
#
CSRCS += $(MEADOW_OS_DIR)/libcyaml/mem.c $(MEADOW_OS_DIR)/libcyaml/free.c $(MEADOW_OS_DIR)/libcyaml/load.c $(MEADOW_OS_DIR)/libcyaml/save.c $(MEADOW_OS_DIR)/libcyaml/util.c $(MEADOW_OS_DIR)/libcyaml/utf8.c
#
# Add Meadow Cloud support
#
CSRCS += $(MEADOW_OS_DIR)/meadow_cloud/meadow_cloud.c
#
# Add Meadow OS syscall implementations.
#
CSRCS += $(MEADOW_OS_DIR)/meadow_os/meadow_os_config.c
endif
endif # MEADOW_OS
include $(TOPDIR)/boards/Board.mk
@@ -25,6 +25,7 @@
#include <nuttx/config.h>
#include <debug.h>
#include <assert.h>
#include <nuttx/board.h>
#include <arch/board/board.h>
@@ -163,8 +164,20 @@ void board_late_initialize(void)
*
* stm32_mpu_uheap((uintptr_t)0x90000000, 0x4000000);
*/
#endif
#endif
#if defined(MEADOW_OS)
/* Initialize Meadow HCOM nuttx */
int ret;
ret = hcom_nx_setup_mgr(mtd);
if (ret < 0)
{
syslog(LOG_EMERG, "ERROR: HCOM proxy initialization failed!\n");
PANIC();
}
#endif
#if defined(CONFIG_NSH_LIBRARY) && !defined(CONFIG_BOARDCTL)
/* Perform NSH initialization here instead of from the NSH. This
* alternative NSH initialization is necessary when NSH is ran in