Next-Flip/Momentum-Firmware应用清单(FAM)详解
Momentum-Firmware 项目地址: https://gitcode.com/gh_mirrors/mo/Momentum-Firmware
什么是FAM文件
在Next-Flip/Momentum-Firmware项目中,FAM(Flipper App Manifests)文件是定义固件组件属性的核心配置文件。每个组件(包括服务、用户应用和系统设置)都拥有自己的application.fam
文件,它描述了组件的基本特性以及与其他系统部分的关系。
FAM文件的作用机制
当构建固件时,构建工具会收集所有应用清单文件并处理它们的依赖关系。然后仅构建当前构建配置中引用的那些组件。这种机制实现了模块化开发,允许开发者只关注自己负责的组件。
应用定义详解
每个固件组件的属性都是通过Python代码片段声明的,这些代码会调用App()
函数并传入各种参数。下面我们详细解析这些参数。
必需参数
-
appid: 字符串类型,表示在构建系统中的应用ID。它用于指定要包含在构建配置中的应用程序,并解析依赖关系和冲突。
-
apptype: 属于FlipperAppType枚举的成员,定义了应用的类型。有效值包括:
| 枚举成员 | 描述 | |-------------|----------------------------------------------------------------------| | SERVICE | 系统服务,在系统启动早期创建 | | SYSTEM | 不会显示在任何菜单中的应用程序,可由其他应用或CLI启动 | | APP | 主菜单中的常规应用 | | PLUGIN | 作为固件一部分构建并放置在插件菜单中的应用 | | DEBUG | 仅在调试模式启用时可见于调试菜单的应用 | | ARCHIVE | 唯一的存档应用 | | SETTINGS | 放置在系统设置菜单中的应用 | | STARTUP | 系统启动时运行的回调函数,不定义单独的应用 | | EXTERNAL | 构建为.fap
插件的应用 | | METAPACKAGE | 不定义任何运行代码,用于声明依赖项和应用包 |
可选参数
-
name: 在菜单中显示的名称。
-
entry_point: 用作应用入口点的C函数。注意C++函数名会被修饰,因此需要使用
extern "C"
包装才能作为入口点使用。 -
stack_size: 为应用启动时分配的堆栈大小(字节)。分配过小会导致堆栈溢出,分配过大会减少可用堆内存。
-
icon: 从内置资源中使用的动画图标名称,当应用作为固件一部分构建时使用。
-
order: 应用在其组中的排序顺序,数值越小位置越靠前。
-
sdk_headers: 该应用代码中的C头文件列表,用于包含在外部应用的API定义中。
-
targets: 应用兼容的目标名称列表。如果未指定,则默认为所有目标构建。
-
resources: 应用源文件夹中的资源文件夹名称,用于打包该应用的SD卡资源。
外部应用专用参数
对于构建为.fap
插件的外部应用,还有一些特殊参数:
-
sources: 用于收集应用文件夹内源文件的文件名模式列表。
-
fap_version: 应用版本字符串,默认为"0.1"。
-
fap_icon: 嵌入
.fap
文件的10x10像素1位色深PNG图标文件名。 -
fap_libs: 链接应用所需的额外库列表。
-
fap_category: 应用子类别,也决定了文件系统中FAP的路径。
-
fap_description: 简短的应用描述。
-
fap_author: 应用作者。
-
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,
)
这个例子展示了两个应用定义:一个是在系统启动时运行的蓝牙初始化回调,另一个是蓝牙设置应用。
最佳实践
-
合理设置堆栈大小:使用
top
和free
CLI命令分析应用的内存使用情况,找到最佳堆栈大小。 -
谨慎处理依赖:明确声明所有依赖关系(
requires
)和冲突关系(conflicts
),确保构建系统的正确性。 -
版本控制:为外部应用设置适当的版本号,便于用户管理和升级。
-
资源优化:对于插件应用,合理使用
fal_embedded
参数可以减少资源占用。
通过理解并正确使用FAM文件,开发者可以高效地构建和管理Next-Flip/Momentum-Firmware中的各种组件,实现模块化、可维护的固件开发。
Momentum-Firmware 项目地址: https://gitcode.com/gh_mirrors/mo/Momentum-Firmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考