板卡描述,描述了具体的硬件板卡上存在哪些硬件接口(比如,GPIO接口),以及应用可以操作的内置设备(比如,LED)。板卡描述是 Ruff APP 运行在具体板卡上的基石。
鉴于板卡描述文件通常会比较大,这里只介绍基础结构,请参考 Ruff MBD V1 ,了解一个具体的板卡描述文件如何编写。
前提条件
- 如果还没有了解如何使用 Ruff 编写应用,可以阅读这里。
- 如果你希望在
rap layout --visual
能够正确进行图形化展示,请在软件仓库上传并配置设备信息。参考这里了解如何在软件仓库添加设备。 - 请查看板卡对应的技术手册,确定板卡上的接口类型和内置设备,以及相应的参数。
第一步:创建项目
在待创建项目的目录下,使用 rap
创建项目。注意,这里使用的初始化参数是 board
,它会生成一些板卡相关的配置文件。rap init board
根据提示,填写相应内容,一切顺利的话,一个新的目录就创建出来了,板卡项目就在其中。该命令还会生成 package.json
和 board.json
:
package.json
是软件包相关的配置信息board.json
是板卡描述的相关信息
第二步:声明接口信息
board.json
是这个工程的主要文件,用以描述板卡信息。board.json
的基本结构如下:{
"version": "2.0",
"id": "foo",
"model": "foo",
"devices": [
{
"id": "gpio-0",
"driver": "sys-gpio",
"inputs": {
"pin": {
"type": "number",
"args": {
"pin": 0
}
}
},
"outputs": {
"gpio": {
"type": "gpio"
}
}
}
],
"outputs": {
"gpio-0": "gpio-0/gpio"
}
}
在这个 board.json
里,我们声明了如下一些内容:
version
,这个版本号是board.json
的模式(schema)版本号,当前版本为2.0。id
,该板卡描述的 ID,它是你在创建工程的时候输入的工程名。model
,该板卡的所支持硬件的型号,建议在软件仓库上传设备信息后,将设备型号配置在这里。devices
,描述了板卡上所支持的硬件资源(接口或设备)。outputs
,描述了板卡对外导出的硬件资源,也就是其它外设可以使用的接口。
对于板卡开发者而言,最主要是要确定自己的 devices
和 outputs
。
在这个例子里,我们描述了一个 GPIO 接口:
- 板子上通常会有很多个 GPIO 接口,所以,这里,我们给它的 ID 命名为
gpio-0
。 - 这个 GPIO 接口的驱动是
sys-gpio
,这是由 RuffOS 提供的一个内置驱动。如果你的驱动是一个普通的驱动,需要通过rap install --save
安装后,才可以在这里引用。 - 这个驱动要求指定 GPIO 对应的 PIN,其类型是一个数字,参数是
pin
为 0。 - 它会导出一个 GPIO 接口供其它外设使用,其名字为
gpio
,类型为gpio
,在硬件布局的过程中,会根据这个类型进行匹配。
上面我们定义好了一个接口,接下来,我们在 outputs
里可以定义一个供外部使用的名字:
gpio-0
,它对应的就是gpio-0
导出的名为gpio
的接口。
第三步:板卡测试
在板卡描述文件编写好之后,我们可以编写一个应用测试这个板卡。请参考起步走和应用开发步骤,编写一个测试应用。在创建的应用项目的过程中,需要指定本地板卡项目。mkdir hello-ruff
cd hello-ruff
rap init --local-board /path/to/your_board_project
在编写完应用之后,可以将应用部署到硬件板卡上进行测试,Ruff 移植过程请参考RuffOS 移植指南。
对板卡而言,最主要的测试是关注这个板卡是否能够支持其它外设的接入,这个过程主要由硬件布局检测,运行如下命令:rap layout
如果这个过程能够正常执行,说明你的板卡信息配置就成功了。
扩展步骤:发布驱动
经过开发和硬件测试,板卡的开发已经完成。如果想将这个板卡信息分享给别人,可以把驱动发布到软件包仓库。如果还没有申请软件包仓库的账号,请这里申请账号。
注意 如果你希望在rap layout --visual
能够正确进行图形化展示,请在软件仓库上传并配置设备信息。
在命令行里运行如下命令:rap publish
一切顺利的话,你已经完成了一个板卡的开发,并将其发布出去。恭喜你,你已经成为了一个合格的板卡开发工程师。
下一步
想进一步了解 Ruff 板卡开发,请查看 Ruff 板卡描述文件。