PX4源码分析5_PX4启动流程

PX4源码分析5_PX4启动流程,第1张

上电之后程序入口为Firmware/NuttX/nuttx/arch/arm/src/stm32/stm32_startc中的__start函数,负责stm32芯片的底层初始化,包括是时钟,GPIO等。

<br />

__start函数调用Firmware/NuttX/nuttx/sched/os_startc中的os_start函数,负责os的底层初始化,包括队列和进程结构等。

<br />

os_start函数调用Firmware/NuttX/nuttx/sched/os_bringupc中的os_bringup函数,负责os基本进程的启动和用户进程的启动。用户启动入口由CONFIG_USER_ENTRYPOINT宏定义进行指定。

<br />

FMU和IO的启动入口不同,分别为:

(1)FMU中CONFIG_USER_ENTRYPOINT宏定义为nsh_main:

[1] 调用nsh_main函数。

[2] nsh_main函数调用Firmware/NuttX/apps/nshlib/nsh_consolemainc中nsh_consolemain函数。

[3] nsh_consolemain函数调用nsh_initscript函数。

[4] nsh_initscript函数所执行的脚本即为FMU的启动脚本rcS。

[5] rcS脚本中负责挂载Sd卡,启动uorb,加载参数配置文件,启动dataman数据管理,启动各传感器,commander,执行rcio,执行rcinterface(混控器),执行rcmc_app(飞控姿态与位置算法)等。

(2)IO中CONFIG_USER_ENTRYPOINT宏定义为user_main:

调用src/modules/px4iofirmware/px4ioc中的user_start函数,负责IO基础环境的初始化,包括PWM,串口,ADC等,最后进入死循环,用于遥控器输入和与FMU通信的内容。

从严格意义上来说,国内还没有任何品牌的手机是国产系统。如果从宽泛一点讲, 华为鸿蒙算是做得最好的自研国产系统, 小米vela也算一个,但还是物联网系统。其他基于开源系统上深度定制优化的系统倒是不少。

1、华为自研鸿蒙OS,但严格看还是有不少开源影子

严格意义上的国产系统,应该从底层内核(Kernel)到外壳程序(Shell)全部是国产自研才算得上。同时, *** 作系统的意义是为了运行APP,一些非常常用的APP也只能自研。但国内的手机系统确实还没有完全做到。我们就拿做得最好的 华为鸿蒙OS 来说。

所以, 从严格意义上来说,华为鸿蒙也不能完全算是自研 ,有一小部分还是用了linux、安卓等的类似公共基础库。目的是为了更好的兼容,保证良好的生态。 如果按照一般情况理解, 华为鸿蒙是算国产自研系统的

2、小米的MIUI系统及Vela

雷军刚开始做小米时,就从当时的安卓系统入手,进行了深度优化形成了 MIUI系统 。并且从Google Nexus one开始适配,逐渐扩散到其他通用机型。那时候泡论坛、Root、刷机是很多人为了手机更好用乐此不疲的事情。这个时候的MIUI基本还是在安卓系统上做优化。

到了2011年,小开始发布自己的手机,终于开始了自己软硬件发展之路。有了硬件,小米再也不只是一个刷机ROM了。它可以基于自己的硬件做更加深度的定制和优化,MIUI也就在这样的道路中一路进步。同时,也在一路替换一些安卓的核心APP,和组件。虽然定制的内容越来越多,但大部分还是停留在外壳层面。内核改动并不大,所以也还有UI两个字。

近期,小米发布了一款自研的 vela系统 。该款系统是基于Nuttx开发的物联网产品的系统。底层还是用了Nuttx内核,上层则是自研的Vela应用框架对应用提供服务。同时,还提供了logger、Auto test、GUI相关开发工具。当然,这个系统目前还只是用在物联网,将来有可能也会扩展到手机。

3、其他国产系统

其他国产手机也在发展过程中,或多或少也定制优化出自己的系统。比如:

以上这些虽然发展得没有华为、小米系统的名气大。但是在自己家手机上也受到自家粉丝的喜爱。

