LinuxJiaoCheng

LinuxJiaoCheng.com
Linux教程网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

STM3232F系列飞控的目录结构与编译选项,你了解吗?

2023年5月15日 448点热度

linux 编译java文件_在linux下由o文件编译生成cgi文件_linux编译cpp文件

明天我们来学习一下关于开源飞控的目录结构与编译选项,先来瞧瞧整体目录结构,之后我们会针对主要的功能模块说一些说明(因为篇幅限制本节所列举的目录与文件都是源代码中一少部份linux 下载工具linux安全加固,实际上好多目录与文件夹都被省略了):

PX4

├──build

│├──nuttx_px4fmu-v3_default

│├──nuttx_px4io-v2_default

│├──posix_sitl_default

├──cmake

│├──cmake_hexagon

│├──common

│├──configs

│├──cygwin_cygpath.cmake

│└──toolchains

├──mavlink

│└──include

├──msg

│├──templates

│└──tools

├──platforms

│├──nuttx

│├──posix

│└──qurt

├──ROMFS

│├──CMakeLists.txt

│├──px4fmu_common

│├──px4fmu_test

│└──tap_common

├──src

│├──drivers

│├──examples

│├──include

│├──lib

│├──modules

│├──platforms

linux编译cpp文件_linux 编译java文件_在linux下由o文件编译生成cgi文件

│├──systemcmds

│└──templates

└──Tools

一、build

build是编译目标目录,其中包括了程序源代码编译以后所生成的编译选项、中间文件、目标文件等,一般也是按不同的编译选项分为多个不同的目录,比如当我们执行不同的编译选项时,都会出现多个编译目标目录:

build/

├──nuttx_px4fmu-v2_default

├──nuttx_px4fmu-v3_default

├──posix_sitl_default

└──posix_sitl_test

在编译结束以后,最终生成的目标文件格式与目标平台有关,比如:使用nuttx_px4fmu-v2_default和nuttx_px4fmu-v3_default编译选项编译然后生成的文件即运行在STM3232F系列的FMU中,并采用Nuttx操作系统运行整个飞控程序;而使用posix_sitl_default和posix_sitl_test即运行在支持Posix标准的平台上,如运行Linux内核的Arm平台,或PC机。

二、cmake

cmake目录中储存了整个飞控程序的所有编译选项,其内容大致如下:

cmake

├──common

│├──px4_base.cmake

├──configs

│├──nuttx_px4fmu-v2_default.cmake

│├──nuttx_px4fmu-v3_default.cmake

│├──nuttx_px4fmu-v4_default.cmake

│├──nuttx_px4fmu-v5_default.cmake

│├──posix_sitl_default.cmake

│├──posix_sitl_test.cmake

└──toolchains

├──Toolchain-arm-linux-gnueabihf.cmake

├──Toolchain-arm-none-eabi.cmake

├──Toolchain-arm-xilinx-linux-gnueabi.cmake

├──Toolchain-gcc-arm-linux-gnueabihf.cmake

└──Toolchain-native.cmake

1.common:全局公共编译配置项,px4_base.cmake中储存整个px4程序中的全局配置选项和功能函数。诸如:编译源代码所使用的C和C++的编译标准(-std=gnu99和-std=gnu++11)和警告与错误选项(-Warray-bounds-Wdisabled-optimization-Wdouble-promotion)等。

2.config:独立编译配置项,容许用户可以按照自己的须要编译成不同的目标文件。诸如:nuttx_px4mfu……系列表示编译成以Nuttx操作系统为运行平台的FMU飞控程序,而nuttx_px4io……系列表示编译成以Nuttx操作系统为运行平台的IO程序(主要负责sbus输入与pwm输出),posix_sitl……系列表示编译成以支持Posix标准的运行平台飞控程序。

3.toolchains:工具链linux编译cpp文件,其中储存了以不同编译选项编译源代码时所使用的编译工具,比如:交叉编译工具arm-linux-gnueabihf、arm-none-eabi、gcc-arm-linux-gnueabihf和gcc。

linux 编译java文件_在linux下由o文件编译生成cgi文件_linux编译cpp文件

三、mavlink

mavlink是无人机中使用的一种轻量级外部通信合同,与外部通信即是与计算机上的地面站程序来进行通信。我们可以使用Mavlink官方提供的合同生成工具来订制我们自己须要的合同内容,并可以通过须要生成不同编程语言所使用的源文件,比如C/C++、Java、Python等。这样的用处是同样的一个通信合同可以被飞控程序、PC计算机、手机APP程序和其它程序同时使用。这样就有效的防止了不同运行平台上,不同类型程序运行的差别,而采用相同的合同通信。这也是上一节中我们述说的内容。目前的mavlink版本为2.0,使用时只须要包含其头文件即可,其目录为:

