使用west工具的帮助命令,west -h,不仅可以列出west工具的内置命令,也可以列举当前工程中实现的扩展命令,如build,flash等。
本文将介绍如何添加扩展命令。
west扩展命令的位置通过以下方式查找:
1. 首先找到工程中.west目录的config文件,打开config,查看以下两个值:
1)path参数的值,默认为zephyr。
2)file参数的值,默认为west.yml。
[manifest]
path = zephyr
file = west.yml[zephyr]
base = zephyr
2)根据path参数和file参数的值,找到对应的文件,默认为zephyr/west.yml。
在west.yml文件中,可以看到以下配置,即west扩展命令在scripts/west-commands.yml文件中定义。
self:path: zephyrwest-commands: scripts/west-commands.ymlimport: submanifests
3)如下代码所示,west-commands.yml文件中列举了当前工程支持的扩展命令,以及每个扩展命令的名称和对应的python文件。
# Keep the help strings in sync with the values in the .py files!
west-commands:- file: scripts/west_commands/completion.pycommands:- name: completionclass: Completionhelp: output shell completion scripts- file: scripts/west_commands/boards.pycommands:- name: boardsclass: Boardshelp: display information about supported boards- file: scripts/west_commands/build.pycommands:- name: buildclass: Buildhelp: compile a Zephyr application
接下来,可以按照以下步骤添加一个新的扩展命令。
1)在west-commands.yml文件中添加一个新的命令。命名为new_cmd,对应的python文件为new_cmd_file.py。
注:file,name,class,help可以根据需要添加任意名称和字符串。
# Keep the help strings in sync with the values in the .py files!
west-commands:- file: scripts/west_commands/new_cmd_file.pycommands:- name: new_cmdclass: new_cmd_classhelp: this is a new command- file: scripts/west_commands/completion.pycommands:- name: completionclass: Completionhelp: output shell completion scripts- file: scripts/west_commands/boards.pycommands:- name: boardsclass: Boardshelp: display information about supported boards
2)在west_commands目录中添加west-commands.yml文件中定义的文件new_cmd_file.py。
其中,class应该与west-commands.yml文件中定义的class一致。此外,需要实现do_add_parser和do_run函数,这两个函数将在执行west扩展命令时自动被调用。
import argparse
from zephyr_ext_common import ForceableUSAGE = '''\
This is new command USAGE.
'''DESCRIPTION = f'''\
This is new command DESCRIPTION.
'''class new_cmd_class(Forceable):def __init__(self):super(new_cmd_class, self).__init__('new_cmd',# Keep this in sync with the string in west-commands.yml.'this is a new command',DESCRIPTION,accepts_unknown_args=True)print("__init__ function of new command!")def do_add_parser(self, parser_adder):parser = parser_adder.add_parser(self.name,help=self.help,formatter_class=argparse.RawDescriptionHelpFormatter,description=self.description,usage=USAGE)print("do_add_parser function of new command!")return parserdef do_run(self, args, remainder):print("do_run function of new command!")
通过west -h帮助命令查看以上扩展命令是否成功添加。可以看出,扩展命令中已经包含new_cmd命令。
执行扩展命令,west new_cmd,如下log所示,__init__函数,do_add_parser函数和do_run函数依次被调用。
通过以上步骤,新的扩展命令已经添加完成,接下来可以根据需求进一步开发,完善扩展命令。