总结

综上,严格意义上来看,国内的手机系统还算不上完全国产。但从一般层面看,华为的鸿蒙OS已经算是全国产系统。小米的vela也算是国产系统。其他的更多是深度优化。

如果从系统层面来说的话,三大手机 *** 作系统没有一个是国内的,最著名的就是安卓系统和苹果的IOS系统了,当然了还有基本无人问津的微软WinPhone系统!那么目前国内有没有自主的手机 *** 作系统呢?有当然是有的,只不过知名度不高啊,普及度也不够高!

这就是YunOS系统,这套 *** 作系统是阿里巴巴完全自主开发的,其实在2015年的时候阿里就宣布了YunOS已经超过微软的WP系统成为国内的三大手机系统之一了!其实阿里的YunOS和安卓手机 *** 作系统同样基于Linux内核开发而来,可以说是和安卓同宗同源了,而且阿里YunOS系统在软件上面也是兼容安卓系统的,也就是说只要是安卓上面的软件就可以用在YunOS上面!

那么既然YunOS和安卓同宗同源为什么国内厂商没有全部采用阿里的YunOS系统呢?其实这是有一个原由在这里的,虽然说YunOS系统完全是免费授权使用的,但是YunsOS并不开源,也就是说你如果使用YunOS的话是自己不能进行二次开发的,一切的维护都只能阿里自己亲力亲为,硬件厂商并没有太多的权限!

要知道现在的国产厂商都是自己拿着安卓系统进行开发和深度定制的,国内的定制化ROM鼻祖小米就是一个实例,小米的MIUI相信大家都有所耳闻吧,随后国内手机厂商都有了自己的一套基于安卓定制的系统,OPPO的ColorOS、华为的EMUI、VIVO的Funtouch OS等等!

既然阿里YunOS不开源,而且和安卓基本就是一个模子,我们为什么就不直接用安卓系呢?所有这也就是为什么这么大部分厂商不搭载阿里YunOS的原因。

开源这个东西还是非常重要的,就比如各家手机厂商都可以在系统里面放广告、有自己的软件商店,这里面是有不少利润的,不然小米怎么还推出了免广告VIP呢?

你要是问有没有国产手机品牌采用阿里的YunOS系统呢?虽然不多但是肯定还是有的,比如魅族的部分机型、康佳、天语、小辣椒、朵唯等等小众国产品牌都采用过YunOS系统!

目前国产系统就是将来华为的麒麟和阿里的yunos了。yunos是Linux语言下开发的,但就我个人觉得,抛开网上说的云服务不说,和安卓还真差不多。

进re管理器看data分区和安卓系统的一个样 。。。。自主研发。。这系统“研发”还真感觉并未费多少力。

而像大家有些提到的:yunos应用于“山寨机”,其实呢目前有头有脸的yunos也是经过优化的定制的Flyme了,而直接搭载yunos的那些“山寨”机,其实有些是没有啥名气的手机,有些可以说是杂牌机。yunos的口碑差,我认为这有关系。

我曾经用过一个手机,好像叫“金豆子”就是直接搭载yunos的,内置UC等第三方软件,而且自带软件比较臃肿,卸载还没法卸,还不能root卸载,那个手机卡的一笔 系统占了内存一半以上,占用百分比还不准,还有就是那个手机触摸还不准,让本来就尴尬的yunos雪上加霜

华为的麒麟os就不提了,还没很成熟。不太喜欢大嘴(整天扬言超越那个apple )。。

现在魅族也要陆续更换安卓为底层了,yunos,貌似真的要没落了(好像也没咋火啊) ,想支持你,可是没有点自己的样子啊。。。。

目前大多数手机厂家搭载的都是Android,比如小米的MIUI,华为emui等。看见没,都是安卓为底层定制的,所以为ui。手机系统后面是OS的表示为自主系统,如yunos,而基于yunos定制的Flyme也是FlymeOS。而coloros呢,你家的自助系统么 ,还不是基于Android披个装? 脸呢。。。。。老老实实叫colorui不就得了。。。。

