From 3a79b6af9594a0b093c2cdbd879b078e9d3c2eaa Mon Sep 17 00:00:00 2001 From: andy <1414772332@qq.com> Date: Fri, 11 Oct 2024 18:27:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BBbootram=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=BA=9B=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mfgtool/Makefile | 2 +- mfgtool/bootram/Makefile | 10 ++++++---- .../bootram/executor/iot_bootram_executor.c | 9 ++++++++- mfgtool/bootram/bootram/iot_bootram.c | 2 ++ .../cmd_line/src/iot_bootram_command_line.c | 19 +++++++++++++++++++ 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/mfgtool/Makefile b/mfgtool/Makefile index 56a9073..925b258 100644 --- a/mfgtool/Makefile +++ b/mfgtool/Makefile @@ -6,7 +6,7 @@ OUTPUT_TYPE = 0 OUTPUT_NAME = mfgtool -SUB_DIRS = ah oem_tool lzma clzma +SUB_DIRS = ah oem_tool lzma clzma bootram # Kl3 compiles ram.bin separately to improve compilation speed. ifneq ($(target), kunlun3) diff --git a/mfgtool/bootram/Makefile b/mfgtool/bootram/Makefile index f595c66..6133048 100644 --- a/mfgtool/bootram/Makefile +++ b/mfgtool/bootram/Makefile @@ -26,11 +26,13 @@ MODTOPDIR = $(TOPDIR)/mfgtool/bootram # predefined macro PRE_MARCO += IOT_DTEST_ONLY_SUPPORT=1 IOT_BUILD_TYPE=6 -ifeq ($(bootram_secret_grade_enable), 0) -PRE_MARCO += BOOTRAM_SECRET_GRADE_ENABLE=0 -else +# 打开调试模式 命令行会开放所有命令 +# ifeq ($(bootram_secret_grade_enable), 0) +# PRE_MARCO += BOOTRAM_SECRET_GRADE_ENABLE=0 +# else +# PRE_MARCO += BOOTRAM_SECRET_GRADE_ENABLE=1 +# endif PRE_MARCO += BOOTRAM_SECRET_GRADE_ENABLE=1 -endif SUB_DIRS = $(TOPDIR)/os $(TOPDIR)/common/io_lib $(MODTOPDIR)/bootram $(MODTOPDIR)/bootram/shell/cmd_line/src $(MODTOPDIR)/bootram/executor $(MODTOPDIR)/bootram/executor/lib $(MODTOPDIR)/bootram/sub_executor \ $(MODTOPDIR)/bootram/driver/src $(MODTOPDIR)/bootram/driver/src/$(hw_dep) diff --git a/mfgtool/bootram/bootram/executor/iot_bootram_executor.c b/mfgtool/bootram/bootram/executor/iot_bootram_executor.c index 3c7cd09..b320e02 100644 --- a/mfgtool/bootram/bootram/executor/iot_bootram_executor.c +++ b/mfgtool/bootram/bootram/executor/iot_bootram_executor.c @@ -372,6 +372,7 @@ static uint8_t iot_bootram_tool_upload_transmit_data(uint8_t port, uint8_t *buf, } while (len) { + // 如果上位机发送了 0x03 ctrl+c 则退出 if (iot_btm_command_break_detect()) { iot_bootram_xmodem_transmit_end(port); goto err_out; @@ -623,6 +624,8 @@ err_out: return ret; } + +// 上传flash数据 static uint8_t btm_executor_upload_data(int cid, uint32_t offset, uint32_t len, iot_btm_exe_upload_scope_e scope, uint32_t *num) { @@ -644,17 +647,20 @@ static uint8_t btm_executor_upload_data(int cid, uint32_t offset, uint32_t len, offset_tmp = offset; data_len = len; } + // 循环等待上位机发送 'c' 字符 ret = iot_bootram_xmodem_transmit_start_with_crc(g_exe_uart_info.btm_exe_uart_port); if (ERR_OK != ret) { goto err_out; } + // 使用xmodem协议发送数据 ret = iot_bootram_tool_send_data(g_exe_uart_info.btm_exe_uart_port, offset_tmp, data_len); if (ret) { goto err_out; } - + // 发送结束字符 + // 循环发送结束字符 0x04 ,直到上位机返回应答 0x06 iot_bootram_xmodem_transmit_end(g_exe_uart_info.btm_exe_uart_port); *num = data_len; @@ -1430,6 +1436,7 @@ int iot_btm_executor_prosecc(int cid, int p0, int p1, int p2, int p3, int p4, in int iot_btm_executor_init(void) { + // 这里会把xmodem 的串口初始化为调试串口 btm_executor_init_hw(); default_sfc_clk_fre = sfc_clk_div_get(); diff --git a/mfgtool/bootram/bootram/iot_bootram.c b/mfgtool/bootram/bootram/iot_bootram.c index 7a95313..02bdd72 100644 --- a/mfgtool/bootram/bootram/iot_bootram.c +++ b/mfgtool/bootram/bootram/iot_bootram.c @@ -227,10 +227,12 @@ int iot_bootram_start(void) bootram_version_init(); + // 注册命令和处理命令的回调函数 iot_btm_executor_init(); iot_print_config(1); + // 注册命令行的命令和处理函数 iot_btm_shell_init(); bootram_main_loop(); diff --git a/mfgtool/bootram/bootram/shell/cmd_line/src/iot_bootram_command_line.c b/mfgtool/bootram/bootram/shell/cmd_line/src/iot_bootram_command_line.c index 35e7659..a05240d 100644 --- a/mfgtool/bootram/bootram/shell/cmd_line/src/iot_bootram_command_line.c +++ b/mfgtool/bootram/bootram/shell/cmd_line/src/iot_bootram_command_line.c @@ -137,6 +137,22 @@ static iot_bootram_cmd_line_entity_t *btm_cmd_get_entity(char *cmd, int len) return p_cmd_return; } + + +static iot_bootram_cmd_line_entity_t *btm_cmd_get_entity_by_index(char *cmd, int len,int index) +{ + iot_bootram_cmd_line_entity_t *p_cmd_handle = NULL; + + if(index >= cline_commands.total_cnt || index < 0){ + return NULL; + } + p_cmd_handle = &(cline_commands.entity[index]); + return p_cmd_handle; +} + + + + static void btm_print_version(void) { uint32_t r_time; @@ -178,6 +194,7 @@ static void btm_cmd_line_help(char *argv[], int argc) } } + // 没有输入具体命令的情况下就打印所有命令 if (NULL == p_ent) { btm_print_version(); for (i = 0; i < cline_commands.total_cnt; i++) { @@ -564,6 +581,8 @@ static void btm_line_completed(void) return; } + +// 串口数据的处理函数 赋值给 btm_data_received_callback static void btm_receive_command(char *buf, int len) { char *ch;