在PX4启动过程章节的基础上,可以深入分析下PX4应用平台(框架)的实现。
PX4应用平台初始化(px4_platform_init)在INIT初始化脚本之前,被PX4应用使用的抽象的模块都在这里进行初始化。
比如:
注:部分尚没有对应研读的文章,没有给出链接,后续会更新。
所谓平台其实更多的就是考虑通用组件,将共性的东西抽象提取出来,设计和代码集中管理和实现。平台部分的代码因晚于驱动早于应用初始化。
nsh_initialize
└──> boardctl(BOARDIOC_INIT, 0);
└──> board_app_initialize
└──> px4_platform_init
px4_platform_init
├──>
│ ├──> cxx_initialize
│ └──> kernel_ioctl_initialize
├──> px4_console_buffer_init
├──>
│ └──> PX4Crypto::px4_crypto_init // 秘钥,加密算法
├──> hrt_init // 高精度定时
├──> param_init // 参数
├──>
│ └──> cpuload_initialize_once
├──>
│ └──> int ret_mount_procfs = mount(nullptr, "/proc", "procfs", 0, nullptr);
├──>
│ └──> int ret_mount_binfs = nx_mount(nullptr, "/bin", "binfs", 0, nullptr);
├──> px4::WorkQueueManagerStart // 工作队列
├──> uorb_start // uorb消息
├──> px4_log_initialize // 日志uORB消息注册
└──>
└──> cdcacm_init
看到的一些现象:
现象思考:
希望,随着硬件性能的提升,能有机会看到从上至下进行整体设计考虑,更加模块化/人性化,从整个产品系统做进一步的提升,便于更多的人易于了解和上手设计研发工作。
【1】PX4开源软件框架简明简介
【2】PX4模块设计之十:PX4启动过程
【3】PX4模块设计之十二:High Resolution Timer设计
【4】PX4模块设计之十三:WorkQueue设计
【5】PX4模块设计之二:uORB消息代理
【6】PX4模块设计之十五:PX4 Log设计