至于国产手机自主 *** 作系统,我本人不是很感冒,毕竟Android也很成熟。但假如说真的有那么一个系统,让我们真正的认为那是我们自己的系统,我想我还是会支持,但可想而知那需要的代价,yunos就是再有人为其正名,但多少人有自信去奔向它呢

国产手机系统用的都是根据安卓原生系统开发的,只是各家的优化不一样!华为的EMUI,小米的MIUI,koobee的dido OS,oppo的Color OS系统等。基本上国产手机的每个品牌都有自己的系统。

以前阿里算是吧,目前没有了

国产有系统?不都是站在巨人的肩膀上耍大刀嚒?

可以说没有,都是基于安卓系统定制的。国内的手机厂商,几乎都在手机系统上对Android系统进行了自我开发和创新,目前国内比较出名的就是MIUI、Flyme、EMUI、Smartisan OS和一加的氢OS。这些 *** 作系统在严格意义上讲,它们并不能算是一个系统,只是在Android的底层上加了个UI,不同的系统提供了自家独特的UI风格。

有人说云OS(阿里云)是国产系统。我觉得是,不过阿里云为了有应用,它是从底层兼容安卓的系统。市面上搭载阿里云的手机有魅族、飞利浦、小辣椒等不是很出名!

想什么呢孩子呢,没有

阿里的Yunos

以下所描述的都是针对px4原生固件,此外,由于固件更新过于频繁,本文描述的是15年7月的固件,主要是举例,有改动的话,自己再研究研究吧(后面换cmake编译方式了,改动蛮大)。

既然要做开发,第一步就是搭好开发环境,根据我的经验,最好是在linux环境下编译,这样效率会很快,以前在windows下编译,经常40分钟以上,这样就太影响开发了;

第二步,大概了解下固件的架构,

如果只涉及应用层的开发,那底层的nuttx系统就可以绕过去了,一般,最好先把uorb模块的机制整明白就好了,从uorb入手,了解每个话题的来源以及作用,整理数据流,清楚每个模块之间的关系即可,比如,要实现手动模式,哪些模块互相交互,auto模式,又有哪些模块起作用,

如果涉及相应算法的开发,要学会定位到相应的算法模块,甚至具体到哪些代码,比如,你想试验你的姿态估计算法,那你就将姿态估计模块替换掉即可,不过相应的接口仍需要和px4环境一样,以姿态估计为例,最后要发布你的vehicle_attitude话题,不然无法与其他模块交互;

另外,不要试图在代码中找main函数,那是单片机思维,你只需看启动脚本即可,\ROMFS\px4fmu_common\initd\rcs;

第三步,针对你的具体情况,定位相应的模块,进行精读研究,虽然模块基本是用C++写的,但是不会C++也没关系,毕竟又不是让你写,本人倒目前为止,也不会C++,配合注释,看明白就好了,比如,整理下mavlink的控制流程;

px4原生固件模块列表:

系统命令程序

mavlink –通过串口发送和接收mavlink信息

sdlog2 –保存系统日志/飞行数据到SD卡

tests –测试系统中的测试程序

top –列出当前的进程和CPU负载

uORB – 微对象请求代理器-分发其他应用程序之间的信息

驱动

mkblctrl–blctrl电子模块驱动

esc_calib –ESC的校准工具

fmu –FMU引脚输入输出定义

gpio_led –GPIOLED驱动

gps –GPS接收器驱动

pwm –PWM的更新速率命令

sensors –传感器应用

px4io –px4io驱动

uavcan –uavcan驱动

飞行控制的程序

飞行安全和导航

commander –主要飞行安全状态机

navigator –任务,失效保护和RTL导航仪

估计姿态和位置

attitude_estimator_ekf –基于EKF的姿态估计

ekf_att_pos_estimator –基于EKF的姿态和位置估计

position_estimator_inav–惯性导航的位置估计

