mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-14 03:49:58 +03:00
262 lines
10 KiB
Markdown
262 lines
10 KiB
Markdown
# Environment prerequistes
|
|
- Windows 10/11
|
|
- WSL2 (Ubuntu 20.04), [how to install WSL2](https://docs.microsoft.com/en-us/windows/wsl/install)
|
|
- **ATTENTION:** Works ONLY on WSL2 Kernel version 5.10.60.1 or later, check it with command `uname -a` and if it is lower - update WSL2
|
|
- Using Windows Update: Start > Settings > Windows Update > Advanced Options > Receive updates for other Microsoft products SHOULD be Turned ON
|
|
- Start > Settings > Windows Update > Check for updates
|
|
- Using Elevated Command Prompt: wsl --update
|
|
- NOTE: If your WSL is V1 -> Switch it to V2 or install new WSL (Ubuntu 20.04) instance (switching are done with command `wsl --set-default-version 2`)
|
|
- ST-Link V2 Debugger
|
|
- INAV Project are Cloned from GitHub to WSL2 storage space, look at:
|
|
- [IDE - Visual Studio Code with Windows 10](https://github.com/iNavFlight/inav/blob/master/docs/development/IDE%20-%20Visual%20Studio%20Code%20with%20Windows%2010.md)
|
|
- [Building in Windows 10 or 11 with Linux Subsystem](https://github.com/iNavFlight/inav/blob/master/docs/development/Building%20in%20Windows%2010%20or%2011%20with%20Linux%20Subsystem.md)
|
|
- [Hardware Debugging](https://github.com/iNavFlight/inav/blob/master/docs/development/Hardware%20Debugging.md)
|
|
|
|
# Installation
|
|
## WSL2 Setup
|
|
### Install prerequistes
|
|
- `sudo apt install linux-tools-5.4.0-77-generic hwdata`
|
|
- `sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20`
|
|
- `sudo apt install libncurses5`
|
|
### Adjust rules to allow connecting with non-root
|
|
The following script creates access rules for ST-LINK V2, V2.1 and V3 and for some USB-to-serial converters, download it to new file under you home folder, save, change attributes and run
|
|
- `nano createrules.sh`
|
|
- Copy and Paste script below
|
|
- Ctrl-X
|
|
- Y
|
|
- Enter
|
|
- `sudo chmod +x createrules.sh`
|
|
- `./createrules.sh`
|
|
```
|
|
#!/bin/bash
|
|
|
|
sudo tee /etc/udev/rules.d/70-st-link.rules > /dev/null <<'EOF'
|
|
# ST-LINK V2
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2_%n"
|
|
|
|
# ST-LINK V2.1
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
|
|
|
|
# ST-LINK V3
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n"
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
|
|
EOF
|
|
|
|
sudo tee /etc/udev/rules.d/70-usb-to-serial.rules > /dev/null <<'EOF'
|
|
# CP2101 - CP 2104
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_%n"
|
|
|
|
# ATEN UC-232A
|
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0557", ATTRS{idProduct}=="2008", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_aten_%n"
|
|
EOF
|
|
|
|
sudo udevadm control --reload-rules
|
|
```
|
|
#### In case you want reload services manually later
|
|
- `sudo service udev restart`
|
|
- `udevadm control --reload`
|
|
|
|
## Windows Setup
|
|
- Download last usbipd from [here](https://github.com/dorssel/usbipd-win/releases)
|
|
- Install it
|
|
|
|
## VS Code Setup
|
|
- INAV project is on WSL drive
|
|
- Folder opened using WSL Remote extension
|
|
- Cortex Debug extension installed
|
|
- CMake will install all dependencies after first build automatically
|
|
- Use configuration files provided below, place them to `.vscode` subfolder (create it if required)
|
|
|
|
# Debugging
|
|
## Preparing for debugging (before each new debug session)
|
|
### Open WSL2 prompt
|
|
- Go to project folder
|
|
- `lsusb`
|
|
- `sudo /lib/systemd/systemd-udevd --daemon`
|
|
- `sudo udevadm control --reload-rules && udevadm trigger`
|
|
- REPLUG USB
|
|
### Open Elevated Command Prompt (Run as Administrator)
|
|
- `usbipd wsl list` - shows you plugged and accessible USB devices
|
|
- `usbipd wsl attach --busid ID_OF_DEVICE_FROM_FIRST_COMMAND` - will attach USB device to WSL
|
|
- Just for info: `usbipd detach --busid ID_OF_DEVICE_FROM_FIRST_COMMAND` - will deattach USB device from WSL
|
|
### Back to WSL2 prompt
|
|
- `lsusb` - should show you just attached USB device
|
|
- `st-info --probe` - should "see" ST-Link and MCU
|
|
|
|
#### Leave Command Prompt and WSL Prompt minimized (for later usage)
|
|
#### **NOTE:** Due to some USB reconnect issues, sometimes, is need to execute `usbipd wsl list` and `usbipd wsl attach...` commands again, to reconnect ST-Link to WSL
|
|
|
|
## Debugging
|
|
- Connect SWD from ST-Link to FC board (at least GND, SWDIO and SWCLK should be connected, but connecting Vref to +3.3V pad and RESET accordingly will improve debugging stability a lot!)
|
|
- Power FC (can be powered from USB)
|
|
- Select (Debug) CMake configuration
|
|
- Build required target from VSCode
|
|
- Use VS Code Run -> Start Debugging (F5) menu (make sure debugging target is "Cortex Debug")
|
|
|
|
**NOTE:** sometimes "autobuild" script is not performed well, it is recommended to repeat last two steps every time you change code and need "reflash-debug"
|
|
|
|
**NOTE:** after long and/or intensive debugging OpenOCD can crash, in this case just reopen VSCode, replug ST-Link USB, reattach USB to WSL and start debug session again
|
|
|
|
# Troubleshooting
|
|
- OpenOCD shows Permission denied during "Flashing":
|
|
- Go to WSL, INAV Project folder and run `cd src/utils` and `sudo chmod +x *`
|
|
- If running from WSL itself and get errors:
|
|
- Go to WSL and run
|
|
- `sudo apt install gdb-multiarch`
|
|
- `sudo ln -s /usr/bin/gdb-multiarch /usr/bin/arm-none-eabi-gdb`
|
|
|
|
# References
|
|
- https://github.com/dorssel/usbipd-win/wiki/WSL-support
|
|
- https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/#:~:text=Select%20the%20bus%20ID%20of,to%20run%20a%20sudo%20command.&text=From%20within%20WSL%2C%20run%20lsusb,it%20using%20normal%20Linux%20tools.
|
|
- https://calinradoni.github.io/pages/200616-non-root-access-usb.html
|
|
|
|
# VS Code Example configurations
|
|
`launch.json`
|
|
```
|
|
{
|
|
// Use IntelliSense to learn about possible attributes.
|
|
// Hover to view descriptions of existing attributes.
|
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
|
|
// ******* INAV ********
|
|
// Define the following values in settings.json
|
|
// - BUILD_DIR: Relative path to the build directory
|
|
// - TARGET: Target name that you want to launch
|
|
|
|
"version": "0.2.0",
|
|
"configurations": [
|
|
{
|
|
"name": "Cortex Debug",
|
|
"cwd": "${workspaceRoot}",
|
|
"executable": "${config:BUILD_DIR}/bin/${config:TARGET}.elf",
|
|
"request": "launch",
|
|
"type": "cortex-debug",
|
|
"servertype": "openocd",
|
|
"device": "${config:TARGET}",
|
|
"configFiles": [
|
|
"${config:BUILD_DIR}/openocd/${config:TARGET}.cfg"
|
|
],
|
|
"preLaunchTask": "openocd-debug-prepare",
|
|
"svdFile": "${config:BUILD_DIR}/svd/${config:TARGET}.svd",
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
`settings.json`
|
|
```
|
|
{
|
|
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
|
|
"files.associations": {
|
|
"general_settings.h": "c",
|
|
"parameter_group.h": "c"
|
|
},
|
|
"BUILD_DIR": "build",
|
|
"TARGET": "MAMBAF405"
|
|
}
|
|
```
|
|
|
|
`tasks.json`
|
|
```
|
|
{
|
|
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
|
// for the documentation about the tasks.json format
|
|
"version": "2.0.0",
|
|
"options": {
|
|
"env": {
|
|
"TARGET": "${config:TARGET}",
|
|
}
|
|
},
|
|
"tasks": [
|
|
{
|
|
"label": "target",
|
|
"type": "shell",
|
|
"command": "make", "args": ["-C", "${config:BUILD_DIR}", "${config:TARGET}"],
|
|
"problemMatcher": "$gcc",
|
|
"group": {
|
|
"kind": "build",
|
|
"isDefault": true
|
|
},
|
|
"presentation": {
|
|
"echo": true,
|
|
"reveal": "always",
|
|
"focus": false,
|
|
}
|
|
},
|
|
{
|
|
"label": "flash",
|
|
"type": "shell",
|
|
"command": "make", "args": ["-C", "${config:BUILD_DIR}", "openocd_flash_${config:TARGET}"],
|
|
"dependsOn": "elf"
|
|
},
|
|
{
|
|
"label": "svd",
|
|
"type": "shell",
|
|
"command": "make", "args": ["-C", "${config:BUILD_DIR}", "svd_${config:TARGET}"],
|
|
"problemMatcher": []
|
|
},
|
|
{
|
|
"label": "openocd-cfg",
|
|
"type": "shell",
|
|
"command": "make", "args": ["-C", "${config:BUILD_DIR}", "openocd_cfg_${config:TARGET}"],
|
|
"problemMatcher": []
|
|
},
|
|
{
|
|
"label": "openocd-debug-prepare",
|
|
"type": "shell",
|
|
// "dependsOn": ["svd", "openocd-cfg", "flash"],
|
|
"dependsOn": ["svd", "openocd-cfg"],
|
|
"problemMatcher": []
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
`cpp_properties.json`
|
|
```
|
|
{
|
|
"configurations": [
|
|
{
|
|
"name": "Win32",
|
|
"includePath": [
|
|
"${workspaceRoot}",
|
|
"${workspaceRoot}/src/main/**"
|
|
],
|
|
"browse": {
|
|
"limitSymbolsToIncludedHeaders": false,
|
|
"path": [
|
|
"${workspaceRoot}/**"
|
|
]
|
|
},
|
|
"intelliSenseMode": "msvc-x64",
|
|
"cStandard": "c11",
|
|
"cppStandard": "c++17",
|
|
"defines": [
|
|
"USE_OSD",
|
|
"USE_GYRO_NOTCH_1",
|
|
"USE_GYRO_NOTCH_2",
|
|
"USE_DTERM_NOTCH",
|
|
"USE_ACC_NOTCH",
|
|
"USE_GYRO_BIQUAD_RC_FIR2",
|
|
"USE_D_BOOST",
|
|
"USE_SERIALSHOT",
|
|
"USE_ANTIGRAVITY",
|
|
"USE_ASYNC_GYRO_PROCESSING",
|
|
"USE_RPM_FILTER",
|
|
"USE_GLOBAL_FUNCTIONS",
|
|
"USE_DYNAMIC_FILTERS",
|
|
"USE_DSHOT",
|
|
"FLASH_SIZE 480",
|
|
"USE_I2C_IO_EXPANDER",
|
|
"USE_PCF8574",
|
|
"USE_ESC_SENSOR"
|
|
],
|
|
"configurationProvider": "ms-vscode.cmake-tools"
|
|
}
|
|
],
|
|
"version": 4
|
|
}
|
|
```
|