本文已参与「新人创作礼」活动.一起开启掘金创作之路。
PDSC文件时基于可扩展标记语言(XML)进行编写的,能够将软件包包含的各个模块按照特定的格式组织起来,接下来按照PDSC文件的结构对文件的编写进行详细介绍:
首先是PDSC文件的开头,前两句是声明为XML格式,它是在MDK中的PACK.xsd文件定义的,所以不用修改;< name>和< vendor>标签定义了软件包的基本内容,也用于PACK文件的文件名,故该PDSC文件应命名为Tencent.TencentOS-tiny.pdsc;< description >标签描述了软件包的信息,它将显示在包安装程序中;< url>标签可以包含一个带有软件包下载链接的网址,方便用户下载;< license >标签包含了用户使用该软件包时需要遵守的协议,< supportContact >标签表示软件包的支持人员联系方式,可以提供一个电子邮件地址或网页URL。如图1.2为下列代码对应的软件包界面。
<?xml version="1.0" encoding="utf-8"?>
<package schemaVersion="1.0" xmlns:xs=<http://www.w3.org/2001/XMLSchema-instance> xs:noNamespaceSchemaLocation="PACK.xsd">
<name>Tencent</name>
<[description]()>Description of your pack</description>
<vendor>TencentOS-tiny</vendor>
<url>[https://github.com/OpenAtomFoundation/TencentOS-tiny</url](https://github.com/OpenAtomFoundation/TencentOS-tiny%3c/url)>
<license>LICENSE.txt</license>
<supportContact>…</supportContact>
接下来是PDSC文件的各个模块,< releases>标签定义了软件包的版本,开发者可以在版本更新时在此进行标注,从而在生成软件包时,系统会自动生成最新版本的软件包;
<releases>
<release version= **"1.0.1"** >
Sep/3/2021, version name
</release>
<release version= **"1.0.0"** >
Sep/1/2021, version name
</release>
</releases>
< taxonomy>标签用于定义每个组件的description,如图1.3所示,通过下列代码中的Cclass、Cgroup和Csub来确定description所在的位置,doc用于指定description文件(也可以不加),然后添加description的名字。
<taxonomy>
<description Cclass="TencentOS tiny" Cgroup="xx" Csub="xx" [doc]()="examples/index.html">TencentOS tiny</description> <!—添加网页功能 -->
</taxonomy>
< keywords >标签定义了软件包的关键词,在ARM官网下载软件包时可利用关键词搜索到需要的软件包。
<keywords >
<keyword>Tencent</keyword>
</keywords >
< requirements >标签定义了软件包的关联安装需求,即在安装本软件包时,还需要在网上安装其他包(网址:MDK5 Software Packs (keil.com)),例如下面的定义则需要我们安装ARM的CMSIS5.7.0软件包。
<requirements>
<packages>
<package vendor="ARM" name="CMSIS" version="5.7.0"/>
</packages>
</requirements>
接下来是< conditions>标签,该标签在设计< components>时使用,用以说明软件包中各个组件的依赖关系,即使用本组件还需要选择其他组件。在该标签下可以定义多个condition,每个condition可以定义多个条件。其中< conditions id>表示条件名,< description>为条件信息,然后便是定义的条件,其中< accept>表示该条件时可选的,当同时存在多个< accept>时,用户需要至少满足其中一个条件才可以使用;< require>表示该条件是必选的,否则便无法使用相应的组件。在条件内部,包含一些特定的指示性语法,如果在设计< component>的时候开发者选择了名为Cortex_M0的条件,那么用户在使用该< component>时,则需要遵守条件要求:其中< accept Dvendor="ARM:82" Dname="ARMCM0"/>表示用户选择ARM-Cortex M0内核时才会触发该条件,< require condition="condition id "/>为条件嵌套,表示用户还需要满足嵌套条件对应的要求,< require Cclass="TencentOS tiny" Cgroup="kernel" Csub="core"/>表示用户还需要选择core组件。
<conditions>
<condition id="Cortex_M0">
<description> Cortex-M0</description>
<accept Dvendor="ARM:82" Dname="ARMCM0"/>
<require condition="condition id "/>
< require Tcompiler="ARMCC"/>
<require Cclass="TencentOS tiny" Cgroup="kernel" Csub="core"/>
</condition>
<condition id=" condition_2 ">
<description></description>
<!-- 第二个condition的内容 -->
</condition>
</conditions>
然后是< components>标签,该标签描述了软件包包含的所有文件,在编写该标签下的程序时,需要按照文件类别将文件进行划分,在下列代码中,定义了一个Keil:: TencentOS tiny:: arch::arch的< component>,< description>为该组件的信息,具体如图1.4所示。
<component Cvendor="Keil" Cclass="TencentOS tiny" Cgroup="arch" Csub="arch" Cversion="1.0.1" condition=" condition id">
<description> description </description>
<files>
<file category="doc" name="Documentation/General/html/driver_I2C.html"/>-->
<file category="include" name="arch/arm/arm-v7m/common/include/"/>
<file category="header" name="arch/arm/arm-v7m/cortex-m0+/armcc/port.h"/>
<file category="header" name="arch/arm/arm-v7m/cortex-m0+/armcc/port_config.h" attr="config"
version="1.1.0"/>
<file category="source" name="arch/arm/arm-v7m/common/tos_cpu.c"/>
</files>
</component>
</components>
condition=" condition id"即为上述介绍的 < condition > 标签,从而用户在使用该组件时,还需要满足condition所要求的依赖组件。另外,在定义某一个< component>时,需要按照上面程序的 < files> …< /files>语法进行文件添加,其中file category的定义如表1-1所示,在name中可以添加文件路径和具体的某个文件,在软件包中,我们添加的文件默认是不可编辑的,为了方便用户对文件进行进行配置,我们需要添加attr="config"属性,并可通过version更新不同版本的文件。