Files
luban-lite-t3e-pro/doc/topics/sdk/ota/ota_introduction_lb.html
2025-01-23 16:37:00 +08:00

262 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn" data-whc_version="26.0">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="description" content="OTA 是一种通过网络从服务器上下载更新文件,对本地系统或者文件进行升级的升级方式,便于为用户及时更新系统和应用程序。 术语 定义 注释说明 OTA Over The Air 远程升级 Luban OTA 方案介绍 Luban OTA 系统方案具有如下特点: 基于 SWUpdate 平台实现,使用 Recovery 系统方案。 程序 kernel 和 Rootfs 称为主系统。 ..."/><meta name="DC.rights.owner" content="(C) 版权 2025"/><meta name="copyright" content="(C) 版权 2025"/><meta name="generator" content="DITA-OT"/><meta name="DC.type" content="topic"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.date.modified" content="2024-12-11"/><meta name="DC.format" content="HTML5"/><meta name="DC.identifier" content="id"/><title>模块介绍</title><!-- Build number 2023110923. --><meta name="wh-path2root" content="../../../"/><meta name="wh-toc-id" content=""/><meta name="wh-source-relpath" content="topics/sdk/ota/ota_introduction_lb.dita"/><meta name="wh-out-relpath" content="topics/sdk/ota/ota_introduction_lb.html"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/commons.css?buildId=2023110923"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/topic.css?buildId=2023110923"/>
<script src="../../../webhelp/app/options/properties.js?buildId=20250121171154"></script>
<script src="../../../webhelp/app/localization/strings.js?buildId=2023110923"></script>
<script src="../../../webhelp/app/search/index/keywords.js?buildId=20250121171154"></script>
<script defer="defer" src="../../../webhelp/app/commons.js?buildId=2023110923"></script>
<script defer="defer" src="../../../webhelp/app/topic.js?buildId=2023110923"></script>
<link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-styles-web.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/notes.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-common.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-images.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/footnote.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-web-watermark.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/topic-body-list.css?buildId=2023110923"/></head>
<body id="id" class="wh_topic_page frmBody">
<a href="#wh_topic_body" class="sr-only sr-only-focusable">
跳转到主要内容
</a>
<header class="navbar navbar-default wh_header">
<div class="container-fluid">
<div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
<div class="wh_logo_and_publication_title_container">
<div class="wh_logo_and_publication_title">
<a href="http://www.artinchip.com" class=" wh_logo d-none d-sm-block "><img src="../../../company-logo-white.png" alt="RTOS SDK 使用指南SDK 指南文件"/></a>
<div class=" wh_publication_title "><a href="../../../index.html"><span class="booktitle"><span class="ph mainbooktitle">RTOS SDK 使用指南</span><span class="ph booktitlealt">SDK 指南文件</span></span></a></div>
</div>
</div>
<div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
</div>
</div>
</div>
</header>
<div class=" wh_search_input navbar-form wh_topic_page_search search " role="form">
<form id="searchForm" method="get" role="search" action="../../../search.html"><div><input type="search" placeholder="搜索 " class="wh_search_textfield" id="textToSearch" name="searchQuery" aria-label="搜索查询" required="required"/><button type="submit" class="wh_search_button" aria-label="搜索"><span class="search_input_text">搜索</span></button></div></form>
</div>
<div class="container-fluid" id="wh_topic_container">
<div class="row">
<nav class="wh_tools d-print-none navbar-expand-md" aria-label="Tools">
<div data-tooltip-position="bottom" class=" wh_breadcrumb "></div>
<div class="wh_right_tools">
<button class="wh_hide_highlight" aria-label="切换搜索突出显示" title="切换搜索突出显示"></button>
<button class="webhelp_expand_collapse_sections" data-next-state="collapsed" aria-label="折叠截面" title="折叠截面"></button>
<div class=" wh_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="打印此页" aria-label="打印此页"></button></div>
</div>
</nav>
</div>
<div class="wh_content_area">
<div class="row">
<div class="col-lg-10 col-md-10 col-sm-10 col-xs-12" id="wh_topic_body">
<button id="wh_close_topic_toc_button" class="close-toc-button d-none" aria-label="Toggle topic table of content" aria-controls="wh_topic_toc" aria-expanded="true">
<span class="close-toc-icon-container">
<span class="close-toc-icon"></span>
</span>
</button>
<div class=" wh_topic_content body "><main role="main"><article class="- topic/topic topic" role="article" aria-labelledby="ariaid-title1"><span class="edit-link" style="font-size:12px; opacity:0.6; text-align:right; vertical-align:middle"><a target="_blank" href="http://172.16.35.88/tasks/jdssno1uvvbf2mltu9kb9v3if05d5gopuakboe8hlud18rma/edit/F:/aicdita/aicdita-cn/topics/sdk/ota/ota_introduction_lb.dita">Edit online</a></span><h1 class="- topic/title title topictitle1" id="ariaid-title1">模块介绍</h1><div class="date inPage">11 Dec 2024</div><div style="color: gray;">
Read time: 2 minute(s)
</div><div class="- topic/body body"><p class="- topic/p p" data-ofbid="d61463e17__20250121171521">OTA 是一种通过网络从服务器上下载更新文件,对本地系统或者文件进行升级的升级方式,便于为用户及时更新系统和应用程序。 </p><div class="table-container"><table class="- topic/table table docutils align-default frame-all" id="id__table_u1j_lpw_fdc" data-ofbid="id__table_u1j_lpw_fdc" data-cols="3"><caption></caption><colgroup><col style="width:31.948881789137378%"/><col style="width:31.948881789137378%"/><col style="width:36.10223642172524%"/></colgroup><thead class="- topic/thead thead"><tr class="- topic/row row-odd"><th class="- topic/entry entry head colsep-1 rowsep-1" id="id__table_u1j_lpw_fdc__entry__1">术语</th><th class="- topic/entry entry head colsep-1 rowsep-1" id="id__table_u1j_lpw_fdc__entry__2">定义</th><th class="- topic/entry entry head colsep-0 rowsep-1" id="id__table_u1j_lpw_fdc__entry__3">注释说明</th></tr></thead><tbody class="- topic/tbody tbody"><tr class="- topic/row row-even"><td class="- topic/entry entry colsep-1 rowsep-0" headers="id__table_u1j_lpw_fdc__entry__1">OTA</td><td class="- topic/entry entry colsep-1 rowsep-0" headers="id__table_u1j_lpw_fdc__entry__2">Over The Air</td><td class="- topic/entry entry colsep-0 rowsep-0" headers="id__table_u1j_lpw_fdc__entry__3">远程升级</td></tr></tbody></table></div><section class="- topic/section section" id="id__luban-ota" data-ofbid="id__luban-ota"><h2 class="- topic/title title sectiontitle">Luban OTA 方案介绍</h2>
<p class="- topic/p p" data-ofbid="d61463e45__20250121171521">Luban OTA 系统方案具有如下特点:</p>
<ul class="- topic/ul ul arabic simple" id="id__ol_jqk_lpw_fdc" data-ofbid="id__ol_jqk_lpw_fdc"><li class="- topic/li li" data-ofbid="d61463e49__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e51__20250121171521">基于 <a class="- topic/xref xref" href="ota_introduction_lb.html#id__swupdate">SWUpdate</a> 平台实现,使用 Recovery
系统方案。</p>
</li><li class="- topic/li li" data-ofbid="d61463e58__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e60__20250121171521">程序 kernel 和 Rootfs 称为主系统。</p>
</li><li class="- topic/li li" data-ofbid="d61463e63__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e65__20250121171521">在主系统之外,增加一个 Recovery 系统,包含 kernel 和 initramfs用来对主系统程序进行升级。</p>
</li><li class="- topic/li li" data-ofbid="d61463e68__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e70__20250121171521">为了便于演示,增加 ota 分区,用于保存 OTA 升级包。</p>
<p class="- topic/p p" data-ofbid="d61463e73__20250121171521"><strong class="+ topic/ph hi-d/b ph b">OTA 功能新增分区</strong>如下图所示:</p>
<figure class="- topic/fig fig fignone" id="id__fig_kqk_lpw_fdc" data-ofbid="id__fig_kqk_lpw_fdc"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_lqk_lpw_fdc" src="../../../images/ota/part.png" alt="part"/></div><br/></figure>
<ul class="- topic/ul ul arabic simple" id="id__ol_nqk_lpw_fdc" data-ofbid="id__ol_nqk_lpw_fdc"><li class="- topic/li li" data-ofbid="d61463e84__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e86__20250121171521">黄色代表原始分区</p>
</li><li class="- topic/li li" data-ofbid="d61463e89__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e91__20250121171521">绿色代表新加分区</p>
</li><li class="- topic/li li" data-ofbid="d61463e94__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e96__20250121171521"><code class="+ topic/ph pr-d/codeph ph codeph">recovery 分区</code> 用来存放 Recovery 系统程序</p>
</li><li class="- topic/li li" data-ofbid="d61463e101__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e103__20250121171521"><code class="+ topic/ph pr-d/codeph ph codeph">ota 分区</code> 用来存放 OTA 升级包</p>
</li></ul>
</li></ul>
</section><section class="- topic/section section" id="id__id4" data-ofbid="id__id4"><h2 class="- topic/title title sectiontitle">Luban OTA 升级过程</h2>
<p class="- topic/p p" data-ofbid="d61463e115__20250121171521">Luban OTA 升级过程如下所示:</p><ol class="- topic/ol ol arabic simple" id="id__ol_oqk_lpw_fdc" data-ofbid="id__ol_oqk_lpw_fdc"><li class="- topic/li li" data-ofbid="d61463e118__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e120__20250121171521">主系统升级 Recovery 系统文件Recovery 系统升级主系统文件。</p>
<p class="- topic/p p" data-ofbid="d61463e123__20250121171521">升级脚本文件名称为 <span class="+ topic/ph sw-d/filepath ph filepath">swupdate_cmd.sh</span></p>
</li><li class="- topic/li li" data-ofbid="d61463e129__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e131__20250121171521">主系统升级 Recovery 系统程序、U-Boot 等。</p>
<p class="- topic/p p" data-ofbid="d61463e134__20250121171521">环境变量采用 U-Boot 环境变量。在 U-Boot 启动时,通过环境变量决定启动主系统还是 Recovery 系统。</p>
</li><li class="- topic/li li" data-ofbid="d61463e137__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e139__20250121171521">Recovery 系统升级主系统 kernel、Rootfs、App 等。</p>
<p class="- topic/p p" data-ofbid="d61463e142__20250121171521">一次完整的升级活动,需要重启两次。</p>
</li><li class="- topic/li li" data-ofbid="d61463e145__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e147__20250121171521">升级过程中出现异常掉电,下次启动还能够继续完成剩下的升级过程。</p>
</li></ol><figure class="- topic/fig fig fignone" id="id__fig_pqk_lpw_fdc" data-ofbid="id__fig_pqk_lpw_fdc"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_qqk_lpw_fdc" src="../../../images/ota/ota.png" alt="ota"/></div><br/><figcaption data-caption-side="bottom" class="- topic/title title figcapcenter"><span class="figtitleprefix fig--title-label"><span class="fig--title-label-number"> 1</span><span class="fig--title-label-punctuation">. </span></span><span class="fig--title">Luban OTA 升级示例</span></figcaption></figure>
</section><section class="- topic/section section" id="id__swupdate" data-ofbid="id__swupdate"><h2 class="- topic/title title sectiontitle">SWUpdate 功能介绍</h2>
<ul class="- topic/ul ul simple" id="id__ul_tqk_lpw_fdc" data-ofbid="id__ul_tqk_lpw_fdc"><li class="- topic/li li" data-ofbid="d61463e163__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e165__20250121171521">可以给 eMMC、SD、NOR 和 NAND 等介质升级程序</p>
</li><li class="- topic/li li" data-ofbid="d61463e168__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e170__20250121171521">可以更新 UBI 卷的程序, 重新创建 UBI 卷,建立新的 UBI 卷, 配置分区的大小</p>
</li><li class="- topic/li li" data-ofbid="d61463e173__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e175__20250121171521">支持使用 zlib 库压缩镜像</p>
</li><li class="- topic/li li" data-ofbid="d61463e178__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e180__20250121171521">支持识别和使用 U 盘, 支持本地升级</p>
</li><li class="- topic/li li" data-ofbid="d61463e183__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e185__20250121171521">支持更新文件系统里面的单个文件, 必须指定该文件的路径</p>
</li><li class="- topic/li li" data-ofbid="d61463e188__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e190__20250121171521">使用结构化语言来描述镜像, libconfig 语法</p>
</li><li class="- topic/li li" data-ofbid="d61463e193__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e195__20250121171521">支持设置/删除 U-Boot 变量</p>
</li><li class="- topic/li li" data-ofbid="d61463e198__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e200__20250121171521">多种获取软件的接口, 本地存储: USB,SD,UART,…</p>
</li><li class="- topic/li li" data-ofbid="d61463e203__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e205__20250121171521">OTA/远程, 使用 Mongoose 服务器</p>
</li><li class="- topic/li li" data-ofbid="d61463e208__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e210__20250121171521">通过配置可以检查软件和硬件之间的兼容性</p>
</li><li class="- topic/li li" data-ofbid="d61463e213__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e215__20250121171521">支持镜像提取, SWUpdate 以流的方式接收软件, 不进行临时存储</p>
</li><li class="- topic/li li" data-ofbid="d61463e219__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e221__20250121171521">掉电安全</p>
</li><li class="- topic/li li" data-ofbid="d61463e224__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e226__20250121171521">镜像在升级之前经过身份认证和校验</p>
</li><li class="- topic/li li" data-ofbid="d61463e229__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e231__20250121171521">通过 make menuconfig 进行管理</p>
</li></ul>
<div class="table-container"><table class="- topic/table table docutils align-default frame-all" id="id__table_bd1_k24_hdc" data-ofbid="id__table_bd1_k24_hdc" data-cols="2"><caption class="- topic/title title tablecap" data-caption-side="top" data-is-repeated="true"><span class="table--title-label"><span class="table--title-label-number"> 1</span><span class="table--title-label-punctuation">. </span></span><span class="table--title">SWUpdate 包重要配置描述</span></caption><colgroup><col style="width:46.948356807511736%"/><col style="width:53.051643192488264%"/></colgroup><thead class="- topic/thead thead"><tr class="- topic/row row-odd"><th class="- topic/entry entry head colsep-1 rowsep-1" id="id__table_bd1_k24_hdc__entry__1">文件</th><th class="- topic/entry entry head colsep-0 rowsep-1" id="id__table_bd1_k24_hdc__entry__2">说明</th></tr></thead><tbody class="- topic/tbody tbody"><tr class="- topic/row row-even"><td class="- topic/entry entry colsep-1 rowsep-1" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_UBOOT=y</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="id__table_bd1_k24_hdc__entry__2">支持 U-Boot</td></tr><tr class="- topic/row row-odd"><td class="- topic/entry entry colsep-1 rowsep-1" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_DOWNLOAD=y</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="id__table_bd1_k24_hdc__entry__2">使能通过 libcurl 的方式下载程序</td></tr><tr class="- topic/row row-even"><td class="- topic/entry entry colsep-1 rowsep-1" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_DOWNLOAD_SSL=y</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="id__table_bd1_k24_hdc__entry__2">在使用 libcurl 时使能 ssl 校验</td></tr><tr class="- topic/row row-odd"><td class="- topic/entry entry colsep-1 rowsep-1" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_WEBSERVER=y</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="id__table_bd1_k24_hdc__entry__2">编译 web 服务器, 设备端作为服务器使用</td></tr><tr class="- topic/row row-even"><td class="- topic/entry entry colsep-1 rowsep-1" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_HASH_VERIFY=y</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="id__table_bd1_k24_hdc__entry__2">解析升级包时使能 sha256 校验</td></tr><tr class="- topic/row row-odd"><td class="- topic/entry entry colsep-1 rowsep-1" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_BOOTLOADERHANDLER=y</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="id__table_bd1_k24_hdc__entry__2">在升级过程中允许修改 U-Boot 环境变量</td></tr><tr class="- topic/row row-even"><td class="- topic/entry entry colsep-1 rowsep-1" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_CFI=y</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="id__table_bd1_k24_hdc__entry__2">允许给 flash 烧录程序</td></tr><tr class="- topic/row row-odd"><td class="- topic/entry entry colsep-1 rowsep-1" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_RAW=y</td><td class="- topic/entry entry colsep-0 rowsep-1" headers="id__table_bd1_k24_hdc__entry__2">默认烧录方式, 给 eMMC 使用</td></tr><tr class="- topic/row row-even"><td class="- topic/entry entry colsep-1 rowsep-0" headers="id__table_bd1_k24_hdc__entry__1">CONFIG_SHELLSCRIPTHANDLER=y</td><td class="- topic/entry entry colsep-0 rowsep-0" headers="id__table_bd1_k24_hdc__entry__2">支持 shell 脚本升级 </td></tr></tbody></table></div></section><section class="- topic/section section" id="id__id5" data-ofbid="id__id5"><h2 class="- topic/title title sectiontitle">OTA 升级获取方式</h2>
<p class="- topic/p p" data-ofbid="d61463e298__20250121171521">按照获取 OTA 升级包的方式OTA 可以分为两种情况:</p><ul class="- topic/ul ul simple" id="id__ul_uqk_lpw_fdc" data-ofbid="id__ul_uqk_lpw_fdc"><li class="- topic/li li" data-ofbid="d61463e301__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e303__20250121171521">本地升级</p>
</li><li class="- topic/li li" data-ofbid="d61463e306__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e308__20250121171521">网络升级方式</p>
</li></ul>
<ol class="- topic/ol ol arabic simple" id="id__ol_wqk_lpw_fdc" data-ofbid="id__ol_wqk_lpw_fdc"><li class="- topic/li li" data-ofbid="d61463e313__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e315__20250121171521">Luban 平台配置好了一个 <code class="+ topic/ph pr-d/codeph ph codeph">ota 分区</code>,用来存放 OTA 升级包, 用户可以通过 AiBurn 的方式将 OTA
升级包烧录到具体开发板上, 直接验证 OTA 本地升级功能。</p>
</li><li class="- topic/li li" data-ofbid="d61463e321__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e323__20250121171521">用户如果搭建好了服务器, 并能将服务器上 OTA 升级包下载到本地 <code class="+ topic/ph pr-d/codeph ph codeph">ota 分区</code>,希望通过 Luban OTA
系统实现单独升级功能, 可以直接通过 OTA 本地升级方式实现。</p>
</li><li class="- topic/li li" data-ofbid="d61463e329__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e331__20250121171521">如果本地空间不够, 可以使用 SD 卡U 盘充当本地存储空间,存放 OTA 升级包。</p>
</li><li class="- topic/li li" data-ofbid="d61463e334__20250121171521">
<p class="- topic/p p" data-ofbid="d61463e336__20250121171521">Luban OTA 网络升级方式依赖服务器,用户如果采用网络方案,需要搭建好 HTTP 或 FTP 服务器Luban OTA
系统可以远程获取服务器里面的数据进行升级。</p>
</li></ol></section></div></article></main></div>
</div>
<nav role="navigation" id="wh_topic_toc" aria-label="On this page" class="col-lg-2 d-none d-lg-block navbar d-print-none">
<div id="wh_topic_toc_content">
<div class=" wh_topic_toc "><div class="wh_topic_label">在本页上</div><ul><li class="section-item"><div class="section-title"><a href="#id__luban-ota" data-tocid="id__luban-ota">Luban OTA 方案介绍</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id4" data-tocid="id__id4">Luban OTA 升级过程</a></div></li><li class="section-item"><div class="section-title"><a href="#id__swupdate" data-tocid="id__swupdate">SWUpdate 功能介绍</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id5" data-tocid="id__id5">OTA 升级获取方式</a></div></li></ul></div>
</div>
</nav>
</div>
</div>
</div>
<footer class="navbar navbar-default wh_footer">
<div class=" footer-container mx-auto ">
<title>footer def</title>
<style><!--
.p1 {
font-family: FangZhengShuSong, Times, serif;
}
.p2 {
font-family: Arial, Helvetica, sans-serif;
}
.p3 {
font-family: "Lucida Console", "Courier New", monospace;
}
--></style>
<div class="webhelp.fragment.footer">
<p class="p1">Copyright © 2019-2024 广东匠芯创科技有限公司. All rights reserved.</p>
</div><div>
<div class="generation_time">
Update Time: 2025-01-21
</div>
</div>
</div>
</footer>
<div id="go2top" class="d-print-none">
<span class="oxy-icon oxy-icon-up"></span>
</div>
<div id="modal_img_large" class="modal">
<span class="close oxy-icon oxy-icon-remove"></span>
<div id="modal_img_container"></div>
<div id="caption"></div>
</div>
<script src="${pd}/publishing/publishing-styles-AIC-template/js/custom.js" defer="defer"></script>
</body>
</html>