mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-14 20:10:15 +03:00
Merge branch 'iNavFlight:master' into add-azimuth-to-S.Port/F.Port-telemetry
This commit is contained in:
commit
6ddfdcf7c8
110 changed files with 2255 additions and 1129 deletions
12
docs/Board - BetFPVF722.md
Normal file
12
docs/Board - BetFPVF722.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
# BetaFPVF722
|
||||
|
||||
## I2C bus for magnetometer
|
||||
|
||||
BetFPVF722 does not have I2C pads broken out. I2C is shared with UART3
|
||||
|
||||
* TX3 - SCL
|
||||
* RX3 - SDA
|
||||
|
||||
> I2C and UART3 can not be used at the same time! Connect the serial receiver to a different serial port when I2C device like MAG is used.
|
||||
|
||||

|
|
@ -6,7 +6,7 @@
|
|||
|
||||
* STM32F411 CPU
|
||||
* OSD
|
||||
* BMP280 barometer
|
||||
* BMP280 barometer (DSP310 with new FCs from around June 2021)
|
||||
* Integrated PDB for 2 motors
|
||||
* 2 UART ports
|
||||
* 6 servos
|
||||
|
|
|
@ -34,14 +34,13 @@ The stick positions are combined to activate different functions:
|
|||
| Trim Acc Forwards | HIGH | CENTER | HIGH | CENTER |
|
||||
| Trim Acc Backwards | HIGH | CENTER | LOW | CENTER |
|
||||
| Save current waypoint mission | LOW | CENTER | HIGH | LOW |
|
||||
| Load/unload current waypoint mission | LOW | CENTER | HIGH | HIGH |
|
||||
| Load current waypoint mission | LOW | CENTER | HIGH | HIGH |
|
||||
| Unload waypoint mission | LOW | CENTER | LOW | HIGH |
|
||||
| Save setting | LOW | LOW | LOW | HIGH |
|
||||
| Enter OSD Menu (CMS) | CENTER | LOW | HIGH | CENTER |
|
||||
|
||||

