sel4-config机制用于导入seL4内核配置,只有在编译Rust代码时才会动态设置功能。
目标平台依赖项(如设备驱动程序)通过将顶层功能通过cargo命令行传递来处理cargo依赖项进程。
例如,在DebugConsole/cantrip-debug-console/Cargo.toml
中,针对命令行解释器的平台特定UART支持的配置是这样完成的:
[features]
default = [
"autostart_support",
]
autostart_support = ["default-uart-client"]
# Target platform support
CONFIG_PLAT_BCM2837 = []
CONFIG_PLAT_SPARROW = ["cantrip-uart-client"]
CONFIG_PLAT_*功能与seL4内核配置参数相对应,可用于选择可选依赖项:
[dependencies]
...
default-uart-client = { path = "../default-uart-client", optional = true }
...
cantrip-uart-client = { path = "../cantrip-uart-client", optional = true }
平台功能通过build/cantrip.mk中的以下内容注入到构建过程中:
cmake ... -DRUST_GLOBAL_FEATURES=${CONFIG_PLATFORM} ...
除了在构建过程中包含平台依赖项,它们还可能需要包含在CAmkES组装中;这通过使system.camkes
文件特定于平台来完成。
例如,platforms/sparrow/system.camkes
连接了UARTDriver、MlCoordinator、MailboxDriver和TimerService组件。
一些系统服务(如SDKRuntime)已准备好条件包含依赖服务; 例如,如果不存在MlCoordinator服务,则所有与模型相关的SDK调用都会返回SDKError::NoPlatformSupport。 这样做是为了让应用程序拥有稳定的ABI。