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

341 lines
38 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="设计目标 Luban-Lite 的设计规划旨在提供一个简单易用,且能够满足广泛用户需求的解决方案,同时要确保对主流实时系统的支持。 Luban-Lite 具有以下设计优势和特点: 兼容多种市面上最流行的 RTOS 内核,包括 RT-Thread、FreeRTOS 等 支持 baremetal 模式 提供完整的软件栈生态资源 设计框架 根据是否使用 OS Luban-Lite SDK ..."/><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.relation" content="../../../topics/sdk/advanced/sdk-usage.html"/><meta name="DC.relation" content="../../../topics/sdk/advanced/onestep_command_ref.html"/><meta name="DC.relation" content="../../../topics/sdk/advanced/sconstruct.html"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.contributor" content="User"/><meta name="DC.date.modified" content="2024-01-15"/><meta name="DC.format" content="HTML5"/><meta name="DC.identifier" content="id"/><meta name="DC.language" content="zh-CN"/><title>设计框架</title><!-- Build number 2023110923. --><meta name="wh-path2root" content="../../../"/><meta name="wh-toc-id" content="id-d5856e1207"/><meta name="wh-source-relpath" content="topics/sdk/advanced/architecture.dita"/><meta name="wh-out-relpath" content="topics/sdk/advanced/architecture.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 "><ol class="d-print-none"><li><span class="home"><a href="../../../index.html"><span>主页</span></a></span></li><li><div class="topicref" data-id="id"><div class="title"><a href="../../../topics/sdk/advanced/sdk-usage.html">使用指南</a><div class="wh-tooltip"><p class="shortdesc">系统镜像、编译选项、开发板、应用等相关的详细使用说明。</p></div></div></div></li><li class="active"><div class="topicref" data-id="id"><div class="title"><a href="../../../topics/sdk/advanced/architecture.html">设计框架</a></div></div></li></ol></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_navigation_links "><span id="topic_navigation_links" class="navheader">
<span class="navprev"><a class="- topic/link link" href="../../../topics/sdk/advanced/onestep_command_ref.html" title="OneStep 命令参考指南" aria-label="上一主题: OneStep 命令参考指南" rel="prev"></a></span>
<span class="navnext"><a class="- topic/link link" href="../../../topics/sdk/advanced/sconstruct.html" title="SConstruct" aria-label="下一主题: SConstruct" rel="next"></a></span> </span></div>
<div class=" wh_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="打印此页" aria-label="打印此页"></button></div>
<button type="button" id="wh_toc_button" class="custom-toggler navbar-toggler collapsed wh_toggle_button navbar-light" aria-expanded="false" aria-label="Toggle publishing table of content" aria-controls="wh_publication_toc">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>
</div>
<div class="wh_content_area">
<div class="row">
<nav id="wh_publication_toc" class="col-lg-3 col-md-3 col-sm-12 d-md-block d-none d-print-none" aria-label="Table of Contents Container">
<div id="wh_publication_toc_content">
<div class=" wh_publication_toc " data-tooltip-position="right"><span class="expand-button-action-labels"><span id="button-expand-action" role="button" aria-label="Expand"></span><span id="button-collapse-action" role="button" aria-label="Collapse"></span><span id="button-pending-action" role="button" aria-label="Pending"></span></span><ul role="tree" aria-label="Table of Contents"><li role="treeitem"><div data-tocid="revinfo_linux-d5856e989" class="topicref" data-id="revinfo_linux" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/revinfo/revinfo_rtos.html" id="revinfo_linux-d5856e989-link">修订记录</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e1003" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e1003-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/env/sdk-compile.html" id="id-d5856e1003-link">SDK 编译</a><div class="wh-tooltip"><p class="shortdesc">介绍不同编译环境下 SDK 的详细编译流程。</p></div></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="id-d5856e1152" class="topicref" data-id="id" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action id-d5856e1152-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/sdk-usage.html" id="id-d5856e1152-link">使用指南</a><div class="wh-tooltip"><p class="shortdesc">系统镜像、编译选项、开发板、应用等相关的详细使用说明。</p></div></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e1169" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e1169-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/commands.html" id="id-d5856e1169-link">命令详解 </a></div></div></li><li role="treeitem" class="active"><div data-tocid="id-d5856e1207" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/architecture.html" id="id-d5856e1207-link">设计框架</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1219" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/sconstruct.html" id="id-d5856e1219-link">SConstruct </a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1231" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/compile.html" id="id-d5856e1231-link">编译选项介绍</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1243" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/partition.html" id="id-d5856e1243-link">配置分区</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e1255" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e1255-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/image_burn_and_config.html" id="id-d5856e1255-link">配置烧录镜像</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1339" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/gdb.html" id="id-d5856e1339-link">GDB 调试</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1353" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/pinmux.html" id="id-d5856e1353-link">引脚配置</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1367" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/driver.html" id="id-d5856e1367-link">添加驱动</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1379" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/app.html" id="id-d5856e1379-link">添加应用</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1392" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/hellowold.html" id="id-d5856e1392-link">hellowold</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e1404" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/burnin_test.html" id="id-d5856e1404-link">烤机测试</a></div></div></li></ul></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_rcx_czh_pzb-d5856e1416" class="topicref" data-id="concept_rcx_czh_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_rcx_czh_pzb-d5856e1416-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/chapter-app.html" id="concept_rcx_czh_pzb-d5856e1416-link">应用场景</a><div class="wh-tooltip"><p class="shortdesc">描述了 SDK 在不同应用场景中的配置和使用包括系统更新、OTA、安全方案等。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e2119" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e2119-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/peripheral/peripheral-intro.html" id="id-d5856e2119-link">外设移植</a><div class="wh-tooltip"><p class="shortdesc"><span class="ph">CTP、U 盘、SD 卡、有线和无线网络</span>等外设的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e2244" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e2244-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/bringup/chapter-bringup.html" id="id-d5856e2244-link">BringUp</a><div class="wh-tooltip"><p class="shortdesc">在硬件上电后快速初始化系统,为操作系统的启动准备好必要的硬件环境。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e2345" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e2345-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/chapter-advanced-app.html" id="id-d5856e2345-link">高级应用</a><div class="wh-tooltip"><p class="shortdesc">系统、存储、多媒体、接口、安全等模块的详细配置和设计说明。</p></div></div></div></li></ul></div>
</div>
</nav>
<div class="col-lg-7 col-md-9 col-sm-12" id="wh_topic_body">
<button id="wh_close_publication_toc_button" class="close-toc-button d-none" aria-label="Toggle publishing table of content" aria-controls="wh_publication_toc" aria-expanded="true">
<span class="close-toc-icon-container">
<span class="close-toc-icon"></span>
</span>
</button>
<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/advanced/architecture.dita">Edit online</a></span><h1 class="- topic/title title topictitle1" id="ariaid-title1">设计框架</h1><div class="date inPage">15 Jan 2024</div><div style="color: gray;">
Read time: 3 minute(s)
</div><div class="- topic/body body"><section class="- topic/section section" id="id__id2" data-ofbid="id__id2"><h2 class="- topic/title title sectiontitle">设计目标</h2>
<p class="- topic/p p" data-ofbid="d81690e33__20250121171526"><span class="- topic/ph ph">Luban-Lite</span>
的设计规划旨在提供一个简单易用,且能够满足广泛用户需求的解决方案,同时要确保对主流实时系统的支持。<span class="- topic/ph ph">Luban-Lite</span>
具有以下设计优势和特点:</p>
<ul class="- topic/ul ul simple" id="id__ul_t42_y5p_wcc" data-ofbid="id__ul_t42_y5p_wcc"><li class="- topic/li li" data-ofbid="d81690e42__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e44__20250121171526">兼容多种市面上最流行的
RTOS
内核,包括 RT-Thread、FreeRTOS
</p>
</li><li class="- topic/li li" data-ofbid="d81690e47__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e49__20250121171526">支持
baremetal
模式</p>
</li><li class="- topic/li li" data-ofbid="d81690e52__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e54__20250121171526">提供完整的软件栈生态资源</p>
</li></ul>
</section><section class="- topic/section section" id="id__id3" data-ofbid="id__id3"><h2 class="- topic/title title sectiontitle">设计框架</h2>
<p class="- topic/p p" data-ofbid="d81690e66__20250121171526">根据是否使用
OS<span class="- topic/ph ph">Luban-Lite</span> SDK 架构分为两种情况:</p>
<div class="- topic/div div section" id="id__rtos"><strong class="+ topic/ph hi-d/b ph b">RTOS</strong>
<p class="- topic/p p" data-ofbid="d81690e76__20250121171526">在使用操作系统的情况下,<span class="- topic/ph ph">Luban-Lite</span> SDK 则能够在 RTOS 环境下运行。通过在 RT-Thread Kernel 的基础上进行封装,<span class="- topic/ph ph">Luban-Lite</span> 能够兼容 RT-Thread 和 Free-RTOS 两种实时操作系统的
API</p><figure class="- topic/fig fig fignone" data-ofbid="d81690e84__20250121171526"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_u42_y5p_wcc" src="../../../images/sdk/lbl_os_framework.png" width="480" alt="lbl_os_framework"/></div><br/></figure>
</div>
<div class="- topic/div div section" id="id__baremetal"><strong class="+ topic/ph hi-d/b ph b">Baremetal</strong>
<p class="- topic/p p" data-ofbid="d81690e96__20250121171526">在不使用操作系统的情况下,<span class="- topic/ph ph">Luban-Lite</span> SDK 支持 baremetal
模式,允许开发者在没有操作系统的环境中运行应用程序。</p><figure class="- topic/fig fig fignone" data-ofbid="d81690e101__20250121171526"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_v42_y5p_wcc" src="../../../images/sdk/lbl_baremetal_framework1.png" width="480" alt="lbl_baremetal_framework1"/></div><br/></figure>
</div>
</section><section class="- topic/section section" id="id__id4" data-ofbid="id__id4"><h2 class="- topic/title title sectiontitle">四级抽象模型</h2>
<p class="- topic/p p" data-ofbid="d81690e114__20250121171526"><span class="- topic/ph ph">Luban-Lite</span>
是一个多维抽象模型的跨平台
SDK包括软、硬件平台支持多种应用场景并能处理以下多种复杂映射关系</p>
<ul class="- topic/ul ul simple" id="id__ul_w42_y5p_wcc" data-ofbid="id__ul_w42_y5p_wcc"><li class="- topic/li li" data-ofbid="d81690e120__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e122__20250121171526">多个 SoC
芯片,需要进行驱动和设备的分离、驱动实例化等操作。</p>
</li><li class="- topic/li li" data-ofbid="d81690e125__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e127__20250121171526">多块单板每块板子的外设、IO、性能配置都有所不同。</p>
</li><li class="- topic/li li" data-ofbid="d81690e130__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e132__20250121171526">多种应用,一块板子可能支持多个应用运行。</p>
</li><li class="- topic/li li" data-ofbid="d81690e135__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e137__20250121171526">若干组件,驱动、组件、应用的对应存在一对多的依赖关系。</p>
</li></ul>
<p class="- topic/p p" data-ofbid="d81690e141__20250121171526">总体上,以上元素交织在一起,形成了复杂的
<em class="+ topic/ph hi-d/i ph i">N x N x N
</em> 的多对多组合关系。</p>
<p class="- topic/p p" data-ofbid="d81690e151__20250121171526">在满足以上复杂映射关系的基础上,<span class="- topic/ph ph">Luban-Lite</span> SDK
的设计具有以下易用性特点:</p>
<ul class="- topic/ul ul simple" id="id__ul_x42_y5p_wcc" data-ofbid="id__ul_x42_y5p_wcc"><li class="- topic/li li" data-ofbid="d81690e159__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e161__20250121171526">用高内聚提供复用:减少代码冗余,减少维护工作量</p>
</li><li class="- topic/li li" data-ofbid="d81690e164__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e166__20250121171526">用低耦合应对变化:针对特定方案可灵活配置,满足多元化使用场景</p>
</li></ul>
<p class="- topic/p p" data-ofbid="d81690e170__20250121171526"><span class="- topic/ph ph">Luban-Lite</span> SDK
框架可抽象为以下四个层级的元素,各层级与配置文件的对应关系如下图所示:</p>
<figure class="- topic/fig fig fignone" data-ofbid="d81690e179__20250121171526"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_y42_y5p_wcc" src="../../../images/sdk/lbl_element1.png" width="576" alt="lbl_element1"/></div><br/></figure>
<p class="- topic/p p" data-ofbid="d81690e186__20250121171526">在具体的 <span class="- topic/ph ph">Luban-Lite</span> 设计中,从用户角度看,以上四级基本元素和
SDK
目录的对应关系如下图:</p>
<figure class="- topic/fig fig fignone" data-ofbid="d81690e192__20250121171526"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_z42_y5p_wcc" src="../../../images/sdk/lbl_prj_struct1.png" width="576" alt="lbl_prj_struct1"/></div><br/></figure>
</section><section class="- topic/section section" id="id__id5" data-ofbid="id__id5"><h2 class="- topic/title title sectiontitle">编译框架</h2>
<div class="- topic/p p" data-ofbid="d81690e202__20250121171526"><span class="- topic/ph ph">Luban-Lite</span> SDK 采用了 SCons 作为编译框架的底层语言,提供了灵活的编译支持,覆盖以下三种主要场景:<div class="- topic/note note note note_note" id="id__note_q5j_pjd_scc" data-ofbid="id__note_q5j_pjd_scc"><span class="note__title">注:</span> 关于 SCons 的详细使用说明,可参考 <a class="- topic/xref xref" href="sconstruct.html">SConstruct</a></div><ul class="- topic/ul ul" id="id__ul_ap2_y5p_wcc" data-ofbid="id__ul_ap2_y5p_wcc"><li class="- topic/li li" data-ofbid="d81690e213__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e215__20250121171526">Linux 命令行:开发者可以在 Linux 环境中通过命令行执行 SCons 脚本来配置和编译项目。</p>
</li><li class="- topic/li li" data-ofbid="d81690e218__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e220__20250121171526">Windows 命令行:在 Windows 操作系统下,通过 CMD 或 Git-bash以及 RT-Thread env 环境,使用
SCons 命令进行项目的构建和编译。</p>
</li><li class="- topic/li li" data-ofbid="d81690e223__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e225__20250121171526">Windows IDE对于习惯在集成开发环境 (IDE) 中工作的开发者,可在 Windows IDE 中集成
SCons以实现可视化的编译流程。</p>
</li></ul></div>
<p class="- topic/p p" data-ofbid="d81690e229__20250121171526"><span class="- topic/ph ph">Luban-Lite</span>
编译框架使用了以下树形结构的层次化引用:</p>
<figure class="- topic/fig fig fignone" data-ofbid="d81690e234__20250121171526"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_bp2_y5p_wcc" src="../../../images/sdk/lbl_build_struct1.png" width="576" alt="lbl_build_struct1"/></div><br/></figure>
</section><section class="- topic/section section" id="id__id6" data-ofbid="id__id6"><h2 class="- topic/title title sectiontitle">配置框架</h2>
<div class="- topic/p p" data-ofbid="d81690e244__20250121171526"><span class="- topic/ph ph">Luban-Lite</span> SDK
采用
menuconfig 工具来进行配置,提升用户修改配置的易用性和简洁性。<figure class="- topic/fig fig fignone" data-ofbid="d81690e248__20250121171526"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_eq1_312_scc" src="../../../images/sdk/lbl_kconfig_struct1.png" width="576" alt="lbl_kconfig_struct1"/></div><br/></figure></div>
<div class="- topic/p p" data-ofbid="d81690e255__20250121171526"><span class="+ topic/keyword sw-d/cmdname keyword cmdname">menuconfig</span> 配置框架使用树形结构进行层次化引用。配置选项清晰、逻辑分明,并且易于用户理解和操作。<ol class="- topic/ol ol" data-ofbid="d81690e259__20250121171526"><li class="- topic/li li" data-ofbid="d81690e260__20250121171526"><span class="- topic/ph ph">Luban-Lite</span> 下,一个 <span class="+ topic/ph sw-d/filepath ph filepath">.config</span> 文件可同时保存 Driver 和
Device 配置信息。这种涉及简化了配置文件的管理,并使得维护更为集中和方便。</li><li class="- topic/li li" data-ofbid="d81690e268__20250121171526">
Kconfig
的分区设计中,每个模块的
<span class="+ topic/ph sw-d/filepath ph filepath">Kconfig</span>
被细分成两个部分:<ul class="- topic/ul ul simple" id="id__ul_fyc_m12_scc" data-ofbid="id__ul_fyc_m12_scc"><li class="- topic/li li" data-ofbid="d81690e280__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e282__20250121171526"><span class="+ topic/ph sw-d/filepath ph filepath">Kconfig.dev</span>,存放 Device 相关的配置参数,比如 UART
模块的波特率、停止位参数。</p>
</li><li class="- topic/li li" data-ofbid="d81690e287__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e289__20250121171526"><span class="+ topic/ph sw-d/filepath ph filepath">Kconfig.drv</span>,存放 Driver 的通用配置参数,比如 UART 模块的
DMA 开关。</p>
</li></ul></li></ol></div>
<p class="- topic/p p" data-ofbid="d81690e295__20250121171526">关于 menuconfig 命令工具的详细描述,可查看 <a class="- topic/xref xref" href="menuconfig_user_guide.html">menuconfig 命令工具参考指南</a></p>
</section><section class="- topic/section section" id="id__id7" data-ofbid="id__id7"><h2 class="- topic/title title sectiontitle">驱动框架</h2>
<div class="- topic/p p" data-ofbid="d81690e307__20250121171526">为了简化开发流程并提高代码复用性AIC Driver 驱动框架分为以下层次,以适应不同的硬件和应用场景:<ul class="- topic/ul ul simple" id="id__ul_gp2_y5p_wcc" data-ofbid="id__ul_gp2_y5p_wcc"><li class="- topic/li li" data-ofbid="d81690e310__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e312__20250121171526">RT-Thread Driver
Framework实现由
RT-Thread 提供的驱动模型的功能。</p>
</li><li class="- topic/li li" data-ofbid="d81690e318__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e320__20250121171526">AIC Driver
Layer
RT-Thread Driver Framework 的具体实现层,负责将 RT-Thread 的标准接口转换为 AIC HAL Layer
可以理解的接口。通过转换,确保了上层应用和底层硬件之间的独立性,使得开发者在不修改硬件相关代码的情况下,可以通过修改这一层的实现来适配不同的硬件。</p>
</li><li class="- topic/li li" data-ofbid="d81690e327__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e329__20250121171526">AIC HAL
Layer对底层硬件操作的封装一般是寄存器级别的功能接口为上层提供了统一的硬件访问接口。除了用于正常的设备驱动之外这一层还被用于
baremetal 模式的 APP 调用,即在没有操作系统的情况下直接运行应用程序。</p>
</li></ul></div>
<div class="- topic/sectiondiv sectiondiv"><strong class="+ topic/ph hi-d/b ph b">驱动复用和移植注意事项</strong><p class="- topic/p p" data-ofbid="d81690e336__20250121171526">在移植一个新的设备驱动时,开发工作主要涉及 AIC Driver Layer 和 AIC HAL
Layer。</p></div>
<div class="- topic/p p" data-ofbid="d81690e339__20250121171526">为了确保驱动可以在多种形态下复用并最大程度地提高可移植性与维护性,需要遵循以下关键原则和建议:<ul class="- topic/ul ul simple" id="id__ul_hp2_y5p_wcc" data-ofbid="id__ul_hp2_y5p_wcc"><li class="- topic/li li" data-ofbid="d81690e342__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e344__20250121171526">使用 AIC OSAL 接口</p>
<p class="- topic/p p" data-ofbid="d81690e347__20250121171526">在 AIC Driver Layer 和 AIC HAL Layer 中,应尽可能使用 AIC OSAL 接口,避免直接调用特定的 Kernel
接口。这有助于减少对特定操作系统的依赖,从而提高代码的泛用性和可移植性。</p>
</li><li class="- topic/li li" data-ofbid="d81690e350__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e352__20250121171526">避免直接调用 RT-Thread 系统接口</p>
<p class="- topic/p p" data-ofbid="d81690e355__20250121171526">除了驱动注册不可避免的需要调用 RT-Thread 接口外AIC Driver Layer 中应避免直接调用 RT-Thread 系统接口和
RT-Thread 的相关类型定义。这种操作可以保持驱动与操作系统之间的独立性,使得驱动更容易在其他操作系统上重用。</p>
</li><li class="- topic/li li" data-ofbid="d81690e358__20250121171526">
<p class="- topic/p p" data-ofbid="d81690e360__20250121171526">集中管理中断和同步机制</p>
<p class="- topic/p p" data-ofbid="d81690e363__20250121171526">对于中断注册和互斥锁、信号量的操作,应尽可能放在 AIC Driver Layer 中处理,避免放在 AIC HAL Layer
中。这种处理方式有利于上层统一管理资源的同步和并发控制,同时也更加符合分层设计的原则,提高了代码的模块化和可读性。</p>
</li></ul></div>
</section><section class="- topic/section section" id="id__id8" data-ofbid="id__id8"><h2 class="- topic/title title sectiontitle">驱动调试</h2>
<p class="- topic/p p" data-ofbid="d81690e372__20250121171526">在 menuconfig 中ArtInChip 的每个驱动都设置了 DEBUG 开关,用于打开相应模块的调试信息或者调试命令。</p>
<p class="- topic/p p" data-ofbid="d81690e375__20250121171526">DEBUG
开关统一放置在同一个区域,便于用户查找和使用。如需在
menuconfig
中启用测试代码,可遵循以下配置步骤:</p>
<figure class="- topic/fig fig fignone" data-ofbid="d81690e380__20250121171526"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_ip2_y5p_wcc" src="../../../images/sdk/driver_debug1.png" width="384" alt="driver_debug"/></div><br/></figure>
</section><section class="- topic/section section" id="id__id9" data-ofbid="id__id9"><h2 class="- topic/title title sectiontitle">驱动测试</h2>
<p class="- topic/p p" data-ofbid="d81690e390__20250121171526">ArtInChip 在 <span class="+ topic/ph sw-d/filepath ph filepath">bsp/examples/</span>
目录中实现了部分驱动的示例代码,可以作为模块的测试代码和应用开发设计参考样本。</p>
<p class="- topic/p p" data-ofbid="d81690e398__20250121171526">ArtInChip 预设的示例代码,通常封装为特定的 Shell 命令,可在系统启动后通过输入 Shell 命令的方式来触发预定的代码。如需在 menuconfig
中启用测试代码,可遵循以下配置步骤:</p>
<figure class="- topic/fig fig fignone" data-ofbid="d81690e402__20250121171526"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_jp2_y5p_wcc" src="../../../images/sdk/driver_test1.png" width="384" alt="driver_test"/></div><br/></figure>
</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__id2" data-tocid="id__id2">设计目标</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id3" data-tocid="id__id3">设计框架</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id4" data-tocid="id__id4">四级抽象模型</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id5" data-tocid="id__id5">编译框架</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id6" data-tocid="id__id6">配置框架</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id7" data-tocid="id__id7">驱动框架</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id8" data-tocid="id__id8">驱动调试</a></div></li><li class="section-item"><div class="section-title"><a href="#id__id9" data-tocid="id__id9">驱动测试</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>