|
||||
|
||||
"Load/unload Mission" is a toggle. If no mission is loaded to RAM, the EEPROM mission is loaded; if a mission is in RAM, it is cleared. Successful loading is indicated by the `ACTION_SUCCESS` beep, otherwise the `ACTION_FAIL` beep is played.
|
||||
|
||||
## Yaw control
|
||||
|
||||
While arming/disarming with sticks, your yaw stick will be moving to extreme values. In order to prevent your craft from trying to yaw during arming/disarming while on the ground, your yaw input will not cause the craft to yaw when the throttle is LOW (i.e. below the `min_check` setting).
|
||||
|
|
|
@ -452,6 +452,16 @@ If the remaining battery capacity goes below this threshold the beeper will emit
|
|||
|
||||
---
|
||||
|
||||
### beeper_pwm_mode
|
||||
|
||||
Allows disabling PWM mode for beeper on some targets. Switch from ON to OFF if the external beeper sound is weak. Do not switch from OFF to ON without checking if the board supports PWM beeper mode
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| OFF | | |
|
||||
|
||||
---
|
||||
|
||||
### blackbox_device
|
||||
|
||||
Selection of where to write blackbox data
|
||||
|
@ -492,6 +502,16 @@ Stick deadband in [r/c points], applied after r/c deadband and expo. Used to che
|
|||
|
||||
---
|
||||
|
||||
### controlrate_profile
|
||||
|
||||
Control rate profile to switch to when the battery profile is selected, 0 to disable and keep the currently selected control rate profile
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| 0 | 0 | 3 |
|
||||
|
||||
---
|
||||
|
||||
### cpu_underclock
|
||||
|
||||
This option is only available on certain architectures (F3 CPUs at the moment). It makes CPU clock lower to reduce interference to long-range RC systems working at 433MHz
|
||||
|
@ -622,6 +642,16 @@ OFF = OSD hardware blink / ON = OSD software blink. If OSD warning text/values a
|
|||
|
||||
---
|
||||
|
||||
### dji_cn_alternating_duration
|
||||
|
||||
Alternating duration of craft name elements, in tenths of a second
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| 30 | 1 | 150 |
|
||||
|
||||
---
|
||||
|
||||
### dji_esc_temp_source
|
||||
|
||||
Re-purpose the ESC temperature field for IMU/BARO temperature
|
||||
|
@ -632,9 +662,39 @@ Re-purpose the ESC temperature field for IMU/BARO temperature
|
|||
|
||||
---
|
||||
|
||||
### dji_message_speed_source
|
||||
|
||||
Sets the speed type displayed by the DJI OSD in craft name: GROUND, 3D, AIR
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| 3D | | |
|
||||
|
||||
---
|
||||
|
||||
### dji_rssi_source
|
||||
|
||||
Source of the DJI RSSI field: RSSI, CRSF_LQ
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| RSSI | | |
|
||||
|
||||
---
|
||||
|
||||
### dji_use_adjustments
|
||||
|
||||
Show inflight adjustments in craft name field
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| OFF | | |
|
||||
|
||||
---
|
||||
|
||||
### dji_use_name_for_messages
|
||||
|
||||
Re-purpose the craft name field for messages. Replace craft name with :WTSED for Warnings|Throttle|Speed|Efficiency|Trip distance
|
||||
Re-purpose the craft name field for messages.
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
|
@ -1108,13 +1168,13 @@ The target percentage of maximum mixer output used for determining the rates in
|
|||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| 90 | 50 | 100 |
|
||||
| 80 | 50 | 100 |
|
||||
|
||||
---
|
||||
|
||||
### fw_autotune_min_stick
|
||||
|
||||
Minimum stick input [%] to consider overshoot/undershoot detection
|
||||
Minimum stick input [%], after applying deadband and expo, to start recording the plane's response to stick input.
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
|
@ -5064,7 +5124,7 @@ Output frequency (in Hz) servo pins. When using tricopters or gimbal with digita
|
|||
|
||||
### setpoint_kalman_enabled
|
||||
|
||||
Enable Kalman filter on the PID controller setpoint
|
||||
Enable Kalman filter on the gyro data
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
|
@ -5082,26 +5142,6 @@ Quality factor of the setpoint Kalman filter. Higher values means less filtering
|
|||
|
||||
---
|
||||
|
||||
### setpoint_kalman_sharpness
|
||||
|
||||
Dynamic factor for the setpoint Kalman filter. In general, the higher the value, the more dynamic Kalman filter gets
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| 100 | 1 | 16000 |
|
||||
|
||||
---
|
||||
|
||||
### setpoint_kalman_w
|
||||
|
||||
Window size for the setpoint Kalman filter. Wider the window, more samples are used to compute variance. In general, wider window results in smoother filter response
|
||||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| 4 | 1 | 40 |
|
||||
|
||||
---
|
||||
|
||||
### sim_ground_station_number
|
||||
|
||||
Number of phone that is used to communicate with SIM module. Messages / calls from other numbers are ignored. If undefined, can be set by calling or sending a message to the module.
|
||||
|
@ -5508,7 +5548,7 @@ Battery voltage calibration value. 1100 = 11:1 voltage divider (10k:1k) x 100. A
|
|||
|
||||
| Default | Min | Max |
|
||||
| --- | --- | --- |
|
||||
| _target default_ | VBAT_SCALE_MIN | VBAT_SCALE_MAX |
|
||||
| _target default_ | 0 | 65535 |
|
||||
|
||||
---
|
||||
|
||||
|
|
BIN
docs/assets/betafpvf722.png
Normal file
BIN
docs/assets/betafpvf722.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 221 KiB |
Binary file not shown.
Before Width: | Height: | Size: 478 KiB After Width: | Height: | Size: 666 KiB |
|
@ -29,7 +29,7 @@
|
|||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.13995495"
|
||||
inkscape:cx="2157.8372"
|
||||
inkscape:cx="6594.9793"
|
||||
inkscape:cy="3265.3365"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g4157"
|
||||
|
@ -627,6 +627,20 @@
|
|||
id="path5923"
|
||||
d="m 5992.6852,1082.4789 c 0,10.5728 -14.6765,19.1438 -32.7809,19.1438 -18.1044,0 -32.7809,-8.571 -32.7809,-19.1438 0,-10.5729 14.6765,-163.59574 32.7809,-163.59574 18.1044,0 32.7809,153.02284 32.7809,163.59574 z"
|
||||
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.07780743;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
ry="0"
|
||||
y="1145.4941"
|
||||
x="5811.6289"
|
||||
height="288.94339"
|
||||
width="288.94339"
|
||||
id="rect5919-7"
|
||||
style="display:inline;fill:none;fill-opacity:1;stroke:#808080;stroke-width:11.0566;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5923-5"
|
||||
d="m 5988.8813,1455.7655 c 0,10.5728 -14.6765,19.1438 -32.7809,19.1438 -18.1044,0 -32.7809,-8.571 -32.7809,-19.1438 0,-10.5729 14.6765,-163.5957 32.7809,-163.5957 18.1044,0 32.7809,153.0228 32.7809,163.5957 z"
|
||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.07781;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#808080;stroke-width:11.05660725;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5941"
|
||||
|
@ -653,48 +667,75 @@
|
|||
id="tspan5963"
|
||||
y="994.89398"
|
||||
x="5680.7969"
|
||||
sodipodi:role="line">(Un)/load waypoint mission</tspan></text>
|
||||
sodipodi:role="line">Load waypoint mission</tspan></text>
|
||||
<text
|
||||
id="text5961-3"
|
||||
y="1369.7102"
|
||||
x="5681.5464"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:286.599px;line-height:1.25;text-align:end;text-anchor:end"
|
||||
id="tspan5963-6"
|
||||
y="1369.7102"
|
||||
x="5681.5464"
|
||||
sodipodi:role="line">Unload waypoint mission</tspan></text>
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#808080;stroke-width:11.05660725;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#808080;stroke-width:11.0566;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5971"
|
||||
width="288.94339"
|
||||
height="288.94339"
|
||||
x="5815.4326"
|
||||
y="1192.6158"
|
||||
y="1526.3658"
|
||||
ry="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5977"
|
||||
d="m 5863.6503,1478.825 c -7.4762,7.4762 -23.9146,3.1589 -36.7164,-9.6428 -12.8017,-12.8018 -17.119,-29.2402 -9.6428,-36.7164 7.4761,-7.4761 126.0574,-105.3017 138.8592,-92.5 12.8017,12.8018 -85.0239,131.3831 -92.5,138.8592 z"
|
||||
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.07780743;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 5863.6503,1812.575 c -7.4762,7.4762 -23.9146,3.1589 -36.7164,-9.6428 -12.8017,-12.8018 -17.119,-29.2402 -9.6428,-36.7164 7.4761,-7.4761 126.0574,-105.3017 138.8592,-92.5 12.8017,12.8018 -85.0239,131.3831 -92.5,138.8592 z"
|
||||
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.07781;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:transform-center-y="73.935654"
|
||||
inkscape:transform-center-x="73.935653" />
|
||||
<rect
|
||||
ry="0"
|
||||
y="1192.6158"
|
||||
y="1526.3658"
|
||||
x="6221.147"
|
||||
height="288.94339"
|
||||
width="288.94339"
|
||||
id="rect5993"
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#808080;stroke-width:11.05660725;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#808080;stroke-width:11.0566;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path6001"
|
||||
d="m 6460.9887,1478.825 c 7.4761,7.4762 23.9146,3.1589 36.7163,-9.6428 12.8017,-12.8018 17.119,-29.2402 9.6428,-36.7164 -7.4761,-7.4761 -126.0574,-105.3017 -138.8591,-92.5 -12.8018,12.8018 85.0238,131.3831 92.5,138.8592 z"
|
||||
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.07780743;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 6460.9887,1812.575 c 7.4761,7.4762 23.9146,3.1589 36.7163,-9.6428 12.8017,-12.8018 17.119,-29.2402 9.6428,-36.7164 -7.4761,-7.4761 -126.0574,-105.3017 -138.8591,-92.5 -12.8018,12.8018 85.0238,131.3831 92.5,138.8592 z"
|
||||
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.07781;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:transform-center-y="73.935654"
|
||||
inkscape:transform-center-x="-73.935657" />
|
||||
<rect
|
||||
ry="0"
|
||||
y="1140.2471"
|
||||
x="6228.9062"
|
||||
height="288.94339"
|
||||
width="288.94339"
|
||||
id="rect5993-3"
|
||||
style="display:inline;fill:none;fill-opacity:1;stroke:#808080;stroke-width:11.0566;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path6001-5"
|
||||
d="m 6468.7482,1426.4562 c 7.4761,7.4762 23.9146,3.1589 36.7163,-9.6428 12.8017,-12.8018 17.119,-29.2402 9.6428,-36.7164 -7.4761,-7.4761 -126.0574,-105.3017 -138.8591,-92.5 -12.8018,12.8018 85.0238,131.3831 92.5,138.8592 z"
|
||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.07781;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:transform-center-y="73.935654"
|
||||
inkscape:transform-center-x="-73.935657" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="5680.7969"
|
||||
y="1415.3022"
|
||||
x="5714.6821"
|
||||
y="1775.6128"
|
||||
id="text6013"><tspan
|
||||
sodipodi:role="line"
|
||||
x="5680.7969"
|
||||
y="1415.3022"
|
||||
x="5714.6821"
|
||||
y="1775.6128"
|
||||
id="tspan6015"
|
||||
style="font-size:286.599px;line-height:1.25;text-align:end;text-anchor:end">Save Setting</tspan></text>
|
||||
<text
|
||||
|
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 46 KiB |
|
@ -23,12 +23,14 @@ Where `<TARGET>` must be replaced with the name of the target that you want to b
|
|||
## Windows 10
|
||||
|
||||
Docker on Windows requires full paths for mounting volumes in `docker run` commands. For example: `c:\Users\pspyc\Documents\Projects\inav` becomes `//c/Users/pspyc/Documents/Projects/inav` .
|
||||
If you are getting error "standard_init_linux.go:219: exec user process caused: no such file or directory", make sure `\cmake\docker.sh` has lf (not crlf) line endings.
|
||||
|
||||
You'll have to manually execute the same steps that the build script does:
|
||||
|
||||
1. `docker build -t inav-build .`
|
||||
+ This step is only needed the first time.
|
||||
2. `docker run --rm -it -v <PATH_TO_REPO>:/src inav-build <TARGET>`
|
||||
2. `docker run --rm -it -u root -v <PATH_TO_REPO>:/src inav-build <TARGET>`
|
||||
+ Where `<PATH_TO_REPO>` must be replaced with the absolute path of where you cloned this repo (see above), and `<TARGET>` with the name of the target that you want to build.
|
||||
+ Note that on Windows/WSL 2 mounted /src folder is writeable for root user only. You have to run build under root user. You can achieve this by using `-u root` option in the command line above, or by removing "USER inav" line from the .\DockerFile before building image.
|
||||
|
||||
Refer to the [Linux](#Linux) instructions or the [build script](/build.sh) for more details.
|
|
@ -65,7 +65,7 @@ The `git clone` creates an `inav` directory; we can enter this directory, config
|
|||
|
||||
## Build tooling
|
||||
|
||||
For 2.6 and later, inav uses `cmake` as its primary build tool. `cmake` simplies various platform and hardware dependencies required to cross compile multiple targets. `cmake` still uses GNU `make` to invoke the actual compiler. It is necessary to configure the build enviroment with `cmake` before we can build any firmware.
|
||||
For 2.6 and later, inav uses `cmake` as its primary build tool. `cmake` simplifies various platform and hardware dependencies required to cross compile multiple targets. `cmake` still uses GNU `make` to invoke the actual compiler. It is necessary to configure the build environment with `cmake` before we can build any firmware.
|
||||
|
||||
## Using `cmake`
|
||||
|
||||
|
@ -96,14 +96,14 @@ Once `cmake` has generated the `build/Makefile`, this `Makfile` (with `make`) is
|
|||
|
||||
The generated `Makefile` uses different a target selection mechanism from the older (pre 2.6) top level `Makefile`; you can generate a list of targets with `make help` (or, as the list is extremely long), pipe this into a pager, e.g. `make help | less`.
|
||||
|
||||
Typically, to build a single target, just pass the target name to `make`; note that unlike eariler releases, `make` without a target specified will build **all** targets.
|
||||
Typically, to build a single target, just pass the target name to `make`; note that unlike earlier releases, `make` without a target specified will build **all** targets.
|
||||
|
||||
```
|
||||
# Build the MATEKF405 firmware
|
||||
make MATEKF405
|
||||
```
|
||||
|
||||
One can also build multiple targets from a sinlge `make` command:
|
||||
One can also build multiple targets from a single `make` command:
|
||||
|
||||
```
|
||||
make MATEKF405 MATEKF722
|
||||
|
@ -128,7 +128,7 @@ make clean_MATEKF405
|
|||
make clean_MATEKF405 clean_MATEKF722
|
||||
```
|
||||
|
||||
### `cmake` cache maintainance
|
||||
### `cmake` cache maintenance
|
||||
|
||||
`cmake` caches the build environment, so you don't need to rerun `cmake` each time you build a target. Two `make` options are provided to maintain the `cmake` cache.
|
||||
|
||||
|
@ -141,7 +141,7 @@ It is unlikely that the typical user will need to employ these options, other th
|
|||
|
||||
In order to update your local firmware build:
|
||||
|
||||
* Navigate to the local iNav repository
|
||||
* Navigate to the local inav repository
|
||||
* Use the following steps to pull the latest changes and rebuild your local version of inav firmware from the `build` directory:
|
||||
|
||||
```
|
||||
|
@ -154,3 +154,9 @@ $ make <TARGET>
|
|||
## Advanced Usage
|
||||
|
||||
For more advanced development information and `git` usage, please refer to the [development guide](https://github.com/iNavFlight/inav/blob/master/docs/development/Development.md).
|
||||
|
||||
## Unsupported platforms
|
||||
|
||||
If you're using a host platform for which Arm does not supply a cross-compiler (Arm32, IA32), and the distro either does not package a suitable compiler or it's too old, then you can usually find a suitable compiler in the [xpack devtools collection](https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack).
|
||||
|
||||
You will need to configure `cmake` to use the external compiler.
|
||||
|
|
|
@ -20,13 +20,13 @@ Install Ubuntu:
|
|||
NOTE: from this point all commands are entered into the Ubunto shell command window
|
||||
|
||||
Update the repo packages:
|
||||
1. `sudo apt update`
|
||||
- `sudo apt update`
|
||||
|
||||
Install Git, Make, gcc and Ruby
|
||||
1. `sudo apt-get install git`
|
||||
1. `sudo apt-get install make`
|
||||
1. `sudo apt-get install cmake`
|
||||
1. `sudo apt-get install ruby`
|
||||
- `sudo apt-get install git make cmake ruby`
|
||||
|
||||
Install python and python-yaml to allow updates to settings.md
|
||||
- `sudo apt-get install python3 python-yaml`
|
||||
|
||||
### CMAKE and Ubuntu 18_04
|
||||
|
||||
|
@ -78,6 +78,12 @@ cd build
|
|||
make MATEKF722
|
||||
```
|
||||
|
||||
## Updating the documents
|
||||
```
|
||||
cd /mnt/c/inav
|
||||
python3 src/utils/update_cli_docs.py
|
||||
```
|
||||
|
||||
## Flashing:
|
||||
Launch windows configurator GUI and from within the firmware flasher select `Load firmware[Local]`
|
||||
Hex files can be found in the folder `c:\inav\build`
|
80
docs/development/Building in Windows 10 or 11 with MSYS2.md
Normal file
80
docs/development/Building in Windows 10 or 11 with MSYS2.md
Normal file
|
@ -0,0 +1,80 @@
|
|||
# General Info
|
||||
|
||||
This is a guide on how to use Windows MSYS2 distribution and building platform to build iNav firmware. This environment is very simple to manage and does not require installing docker for Windows which may get in the way of VMWare or any other virtualization software you already have running for other reasons. Another benefit of this approach is that the compiler runs natively on Windows, so performance is much better than compiling in a virtual environment or a container. You can also integrate with whatever IDE you are using to make code edits and work with github, which makes the entire development and testing workflow a lot more efficient. In addition to MSYS2, this build environment also uses Arm Embedded GCC tolkit from The xPack Project, which provides many benefits over the toolkits maintained by arm.com
|
||||
|
||||
Some of those benefits are described here:
|
||||
|
||||
https://xpack.github.io/arm-none-eabi-gcc/
|
||||
|
||||
## Setting up build environment
|
||||
|
||||
Download MSYS2 for your architecture (most likely 64-bit)
|
||||
|
||||
https://www.msys2.org/wiki/MSYS2-installation/
|
||||
|
||||
Click on 64-bit, scroll all the way down for the latest release
|
||||
|
||||
pacman is the package manager which makes it a lot easier to install and maintain all the dependencies
|
||||
|
||||
## Installing dependencies
|
||||
|
||||
Once MSYS2 is installed, you can open up a new terminal window by running:
|
||||
|
||||
"C:\msys64\mingw64.exe"
|
||||
|
||||
You can also make a shortcut of this somewhere on your taskbar, desktop, etc, or even setup a shortcut key to open it up every time you need to get a terminal window. If you right click on the window you can customize the font and layout to make it more comfortable to work with. This is very similar to cygwin or any other terminal program you might have used before
|
||||
|
||||
This is the best part:
|
||||
```
|
||||
pacman -S git ruby make cmake gcc mingw-w64-x86_64-libwinpthread-git unzip wget
|
||||
```
|
||||
|
||||
Now, each release needs a different version of arm toolchain. To setup the xPack ARM toolchain, use the following process:
|
||||
|
||||
First, setup your work path, get the release you want to build or master if you want the latest/greatest
|
||||
```
|
||||
mkdir /c/Workspace
|
||||
cd /c/Workspace
|
||||
# you can also check out your own fork here which makes contributing easier
|
||||
git clone https://github.com/iNavFlight/inav
|
||||
cd inav
|
||||
# switch to release you want or skip next 2 lines if you want latest
|
||||
git fetch origin
|
||||
git checkout -b release_2.6.1 origin/release_2.6.1
|
||||
```
|
||||
Now create the build and xpack directories and get the toolkit version you need for your inav version
|
||||
```
|
||||
mkdir build
|
||||
cd build
|
||||
mkdir /c/Workspace/xpack
|
||||
cd /c/Workspace/xpack
|
||||
cat /c/Workspace/inav/cmake/arm-none-eabi-checks.cmake | grep "set(arm_none_eabi_gcc_version" | cut -d\" -f2
|
||||
```
|
||||
This will give you the version you need for any given release or master branch. You can get to all the releases here and find the version you need
|
||||
|
||||
https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/
|
||||
```
|
||||
# for version 2.6.1, version needed is 9.2.1
|
||||
wget https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v9.2.1-1.1/xpack-arm-none-eabi-gcc-9.2.1-1.1-win32-x64.zip
|
||||
unzip xpack-arm-none-eabi-gcc-9.2.1-1.1-win32-x64.zip
|
||||
```
|
||||
This is important, put the toolkit first before your path so that it is picked up ahead of any other versions that may be present on your system
|
||||
```
|
||||
export PATH=/c/Workspace/xpack/xpack-arm-none-eabi-gcc-9.2.1-1.1/bin:$PATH
|
||||
cd /c/Workspace/inav/build
|
||||
```
|
||||
You may need to run rm -rf * in build directory if you had any failed previous runs now run cmake
|
||||
```
|
||||
# while inside the build directory
|
||||
cmake ..
|
||||
```
|
||||
Once that's done you can compile the firmware for your controller
|
||||
```
|
||||
make DALRCF405
|
||||
```
|
||||
To get a list of available targets in iNav, see the target src folder
|
||||
https://github.com/tednv/inav/tree/master/src/main/target
|
||||
|
||||
The generated hex file will be in /c/Workspace/inav/build folder
|
||||
|
||||
At the time of writting this document, I believe this is the fastest, easiest, and most efficient Windows build environment that is available. I have used this approach several years ago and was very happy with it building iNav 2.1 and 2.2, and now I'm getting back into it so figured I would share my method
|
|
@ -79,30 +79,6 @@ Edit `./.vscode/tasks.json` to enable Building with `Ctrl + Shift + B` keyboard
|
|||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Build Matek F722-SE",
|
||||
"type": "shell",
|
||||
"command": "make MATEKF722SE",
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/build"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Build Matek F722",
|
||||
"type": "shell",
|
||||
"command": "make MATEKF722",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/build"
|
||||
}
|
||||
}
|
||||
,
|
||||
{
|
||||
"label": "Install/Update CMAKE",
|
||||
"type": "shell",
|
||||
|
@ -112,6 +88,37 @@ Edit `./.vscode/tasks.json` to enable Building with `Ctrl + Shift + B` keyboard
|
|||
"options": {
|
||||
"cwd": "${workspaceFolder}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Compile autogenerated docs",
|
||||
"type": "shell",
|
||||
"command": "python3 src/utils/update_cli_docs.py",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}"
|
||||
}
|
||||
},
|
||||
// Example of building a single target
|
||||
{
|
||||
"label": "Build Matek F722-WPX",
|
||||
"type": "shell",
|
||||
"command": "make MATEKF722WPX",
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/build"
|
||||
}
|
||||
},
|
||||
// Example of building multiple targets
|
||||
{
|
||||
"label": "Build Matek F405-STD & WING",
|
||||
"type": "shell",
|
||||
"command": "make MATEKF405 MATEKF405SE",
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/build"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue