国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RT-Thread 軟件包-軟件包分類-IoT-OTA Downloader①

這篇具有很好參考價值的文章主要介紹了RT-Thread 軟件包-軟件包分類-IoT-OTA Downloader①。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

RT-Thread 軟件包-軟件包分類-IoT-OTA Downloader①

ota_downloader,Linux,Python,ARM?MCU,linux,stm32,arm開發(fā),運維,java,物聯(lián)網(wǎng),數(shù)據(jù)庫

OTA Downloader

中文頁 | 英文頁

1、介紹

本軟件包是用于 OTA 升級的固件下載器,該下載器提供多種固件下載方式。開發(fā)者可以根據(jù)自己的需求靈活選擇升級方式,每種升級方式都只需調(diào)用一次函數(shù)或者命令就可實現(xiàn),目前支持的下載方式如下所示:

  • HTTP/HTTPS 協(xié)議下載固件
  • Ymodem 協(xié)議下載固件

1.1 許可證

OTA Downloader package 遵循 Apache2.0 許可,詳見 LICENSE 文件。

1.2 依賴

  • RT-Thread 3.0+
  • FAL 軟件包支持
  • Ymodem 下載方式依賴于 Ymodem 組件
  • HTTP/HTTPS 下載方式依賴于 webclient 軟件包

2、如何打開 OTA Downloader

使用 OTA downloader package 需要在 RT-Thread 的包管理器中選擇它,具體路徑如下:

RT-Thread online packages
    IoT - internet of things  --->
        [*]  The firmware downloader which using on RT-Thread OTA component  --->
            [*]  Enable OTA downloader debug
            [*]  Enable HTTP/HTTPS OTA
                (http://xxx/xxx/rtthread.rbl) HTTP OTA URL
            [*]  Enable Ymodem OTA

軟件包選項的詳細說明如下圖:

選項 說明
Enable OTA downloader debug 使能固件下載器 debug 模式
Enable HTTP/HTTPS OTA 使能 HTTP/HTTPS 協(xié)議下載固件功能
Enable Ymodem OTA 使能 Ymodem 協(xié)議下載固件功能

選擇完自己需要的選項后使用 RT-Thread 的包管理器自動更新,或者使用 pkgs --update 命令更新包到 BSP 中。

3、使用 OTA Downloader

在打開 OTA downloader package ,選中相應(yīng)的功能選項后,當進行 BSP 編譯時,它會被加入到 BSP 工程中進行編譯。
燒錄程序到目標開發(fā)板,用戶可在 FinSH 終端找到對應(yīng)的命令。目前軟件包支持的升級方式如下表:

功能 函數(shù)調(diào)用 執(zhí)行命令
使用 HTTP/HTTPS 協(xié)議固件升級 void http_ota(uint8_t argc, char **argv) http_ota
使用 Ymodem 協(xié)議固件升級 void ymodem_ota(uint8_t argc, char **argv) ymodem_ota

3.1 Ymodem 協(xié)議固件升級命令行演示

推薦使用支持 Ymodem 協(xié)議的 Xshell 。在終端輸入 ymodem_ota 命令后,鼠標右鍵然后在菜單欄找到用 YMODEM 發(fā)送選項發(fā)送文件。具體步驟如下圖:

ota_downloader,Linux,Python,ARM?MCU,linux,stm32,arm開發(fā),運維,java,物聯(lián)網(wǎng),數(shù)據(jù)庫

3.2 HTTP/HTTPS 協(xié)議固件升級命令行演示

在終端輸入 http_ota http://xxx/xxx/rtthreadf.rbl 命令,執(zhí)行該命令后將會從鏈接 http://xxx/xxx/rtthreadf.rbl 處下載固件。具體步驟如下圖所示:

ota_downloader,Linux,Python,ARM?MCU,linux,stm32,arm開發(fā),運維,java,物聯(lián)網(wǎng),數(shù)據(jù)庫

4、注意事項

  1. 確保 FAL 中有 downloader 分區(qū)。
  2. Ymodem 協(xié)議升級固件時,請使用支持 Ymodem 協(xié)議的工具。
  3. HTTP/HTTPS 協(xié)議升級固件時,需確保遠端鏈接地址可用。

5、參考資料

《RT-Thread OTA 用戶手冊》: docs/RT-Thread-OTA 用戶手冊.pdf

示例代碼

ymodem_ota.c文章來源地址http://www.zghlxwxcb.cn/news/detail-816086.html

/*
 * Copyright (c) 2006-2018, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2018-01-30     armink       the first version
 * 2018-08-27     Murphy       update log
 */

#include <rtthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <finsh.h>
#include <fal.h>
#include <ymodem.h>

#define DBG_ENABLE
#define DBG_SECTION_NAME               "ymodem"
#ifdef OTA_DOWNLOADER_DEBUG
#define DBG_LEVEL                      DBG_LOG
#else
#define DBG_LEVEL                      DBG_INFO
#endif
#define DBG_COLOR
#include <rtdbg.h>

#ifdef PKG_USING_YMODEM_OTA

#define DEFAULT_DOWNLOAD_PART "download"

static size_t update_file_total_size, update_file_cur_size;
static const struct fal_partition * dl_part = RT_NULL;
static uint8_t enable_output_log = 0;

static enum rym_code ymodem_on_begin(struct rym_ctx *ctx, rt_uint8_t *buf, rt_size_t len)
{
    char *file_name, *file_size;

    /* calculate and store file size */
    file_name = (char *)&buf[0];
    file_size = (char *)&buf[rt_strlen(file_name) + 1];
    update_file_total_size = atol(file_size);
    if (enable_output_log) {rt_kprintf("Ymodem file_size:%d\n", update_file_total_size);}

    update_file_cur_size = 0;

    /* Get download partition information and erase download partition data */
    if (update_file_total_size > dl_part->len)
    {
        if (enable_output_log) {LOG_E("Firmware is too large! File size (%d), '%s' partition size (%d)", update_file_total_size, dl_part->name, dl_part->len);}
        return RYM_CODE_CAN;
    }

    if (enable_output_log) {LOG_I("Start erase. Size (%d)", update_file_total_size);}

    /* erase DL section */
    if (fal_partition_erase(dl_part, 0, update_file_total_size) < 0)
    {
        if (enable_output_log) {LOG_E("Firmware download failed! Partition (%s) erase error!", dl_part->name);}
        return RYM_CODE_CAN;
    }

    return RYM_CODE_ACK;
}

static enum rym_code ymodem_on_data(struct rym_ctx *ctx, rt_uint8_t *buf, rt_size_t len)
{
    /* write data of application to DL partition  */
    if (fal_partition_write(dl_part, update_file_cur_size, buf, len) < 0)
    {
        if (enable_output_log) {LOG_E("Firmware download failed! Partition (%s) write data error!", dl_part->name);}
        return RYM_CODE_CAN;
    }

    update_file_cur_size += len;

    return RYM_CODE_ACK;
}

void ymodem_ota(uint8_t argc, char **argv)
{
    struct rym_ctx rctx;
    const char str_usage[] = "Usage: ymodem_ota -p <partiton name> -t <device name>.\n";
    int i;
    char* recv_partition = DEFAULT_DOWNLOAD_PART;
    rt_device_t dev = rt_console_get_device();
    enable_output_log = 0;
    
    for (i=1; i<argc;)
    {
        /* change default partition to save firmware */
        if (!strcmp(argv[i], "-p"))
        {
            if (argc <= (i+1))
            {
                rt_kprintf("%s", str_usage);
                return;
            }
            recv_partition = argv[i+1];
            i += 2;
        }
        /* change default device to transfer */
        else if (!strcmp(argv[i], "-t"))
        {
            if (argc <= (i+1))
            {
                rt_kprintf("%s", str_usage);
                return;
            }
            dev = rt_device_find(argv[i+1]);
            if (dev == RT_NULL)
            {
                rt_kprintf("Device (%s) find error!\n", argv[i+1]);
                return;
            }
            i += 2;
        }
        /* NOT supply parameter */
        else
        {
            rt_kprintf("%s", str_usage);
            return;
        }
    }
    if ((dl_part = fal_partition_find(recv_partition)) == RT_NULL)
    {
        rt_kprintf("Partition (%s) find error!\n", recv_partition);
        return;
    }
    if (dev != rt_console_get_device()) {enable_output_log = 1;}
    rt_kprintf("Save firmware on \"%s\" partition with device \"%s\".\n", recv_partition, dev->parent.name);
    rt_kprintf("Warning: Ymodem has started! This operator will not recovery.\n");
    rt_kprintf("Please select the ota firmware file and use Ymodem to send.\n");

    if (!rym_recv_on_device(&rctx, dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
                            ymodem_on_begin, ymodem_on_data, NULL, RT_TICK_PER_SECOND))
    {
        rt_kprintf("Download firmware to flash success.\n");
        rt_kprintf("System now will restart...\r\n");

        /* wait some time for terminal response finish */
        rt_thread_delay(rt_tick_from_millisecond(200));

        /* Reset the device, Start new firmware */
        extern void rt_hw_cpu_reset(void);
        rt_hw_cpu_reset();
        /* wait some time for terminal response finish */
        rt_thread_delay(rt_tick_from_millisecond(200));
    }
    else
    {
        /* wait some time for terminal response finish */
        rt_thread_delay(RT_TICK_PER_SECOND);
        rt_kprintf("Update firmware fail.\n");
    }

    return;
}
/**
 * msh />ymodem_ota
*/
MSH_CMD_EXPORT(ymodem_ota, Use Y-MODEM to download the firmware);

#endif /* PKG_USING_YMODEM_OTA */


維護人:

  • 華為奮斗者精神, 郵箱:1992152446@qq.com

到了這里,關(guān)于RT-Thread 軟件包-軟件包分類-IoT-OTA Downloader①的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • RT-Thread 軟件包-物聯(lián)網(wǎng)-網(wǎng)絡(luò)工具集NetUtils使用指南①

    RT-Thread 軟件包-物聯(lián)網(wǎng)-網(wǎng)絡(luò)工具集NetUtils使用指南①

    本文介紹 RT-Thread NetUtils 的使用方法,幫助開發(fā)者更好地使用 RT-Thread NetUtils 組件來解決網(wǎng)絡(luò)開發(fā)過程中遇到的問題。 簡介 在進行網(wǎng)絡(luò)相關(guān)的產(chǎn)品開發(fā)和調(diào)試時,一些好用的小工具往往能取到事半功倍的效果。 RT-Thread NetUtils 組件基于此應(yīng)用場景,開發(fā)和封裝了一系列簡潔好

    2024年02月20日
    瀏覽(25)
  • RT-Thread 軟件包-PikaScript用戶手冊-STM32模塊API文檔①

    RT-Thread 軟件包-PikaScript用戶手冊-STM32模塊API文檔①

    RT-Thread軟件包中的PikaScript用戶手冊針對STM32模塊提供了API文檔。STM32模塊是一個為基于STM32微控制器的RT-Thread系統(tǒng)提供支持的功能模塊,它提供了對STM32硬件資源的訪問和控制。 在PikaScript用戶手冊中,針對STM32模塊的API文檔主要包括以下幾個部分: GPIO控制:STM32模塊提供了一

    2024年02月02日
    瀏覽(34)
  • RT-Thread STM32L475 IoT Discovery kit BSP說明①

    RT-Thread STM32L475 IoT Discovery kit BSP說明①

    本文檔為 RT-Thread 開發(fā)團隊為 STM32L475 IoT Discovery kit開發(fā)板提供的 BSP (板級支持包) 說明。 主要內(nèi)容如下: 開發(fā)板資源介紹 BSP 快速上手 進階使用方法 通過閱讀快速上手章節(jié)開發(fā)者可以快速地上手該 BSP,將 RT-Thread 運行在開發(fā)板上。在進階使用指南章節(jié),將會介紹更多高級功

    2024年02月02日
    瀏覽(40)
  • RT-Thread 1. GD32移植RT-Thread Nano

    RT-Thread 1. GD32移植RT-Thread Nano

    1. RT-Thread Nano?下載 RT-Thread Nano 是一個極簡版的硬實時內(nèi)核,它是由 C 語言開發(fā),采用面向?qū)ο蟮木幊趟季S,具有良好的代碼風格,是一款可裁剪的、搶占式實時多任務(wù)的 RTOS。其內(nèi)存資源占用極小,功能包括任務(wù)處理、軟件定時器、信號量、郵箱和實時調(diào)度等相對完整的實

    2024年02月05日
    瀏覽(28)
  • RT-Thread 9. VS2012下仿真RT-Thread 和LVGL

    RT-Thread 9. VS2012下仿真RT-Thread 和LVGL

    1. 在ENV中添加組件 2. 下載組件 3. 生成代碼 4. 打開代碼 雙擊project.vcxproj 編譯 5. 運行

    2024年02月06日
    瀏覽(24)
  • RT-Thread 7. RT-Thread Studio ENV修改MCU型號

    RT-Thread 7. RT-Thread Studio ENV修改MCU型號

    1. 修改MCU型號 2.在ENV界面輸入 3. dist下為更新后完整源代碼 4.導(dǎo)入RT-Thread Studio 發(fā)現(xiàn)GD32F330已經(jīng)生效了。 5. 自己編寫startup_gd32f3x0.S,準確性待驗證

    2024年02月06日
    瀏覽(27)
  • 【STM32&RT-Thread零基礎(chǔ)入門】 2. 新建RT-Thread項目

    【STM32&RT-Thread零基礎(chǔ)入門】 2. 新建RT-Thread項目

    硬件:STM32F103ZET6、ST-LINK、usb轉(zhuǎn)串口工具 RT-Thread的全稱是Real Time Thread,顧名思義,它是一個嵌入式實時多線程操作系統(tǒng)。相較于 Linux 操作系統(tǒng),RT-Thread 體積小,成本低,功耗低、啟動快速,除此之外 RT-Thread 還具有實時性高、占用資源小等特點,非常適用于各種資源受限(

    2024年02月13日
    瀏覽(23)
  • 使用RT-Thread Studio搭配STM32CubeMX新建RT-Thread項目

    使用RT-Thread Studio搭配STM32CubeMX新建RT-Thread項目

    STM32CubeMX下載 RT-Thread Studio下載 安裝好RT-Thread Studio后,先打開RT-Thread SDK管理器確認有沒有自己MCU需要的SDK包,直接安裝好之后里面是有STM32F1系列的SDK包,其他的需要自己安裝。 之后點擊文件→新建→RT-Thread項目,根據(jù)自己需要配置好后點擊完成就會生成RT-Thread項目。 新建項

    2024年02月11日
    瀏覽(20)
  • 【STM32&RT-Thread零基礎(chǔ)入門】8. 基于 CubeMX 移植 RT-Thread Nano

    【STM32&RT-Thread零基礎(chǔ)入門】8. 基于 CubeMX 移植 RT-Thread Nano

    硬件:STM32F103ZET6、ST-LINK、usb轉(zhuǎn)串口工具、4個LED燈、1個蜂鳴器、4個1k電阻、2個按鍵、面包板、杜邦線 利用RT_Thread操作系統(tǒng)實現(xiàn)三種不同的LED等閃爍 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 cubemx配置參考教程: 基于 CubeMX 移植 RT-Thread Nano 后面程序所需的引腳 RT

    2024年02月09日
    瀏覽(30)
  • 【RT-Thread】使用RT-Thread Studio 配置BootLoader及App實現(xiàn)OTA功能

    【RT-Thread】使用RT-Thread Studio 配置BootLoader及App實現(xiàn)OTA功能

    由于項目需要實現(xiàn)OTA功能學習了一下具體實現(xiàn)方法,以備后期查看,有問題的地方隨時指正修改 1.什么是OTA OTA是“over-the-air”的縮寫,是一種無線技術(shù),用于在不需要接觸設(shè)備的情況下向移動設(shè)備或物聯(lián)網(wǎng)設(shè)備提供更新、補丁或新版本的軟件。OTA更新通常通過無線網(wǎng)絡(luò)(如

    2024年02月09日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包