From f5a596bc6fe187ebe7124f4aaff11558c8230638 Mon Sep 17 00:00:00 2001 From: jixucheng Date: Mon, 18 May 2026 14:25:04 +0800 Subject: [PATCH] =?UTF-8?q?porting=20trunk5.5=E5=9F=BA=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7f9f2ae2fcc2e803584c8eccd8ac939ab6477197 Signed-off-by: jixucheng --- .gitignore | 1 + apps/bt_instance/gattc_op.c | 1 + .../realtek_ieee80211/realtek_netdev.c | 11 ++++- .../r528s3-gemini-s1/configs/nsh/defconfig | 5 +- .../configs/nsh_minidisplay/defconfig | 2 +- .../r528/r528s3-gemini-s1/scripts/sdram.ld.S | 6 ++- .../r528s3-gemini-s1/src/etc/init.d/rcS.nsh | 12 +++-- .../r528s3-gemini-s1/src/shim_binary_compat.c | 4 ++ chips/r528/components/bluetooth/rtk_hci.c | 49 ++++++++++++++++++- chips/r528/r528_boot.c | 44 ++++++++++++++--- 10 files changed, 116 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 5950895b..9d2c198e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ etctmp.c chips/r528/**/*.ddc Make.dep apps/Kconfig +*.su \ No newline at end of file diff --git a/apps/bt_instance/gattc_op.c b/apps/bt_instance/gattc_op.c index b9f9394d..f9714617 100644 --- a/apps/bt_instance/gattc_op.c +++ b/apps/bt_instance/gattc_op.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include diff --git a/boards/r528/drivers/realtek_ieee80211/realtek_netdev.c b/boards/r528/drivers/realtek_ieee80211/realtek_netdev.c index 2f86dec2..87c607da 100755 --- a/boards/r528/drivers/realtek_ieee80211/realtek_netdev.c +++ b/boards/r528/drivers/realtek_ieee80211/realtek_netdev.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include "net_stack_intf.h" @@ -13,6 +14,15 @@ #include #include #include + +#ifdef atomic_set +#undef atomic_set +#endif + +#ifdef atomic_read +#undef atomic_read +#endif + /* Get index from dev pointer. */ #define DEVIDX(p) ((struct realtek_dev_s *)(p) - g_realtek_dev) @@ -381,7 +391,6 @@ int realtek_netdev_init(void) for (devidx = 0; devidx < 2; devidx++) { dev = &g_realtek_dev[devidx].dev; - atomic_init(&dev->quota[NETPKT_TX], 100); atomic_init(&dev->quota[NETPKT_RX], 200); diff --git a/boards/r528/r528s3-gemini-s1/configs/nsh/defconfig b/boards/r528/r528s3-gemini-s1/configs/nsh/defconfig index f54af752..c6c27fe3 100644 --- a/boards/r528/r528s3-gemini-s1/configs/nsh/defconfig +++ b/boards/r528/r528s3-gemini-s1/configs/nsh/defconfig @@ -12,6 +12,7 @@ # CONFIG_DISABLE_MQUEUE is not set # CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set # CONFIG_DISABLE_PTHREAD is not set +# CONFIG_DISABLE_SIGNALS is not set # CONFIG_FS_PROCFS_EXCLUDE_BLOCKS is not set # CONFIG_FS_PROCFS_EXCLUDE_CPUINFO is not set # CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set @@ -199,7 +200,6 @@ CONFIG_BT_PRIVACY=y CONFIG_BT_RX_STACK_SIZE=4096 CONFIG_BT_SAMPLE=y CONFIG_BUILTIN=y -CONFIG_CM_KVDB_TEST=y CONFIG_COMPONENTS_AW_ALSA_UTILS=y CONFIG_COMPONENTS_AW_ALSA_UTILS_ALOOP=y CONFIG_COMPONENTS_AW_EQ_TEST=y @@ -318,6 +318,7 @@ CONFIG_LCD_SUPPORT_T070S140B=y CONFIG_LED_RGB_TEST=y CONFIG_LED_RGB_WS2812=y CONFIG_LIBCXXTOOLCHAIN=y +CONFIG_LIBC_LOCALE=y CONFIG_LIBC_LONG_LONG=y CONFIG_LIBM=y CONFIG_LIBSUPCXX=y @@ -331,7 +332,6 @@ CONFIG_LIB_PNG=y CONFIG_LIB_SSH=y CONFIG_LIB_ZLIB=y CONFIG_LINE_MAX=256 -CONFIG_LTO_FULL=y CONFIG_LV_BIN_DECODER_RAM_LOAD=y CONFIG_LV_CACHE_DEF_SIZE=1048576 CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY=y @@ -461,7 +461,6 @@ CONFIG_NSH_PROMPT_MAX=256 CONFIG_NSH_QUOTE=y CONFIG_NXPLAYER_MAINTHREAD_STACKSIZE=3072 CONFIG_NXRECORDER_MAINTHREAD_STACKSIZE=3072 -CONFIG_PSEUDOFS_SOFTLINKS=y CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_STACK_DEFAULT=4096 CONFIG_PWM=y diff --git a/boards/r528/r528s3-gemini-s1/configs/nsh_minidisplay/defconfig b/boards/r528/r528s3-gemini-s1/configs/nsh_minidisplay/defconfig index 1d4f8151..b688da6b 100644 --- a/boards/r528/r528s3-gemini-s1/configs/nsh_minidisplay/defconfig +++ b/boards/r528/r528s3-gemini-s1/configs/nsh_minidisplay/defconfig @@ -14,6 +14,7 @@ # CONFIG_DISABLE_POSIX_TIMERS is not set # CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set # CONFIG_DISABLE_PTHREAD is not set +# CONFIG_DISABLE_SIGNALS is not set # CONFIG_FS_PROCFS_EXCLUDE_BLOCKS is not set # CONFIG_FS_PROCFS_EXCLUDE_CPUINFO is not set # CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set @@ -465,7 +466,6 @@ CONFIG_NSH_PROMPT_MAX=256 CONFIG_NSH_QUOTE=y CONFIG_NXPLAYER_MAINTHREAD_STACKSIZE=3072 CONFIG_NXRECORDER_MAINTHREAD_STACKSIZE=3072 -CONFIG_PSEUDOFS_SOFTLINKS=y CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_STACK_DEFAULT=4096 CONFIG_PWM=y diff --git a/boards/r528/r528s3-gemini-s1/scripts/sdram.ld.S b/boards/r528/r528s3-gemini-s1/scripts/sdram.ld.S index f29ad003..a467810a 100644 --- a/boards/r528/r528s3-gemini-s1/scripts/sdram.ld.S +++ b/boards/r528/r528s3-gemini-s1/scripts/sdram.ld.S @@ -70,10 +70,14 @@ SECTIONS *(.gnu.linkonce.r.*) *(.gnu.linkonce.armextab.*) *(.ARM.extab*) + _etext = ABSOLUTE(.); + } > sdram + + .ARM.exidx : ALIGN(4) + { PROVIDE_HIDDEN (__exidx_start = .); *(.ARM.exidx* .gnu.linkonce.armexidx.*) PROVIDE_HIDDEN (__exidx_end = .); - _etext = ABSOLUTE(.); } > sdram .init_section : diff --git a/boards/r528/r528s3-gemini-s1/src/etc/init.d/rcS.nsh b/boards/r528/r528s3-gemini-s1/src/etc/init.d/rcS.nsh index a9d386b7..a8e4fde6 100644 --- a/boards/r528/r528s3-gemini-s1/src/etc/init.d/rcS.nsh +++ b/boards/r528/r528s3-gemini-s1/src/etc/init.d/rcS.nsh @@ -57,9 +57,6 @@ then reboot fi -echo "Starting bluetoothd..." -bluetoothd & - #ifndef CONFIG_LCD_DEV #ifdef CONFIG_SHOW_LOGO /* Do not show logo if system crashed or during silient OTA. */ @@ -91,6 +88,11 @@ fi luncher_mini & #endif -echo "Boot nsh ok" - +#ifdef CONFIG_BLUETOOTH_SERVER +sleep 8 +echo "Starting bluetoothd..." +bluetoothd & #endif + +echo "Boot nsh ok" +#endif /* CONFIG_GEMINI_S1_NSH */ diff --git a/boards/r528/r528s3-gemini-s1/src/shim_binary_compat.c b/boards/r528/r528s3-gemini-s1/src/shim_binary_compat.c index 67b655d1..55edcf58 100644 --- a/boards/r528/r528s3-gemini-s1/src/shim_binary_compat.c +++ b/boards/r528/r528s3-gemini-s1/src/shim_binary_compat.c @@ -1,3 +1,4 @@ +#include #include #include @@ -6,6 +7,8 @@ void up_perf_init(void *arg) { } /* Bluetooth AVRCP stubs needed by frameworks/connectivity/bluetooth/service/stacks/zephyr/sal_avrcp_interface.c */ +#ifndef CONFIG_BLUETOOTH_STACK_BREDR_ZBLUE + void bt_avrcp_cttg_register_cb(void *cb) { } int bt_avrcp_cttg_connect(void *conn) { return 0; } int bt_avrcp_cttg_disconnect(void *conn) { return 0; } @@ -14,3 +17,4 @@ int bt_avrcp_ct_pass_through_cmd(void *conn, int op_id, int state) { return 0; } int bt_avrcp_ct_get_play_status(void *conn) { return 0; } int bt_avrcp_ct_get_id3_info(void *conn) { return 0; } int bt_pts_avrcp_ct_get_capabilities(void *conn) { return 0; } +#endif diff --git a/chips/r528/components/bluetooth/rtk_hci.c b/chips/r528/components/bluetooth/rtk_hci.c index 4d26df55..035ad1d5 100644 --- a/chips/r528/components/bluetooth/rtk_hci.c +++ b/chips/r528/components/bluetooth/rtk_hci.c @@ -98,6 +98,17 @@ struct bt_hci_evt_hdr static struct rtk_bt_priv_s g_bthci_dev = { 0 }; +static FAR struct rtk_bt_priv_s *bthci_from_drv(FAR struct bt_driver_s *drv) +{ + if (drv != &g_bthci_dev.drv) + { + wlerr("invalid drv:%p expect:%p", drv, &g_bthci_dev.drv); + return NULL; + } + + return &g_bthci_dev; +} + /**************************************************************************** * Private Function Prototypes ****************************************************************************/ @@ -148,6 +159,19 @@ static void bthci_poll_cb(FAR struct rtk_bt_priv_s *dev, void *userdata) FAR uint8_t *pstart; FAR uint8_t *pend; + if (dev->filep_uart.f_inode == NULL) + { + wlerr("%s: uart file closed", __func__); + return; + } + + if (dev->rxlen >= sizeof(dev->rxbuf)) + { + wlerr("%s: rxlen overflow:%u", __func__, dev->rxlen); + dev->rxlen = 0; + return; + } + do { ret = file_read(&dev->filep_uart, &dev->rxbuf[dev->rxlen], @@ -239,7 +263,12 @@ static int btuart_rx_task(int argc, FAR char **argv) static int bthci_open(FAR struct bt_driver_s *drv) { - FAR struct rtk_bt_priv_s *dev = (struct rtk_bt_priv_s *)drv; + FAR struct rtk_bt_priv_s *dev = bthci_from_drv(drv); + + if (dev == NULL) + { + return -EINVAL; + } wlinfo("%s, id:%d", __func__, dev->id); return OK; @@ -248,9 +277,20 @@ static int bthci_open(FAR struct bt_driver_s *drv) static int bthci_send(FAR struct bt_driver_s *drv, enum bt_buf_type_e type, FAR void *data, size_t len) { - FAR struct rtk_bt_priv_s *dev = (struct rtk_bt_priv_s *)drv; + FAR struct rtk_bt_priv_s *dev = bthci_from_drv(drv); int ret; + if (dev == NULL) + { + return -EINVAL; + } + + if (dev->filep_uart.f_inode == NULL) + { + wlerr("%s: uart file closed, state:%u", __func__, dev->state); + return -ENODEV; + } + bt_dump("bthci tx", data, len); do @@ -274,6 +314,11 @@ static int bthci_ioctl(FAR struct bt_driver_s *driver, int cmd, unsigned long ar static void bthci_close(struct bt_driver_s *drv) { + if (bthci_from_drv(drv) == NULL) + { + return; + } + wlinfo("%s", __func__); } diff --git a/chips/r528/r528_boot.c b/chips/r528/r528_boot.c index 1cc1fe24..5fc5de0a 100755 --- a/chips/r528/r528_boot.c +++ b/chips/r528/r528_boot.c @@ -41,7 +41,20 @@ #include #include #include -#include +#if defined(__has_include) +# if __has_include() +# include +# define R528_USE_MODLIB 1 +# elif __has_include() +# include +# define R528_USE_LIBELF 1 +# else +# error "Neither nor is available" +# endif +#else +# include +# define R528_USE_MODLIB 1 +#endif #ifdef CONFIG_VIDEO_FB #include #endif @@ -155,6 +168,25 @@ int r528_read_resetflag(void); extern uint32_t _vector_start; /* Beginning of vector block */ extern uint32_t _vector_end; /* End+1 of vector block */ +static int r528_module_initialize(FAR const char *path, + FAR struct mod_loadinfo_s *loadinfo) +{ +#ifdef R528_USE_MODLIB + return modlib_initialize(path, loadinfo); +#else + return libelf_initialize(path, loadinfo); +#endif +} + +static int r528_module_load(FAR struct mod_loadinfo_s *loadinfo) +{ +#ifdef R528_USE_MODLIB + return modlib_load(loadinfo); +#else + return libelf_load(loadinfo); +#endif +} + /**************************************************************************** * Private Data ****************************************************************************/ @@ -984,7 +1016,7 @@ int board_boot_image(const char *path, uint32_t hdr_size) #ifdef CONFIG_ARCH_TRUSTZONE_SECURE up_irq_enable(); #endif - uint32_t ret; + int ret; struct mod_loadinfo_s loadinfo; @@ -993,20 +1025,20 @@ int board_boot_image(const char *path, uint32_t hdr_size) /* Initialize the ELF library to load the program binary. */ syslog(LOG_INFO, "elf_init...\n"); - ret = modlib_initialize(path, &loadinfo); + ret = r528_module_initialize(path, &loadinfo); if (ret != 0) { - syslog(LOG_ERR, "Failed to modlib_initialize: %ld\n", ret); + syslog(LOG_ERR, "Failed to initialize module image: %d\n", ret); syslog_flush(); return -1; } /* Load the program binary */ syslog(LOG_INFO, "elf_load...\n"); - ret = modlib_load(&loadinfo); + ret = r528_module_load(&loadinfo); if (ret != 0) { - syslog(LOG_ERR, "Failed to modlib_load: %ld\n", ret); + syslog(LOG_ERR, "Failed to load module image: %d\n", ret); syslog_flush(); } -- Gitee