multirotor姿态和位置控制器

mc_att_control–multirotor姿态控制器

mc_pos_control –multirotor位置控制器

fixedwing姿态和位置控制器

fw_att_control –固定翼飞机的姿态控制

fw_pos_control_l1 –固定翼位置控制器

垂直起降姿态控制器

vtol_att_control –垂直起降姿态控制器

最后提一句,多看看官网的说明,另外根据本人的经验来看,由于大框架,代码人家都写好了,通常你要加功能,所修改的也就几行代码而已,举例说明,比如px4固件只能在手动模式解锁,假如我要修改成定高模式解锁

以下所描述的都是针对px4原生固件,此外,由于固件更新过于频繁,本文描述的是15年7月的固件,主要是举例,有改动的话,自己再研究研究吧(后面换cmake编译方式了,改动蛮大)。

既然要做开发,第一步就是搭好开发环境,根据我的经验,最好是在linux环境下编译,这样效率会很快,以前在windows下编译,经常40分钟以上,这样就太影响开发了;

第二步,大概了解下固件的架构,

如果只涉及应用层的开发,那底层的nuttx系统就可以绕过去了,一般,最好先把uorb模块的机制整明白就好了,从uorb入手,了解每个话题的来源以及作用,整理数据流,清楚每个模块之间的关系即可,比如,要实现手动模式,哪些模块互相交互,auto模式,又有哪些模块起作用,

如果涉及相应算法的开发,要学会定位到相应的算法模块,甚至具体到哪些代码,比如,你想试验你的姿态估计算法,那你就将姿态估计模块替换掉即可,不过相应的接口仍需要和px4环境一样,以姿态估计为例,最后要发布你的vehicle_attitude话题,不然无法与其他模块交互;

另外,不要试图在代码中找main函数,那是单片机思维,你只需看启动脚本即可,\ROMFS\px4fmu_common\initd\rcs;

第三步,针对你的具体情况,定位相应的模块,进行精读研究,虽然模块基本是用C++写的,但是不会C++也没关系,毕竟又不是让你写,本人倒目前为止,也不会C++,配合注释,看明白就好了,比如,整理下mavlink的控制流程;

px4原生固件模块列表:

系统命令程序

mavlink –通过串口发送和接收mavlink信息

sdlog2 –保存系统日志/飞行数据到SD卡

tests –测试系统中的测试程序

top –列出当前的进程和CPU负载

uORB – 微对象请求代理器-分发其他应用程序之间的信息

驱动

mkblctrl–blctrl电子模块驱动

esc_calib –ESC的校准工具

fmu –FMU引脚输入输出定义

gpio_led –GPIOLED驱动

gps –GPS接收器驱动

pwm –PWM的更新速率命令

sensors –传感器应用

px4io –px4io驱动

uavcan –uavcan驱动

飞行控制的程序

飞行安全和导航

commander –主要飞行安全状态机

navigator –任务,失效保护和RTL导航仪

估计姿态和位置

attitude_estimator_ekf –基于EKF的姿态估计

ekf_att_pos_estimator –基于EKF的姿态和位置估计

position_estimator_inav–惯性导航的位置估计

multirotor姿态和位置控制器

mc_att_control–multirotor姿态控制器

mc_pos_control –multirotor位置控制器

fixedwing姿态和位置控制器

fw_att_control –固定翼飞机的姿态控制

fw_pos_control_l1 –固定翼位置控制器

垂直起降姿态控制器

vtol_att_control –垂直起降姿态控制器

最后提一句,多看看官网的说明,另外根据本人的经验来看,由于大框架,代码人家都写好了,通常你要加功能,所修改的也就几行代码而已,举例说明,比如px4固件只能在手动模式解锁,假如我要修改成定高模式解锁

以上就是关于PX4源码分析5_PX4启动流程全部的内容,包括:PX4源码分析5_PX4启动流程、现在国内哪个品牌手机用的是国产系统、如何进行pixhawk的串口调试等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9789600.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存