mavlink/include/mavlink/v2.0/common

在后续内容中我们会系统的学习关于mavlink合同的原理与使用方式。

四、msg

在上一节中我们早已简单的介绍了关于uORB的原理与运行方法,msg文件夹中储存的就是uORB所须要的所有Message,虽然也就是uORB在通信时须要定义的数据格式,以.msg结尾,其内容为特定的uORB数据类型(有点像C/C++,但不完全相同):

msg/

├──templates

│├──px4

│├──uorb

├──tools

│├──gencpp

│├──generate_microRTPS_bridge.py

│├──genmsg

│├──px_generate_uorb_topic_files.py

│├──px_generate_uorb_topic_helper.py

│├──px_generate_uorb_topic_helper.pyc

│└──uorb_rtps_message_ids.py

├──actuator_armed.msg

├──actuator_controls.msg

├──actuator_direct.msg

├──safety.msg

├──satellite_info.msg

├──sensor_accel.msg

├──sensor_baro.msg

├──test_motor.msg

├──timesync_status.msg

├──trajectory_waypoint.msg

├──transponder_report.msg

├──tune_control.msg

└──vehicle_gps_position.msg

1.message:在msg目录直属的.msg文件,都是uORB的message文件,即通信合同内容。其定义事例:

linux 编译java文件_linux编译cpp文件_在linux下由o文件编译生成cgi文件

uint64timestamp

int32lat

int32lon

float32vel_m_s

boolvel_ned_valid

uint8satellites_used

2.templates:中储存的是msg.cpp.template、msg.h.template、uORBTopics.cpp.template这三个文件,用于将.msg文件编译成.h头文件和.cpp源文件。

3.tools:中储存的是将.msg生成.h和.cpp源代码的工具文件,大多是采用Python编撰的(px_generate_uorb_topic_files.py)。

五、platforms

platforms即为运行平台,px4构架支持多种运行平台,比如:运行在STM3232FF4系列上、运行在Arm系列上,运行在Posix标准构架上等等。在不同的运行平台上,编译源代码的内容与链接源代码均不尽相同,所以就须要在不同的编译选项下,编译不同的平台源代码,platforms中储存了不同平台下的源代码内容:

platforms/

├──nuttx

│├──cmake

│├──CMakeLists.txt

│├──Debug

│├──Images

│├──NuttX

│├──nuttx-configs

│└──src

└──posix

├──cmake

├──CMakeLists.txt

├──include

└──src

关于Nuttx平台和Posix平台主要内容涉及了操作系统的相关知识,这与我们学习开源飞控px4的设计与原理关系并不是特别的大,所以这儿只做简介,并不做太多的介绍linux编译cpp文件,有兴趣的读者可以依照自己的须要去学习。

六、ROMFS

ROMFS/

├──CMakeLists.txt

├──px4fmu_common

│├──CMakeLists.txt

│├──init.d

│├──init.d-posix

│├──mixers

│└──mixers-sitl

├──px4fmu_test

│├──CMakeLists.txt

│├──init.d

│├──mixers

│└──unit_test_data

└──tap_common

├──CMakeLists.txt

├──init.d

└──mixers

ROMFS中储存了不同编译选项中的ROM文件系统,用简单的语言来说就是储存了飞控程序启动以后首先加载的运行脚本rcS(在Nuttx配置文件defconfig中配置)和混控文件mixer。其中rcS运行脚本句型格式类Unix的Shell脚本,但并不完全相同,具体句型可以参见:

七、src

src可以说是飞控中最重要的一个目录了,其中内容如下:

src

├──drivers

│├──aerofc_adc

│├──barometer

│├──spektrum_rc

│├──stm32

│└──vmount

├──include

│├──containers

│├──px4.h

│├──unit_test.h

│└──visibility.h

├──lib

│├──airspeed

│├──battery

│├──bezier

│├──circuit_breaker

│├──CMakeLists.txt

linux编译cpp文件_在linux下由o文件编译生成cgi文件_linux 编译java文件

│└──controllib

stimation

│├──tunes

│└──version

├──modules

│├──attitude_estimator_q

│├──commander

│├──dataman

│├──ekf2

│├──events

│├──mc_att_control

│├──mc_pos_control

│├──logger

│└──mavlink

└──systemcmds

├──param

├──perf

├──pwm

├──usb_connected

└──ver

1.drivers:驱动目录,其中储存所有的驱动模块,包括了GPS、MPU6000、HM5883等等。

2.include:包含头文件目录。

3.lib:常用的库函数,比如全局座标与本地坐标的转换函数等等。

4.modules:系统主要模块commander、mc_pos_control、mc_att_control等等。

5.systemcmds:系统命令param、pwm、reboot等。

八、Tools

