Next-Flip/Momentum-Firmware应用清单(FAM)详解

Next-Flip/Momentum-Firmware应用清单(FAM)详解

Momentum-Firmware Momentum-Firmware 项目地址: https://gitcode.com/gh_mirrors/mo/Momentum-Firmware

什么是FAM文件

在Next-Flip/Momentum-Firmware项目中,FAM(Flipper App Manifests)文件是定义固件组件属性的核心配置文件。每个组件(包括服务、用户应用和系统设置)都拥有自己的application.fam文件,它描述了组件的基本特性以及与其他系统部分的关系。

FAM文件的作用机制

当构建固件时,构建工具会收集所有应用清单文件并处理它们的依赖关系。然后仅构建当前构建配置中引用的那些组件。这种机制实现了模块化开发,允许开发者只关注自己负责的组件。

应用定义详解

每个固件组件的属性都是通过Python代码片段声明的,这些代码会调用App()函数并传入各种参数。下面我们详细解析这些参数。

必需参数

  1. appid: 字符串类型,表示在构建系统中的应用ID。它用于指定要包含在构建配置中的应用程序,并解析依赖关系和冲突。

  2. apptype: 属于FlipperAppType枚举的成员,定义了应用的类型。有效值包括:

| 枚举成员 | 描述 | |-------------|----------------------------------------------------------------------| | SERVICE | 系统服务,在系统启动早期创建 | | SYSTEM | 不会显示在任何菜单中的应用程序,可由其他应用或CLI启动 | | APP | 主菜单中的常规应用 | | PLUGIN | 作为固件一部分构建并放置在插件菜单中的应用 | | DEBUG | 仅在调试模式启用时可见于调试菜单的应用 | | ARCHIVE | 唯一的存档应用 | | SETTINGS | 放置在系统设置菜单中的应用 | | STARTUP | 系统启动时运行的回调函数,不定义单独的应用 | | EXTERNAL | 构建为.fap插件的应用 | | METAPACKAGE | 不定义任何运行代码,用于声明依赖项和应用包 |

可选参数

  1. name: 在菜单中显示的名称。

  2. entry_point: 用作应用入口点的C函数。注意C++函数名会被修饰,因此需要使用extern "C"包装才能作为入口点使用。

  3. stack_size: 为应用启动时分配的堆栈大小(字节)。分配过小会导致堆栈溢出,分配过大会减少可用堆内存。

  4. icon: 从内置资源中使用的动画图标名称,当应用作为固件一部分构建时使用。

  5. order: 应用在其组中的排序顺序,数值越小位置越靠前。

  6. sdk_headers: 该应用代码中的C头文件列表,用于包含在外部应用的API定义中。

  7. targets: 应用兼容的目标名称列表。如果未指定,则默认为所有目标构建。

  8. resources: 应用源文件夹中的资源文件夹名称,用于打包该应用的SD卡资源。

外部应用专用参数

对于构建为.fap插件的外部应用,还有一些特殊参数:

  1. sources: 用于收集应用文件夹内源文件的文件名模式列表。

  2. fap_version: 应用版本字符串,默认为"0.1"。

  3. fap_icon: 嵌入.fap文件的10x10像素1位色深PNG图标文件名。

  4. fap_libs: 链接应用所需的额外库列表。

  5. fap_category: 应用子类别,也决定了文件系统中FAP的路径。

  6. fap_description: 简短的应用描述。

  7. fap_author: 应用作者。

  8. fap_weburl: 应用主页。

高级特性

外部构建支持

通过fap_extbuild参数,可以支持由外部工具构建部分应用源代码。这对于集成非C语言编写的代码特别有用,例如Rust代码。

私有库支持

通过fap_private_libs参数,可以定义与应用一起分发的额外库。这些库将作为应用构建过程的一部分进行构建,非常适合包含第三方库或专用功能模块。

实际应用示例

以下是一个典型的.fam文件内容示例:

App(
    appid="bt_start",
    apptype=FlipperAppType.STARTUP,
    entry_point="bt_on_system_start",
    order=70,
)

App(
    appid="bt_settings",
    name="Bluetooth",
    apptype=FlipperAppType.SETTINGS,
    entry_point="bt_settings_app",
    stack_size=1 * 1024,
    requires=[
        "bt",
        "gui",
    ],
    order=10,
)

这个例子展示了两个应用定义:一个是在系统启动时运行的蓝牙初始化回调,另一个是蓝牙设置应用。

最佳实践

  1. 合理设置堆栈大小:使用topfreeCLI命令分析应用的内存使用情况,找到最佳堆栈大小。

  2. 谨慎处理依赖:明确声明所有依赖关系(requires)和冲突关系(conflicts),确保构建系统的正确性。

  3. 版本控制:为外部应用设置适当的版本号,便于用户管理和升级。

  4. 资源优化:对于插件应用,合理使用fal_embedded参数可以减少资源占用。

通过理解并正确使用FAM文件,开发者可以高效地构建和管理Next-Flip/Momentum-Firmware中的各种组件,实现模块化、可维护的固件开发。

Momentum-Firmware Momentum-Firmware 项目地址: https://gitcode.com/gh_mirrors/mo/Momentum-Firmware

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵇梁易Willow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值