此目录为px4编译与烧录固件的工具包,其中有好多采用Python编撰的工具类或是使用shell脚本编译的工具程序。诸如:固件烧录工具px_uploader.py;飞控参数生成工具srcparser.py;半数学仿真工具jmavsim等等。

在linux下由o文件编译生成cgi文件_linux编译cpp文件_linux 编译java文件

上期预告:《uORB实现原理与使用方式》

《一天精通无人机:中级篇》主要内容为:基本动力原理、硬件组装、飞控程序下载、编译、校准、调参与试航。

《一天精通无人机:初级篇》主要内容为:开源飞控程序PX4构架、精典PID控制原理、路径规划、命令收发、与地面站通信合同。

《一天精通无人机:中级篇》主要内容为:动力学建模、半数学仿真、传感器数据融合、扩展卡尔曼混频、全手动飞行设计、环境感知与视觉建模。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux编译 nuttx 文件目录 编译程序
最后更新:2023年5月15日

Linux教程网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux教程网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux文件恢复技巧,实用命令大揭秘 开源操作系统的分类及分类类的Linux操作方式 Linux安装实验报告:建议与注意事项 Linux操作系统——Linux移动端的发展史 Linux系统下解压xz文件的七步曲 Linux软件安装位置选择指南 linux 安装usb转串口驱动 USB的VID和PID号USB,区别在哪? linux安装bind Linux DNS服务器对比 linux cuda Linux CUDA:安装配置与应用实践 Linux中查看某个软件的安装路径(地址)命令 远程登录Linux服务器的技巧:Telnet命令详解 运维工程师简历范本(运维)(广州艾迪思电子科技有限公司) linux c and LinuxC编程精要 包和软件包管理器,就好比“App”和“应用商店”这样的关系 开源三剑客:Linux、PHP、MySQL评测 linux查看软件安装目录的方法和操作环境的教程方法 Linux文件恢复技巧 Linux查看软件安装目录及位置4种方法(Linux) 嵌入式工程师到底做些什么月薪有多少?月薪多少 修改Linux命令行字体大小的方法
Linux命令轻松查看系统版本Linux虚拟主机与Windows虚拟有哪些区别?怎么选Linux Kernel 4.0:开源世界的新篇章Linux命令大全用于检测与另一个主机之间的网络连接简洁明了:Linux安装虚拟机,轻松上手!自考《操作系统概论》博客中的知识归纳和总结Linux驱动解读Linux系统远程上传文件和目录命令应用命令参数CentOS搭建NTP服务器,详解步骤与注意事项Linux内核网络协议栈的细节介绍高效办公,红旗Linux桌面应用教程Linux内核链路层路径接收中断的条件下执行的范围释放技术潜能,掌握Linux版本命令腾讯的开源协议栈f-stack.pdf在DPDK技术峰会上推出的重要技术创新Linux RAID驱动:原理与应用解析嵌入式开发必备的基础知识-经典书籍推荐:linux多cpu 操作系统 2017年上海事业单位招聘考试:保研面试资料复习经验简洁易懂的标题:Linux安装targz,步骤技巧一览VMwareWorkstation15最新破解版含激活码,安装破解激活图文教程简洁高效:Linux防火墙配置攻略
深度解析gost操作系统:8个必知方向 汽车操作系统这个热词,为什么最近被工信部“点名”了? Linux系统中如何快速定位和精确查找它? 1.程序从内核空间移到用户空间,应该对开发有很大方便 嵌入式软件开发的特点及特点分析 这是一个为远程应用程序图形应用程序,实现最佳远程访问 嵌入式开发:手机中Linux操作系统扫盲 经典操作系统:WindowsXP再现 快速上手Linux mount -a命令,注意事项必读! 如何在Linux下安装Redis和PHP扩展?将介绍 软件中有一个安装步骤及程序编写工作步骤 Linux系统版本查看方法大全 个人博客网站,让我们向着前端进发!-1.学习 主机操作系统 (T·每日一练)2016年10月21日 编译Linux内核,避免常见错误 麒麟软件携手格尔软件深度探索为网络安全应用保驾护航 Linux系统移植与性能分析全解析,8个方面详细剖析! Linux操作系统——Linux移动端的发展史 Linux下8139网卡驱动解决方案 Bootloader启动流程分析进阶教程整理教程图
标签聚合
系统 操作 虚拟机 linux系统 内核 应用 操作系统开发 linux服务器 命令 软件
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 80篇
  • 2023年8月 / 120篇
  • 2023年7月 / 121篇
  • 2023年6月 / 119篇
  • 2023年5月 / 124篇
  • 2023年4月 / 113篇
  • 2023年3月 / 107篇
  • 2023年2月 / 81篇
  • 2023年1月 / 159篇
  • 2022年12月 / 172篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxjiaocheng.com ALL RIGHTS RESERVED.

京ICP备16058923号-3