SD Card, Scratch Buffer and README updates #52
258
README.md
258
README.md
@ -1,6 +1,7 @@
|
|||||||
# <a id="top"></a> <a name="linux"></a> EIVE On-Board Software
|
<a id="top"></a> <a name="linux"></a> EIVE On-Board Software
|
||||||
|
======
|
||||||
|
|
||||||
## General information
|
# General information
|
||||||
|
|
||||||
Target systems:
|
Target systems:
|
||||||
|
|
||||||
@ -28,9 +29,9 @@ The CMake build system can be used to generate build systems as well (see helper
|
|||||||
- Linux Host: Uses the `bsp_hosted` BSP folder and the CMake Unix Makefiles generator.
|
- Linux Host: Uses the `bsp_hosted` BSP folder and the CMake Unix Makefiles generator.
|
||||||
- Windows Host: Uses the `bsp_hosted` BSP folder, the CMake MinGW Makefiles generator and MSYS2.
|
- Windows Host: Uses the `bsp_hosted` BSP folder, the CMake MinGW Makefiles generator and MSYS2.
|
||||||
|
|
||||||
## Setting up development environment
|
# Setting up development environment
|
||||||
|
|
||||||
### Installing Vivado the the Xilinx development tools
|
## Installing Vivado the the Xilinx development tools
|
||||||
|
|
||||||
It's also possible to perform debugging with a normal Eclipse installation by installing
|
It's also possible to perform debugging with a normal Eclipse installation by installing
|
||||||
the TCF plugin and downloading the cross-compiler as specified in the section below.
|
the TCF plugin and downloading the cross-compiler as specified in the section below.
|
||||||
@ -40,18 +41,19 @@ the TCF plugin and downloading the cross-compiler as specified in the section be
|
|||||||
|
|
||||||
* Install settings. In the Devices selection, it is sufficient to pick SoC → Zynq-7000: <br>
|
* Install settings. In the Devices selection, it is sufficient to pick SoC → Zynq-7000: <br>
|
||||||
|
|
||||||
<img src="https://egit.irs.uni-stuttgart.de/eive/eive-obsw/src/branch/develop/doc/img/vivado-edition.png" width="50%"> <br>
|
<img src="./doc/img/vivado-edition.png" width="50%"> <br>
|
||||||
|
|
||||||
<img src="https://egit.irs.uni-stuttgart.de/eive/eive-obsw/src/branch/develop/doc/img/vivado-hl-design.png" width="50%"> <br>
|
<img src="./doc/img/vivado-hl-design.png" width="50%"> <br>
|
||||||
|
|
||||||
<img src="https://egit.irs.uni-stuttgart.de/eive/eive-obsw/src/branch/develop/doc/img/xilinx-install.PNG" width="50%"> <br>
|
<img src="./doc/img/xilinx-install.PNG" width="50%"> <br>
|
||||||
|
|
||||||
* For supported OS refer to https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_2/ug973-vivado-release-notes-install-license.pdf
|
* For supported OS refer to https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_2/ug973-vivado-release-notes-install-license.pdf .
|
||||||
* Add path of linux cross-compiler to permanent environment variables (`.profile` file in Linux):
|
Installation was tested on Windows and Ubuntu 21.04.
|
||||||
|
* Add path of linux cross-compiler to permanent environment variables (`.bashrc` file in Linux):
|
||||||
`<XilinxInstallation>\SDK\2018.2\gnu\aarch32\nt\gcc-arm-linux-gnueabi\bin`
|
`<XilinxInstallation>\SDK\2018.2\gnu\aarch32\nt\gcc-arm-linux-gnueabi\bin`
|
||||||
or set up path each time before debugging.
|
or set up path each time before debugging.
|
||||||
|
|
||||||
### Installing toolchain without Vivado
|
## Installing toolchain without Vivado
|
||||||
|
|
||||||
You can download the toolchains for Windows and Linux
|
You can download the toolchains for Windows and Linux
|
||||||
[from the EIVE cloud](https://eive-cloud.irs.uni-stuttgart.de/index.php/apps/files?dir=/EIVE_IRS/Software/tools&fileid=831898).
|
[from the EIVE cloud](https://eive-cloud.irs.uni-stuttgart.de/index.php/apps/files?dir=/EIVE_IRS/Software/tools&fileid=831898).
|
||||||
@ -69,7 +71,7 @@ or the following command for Linux (could be useful for CI/CD)
|
|||||||
wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/2Fp2ag6NGnbtAsK/download/gcc-arm-linux-gnueabi.tar.gz
|
wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/2Fp2ag6NGnbtAsK/download/gcc-arm-linux-gnueabi.tar.gz
|
||||||
```
|
```
|
||||||
|
|
||||||
### Installing CMake and MSYS2 on Windows
|
## Installing CMake and MSYS2 on Windows
|
||||||
|
|
||||||
1. Install [MSYS2](https://www.msys2.org/) and [CMake](https://cmake.org/download/) first.
|
1. Install [MSYS2](https://www.msys2.org/) and [CMake](https://cmake.org/download/) first.
|
||||||
|
|
||||||
@ -94,7 +96,7 @@ wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/2Fp2ag6NGnbtAsK/downloa
|
|||||||
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb python3
|
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb python3
|
||||||
```
|
```
|
||||||
|
|
||||||
### Installing CMake on Linux
|
## Installing CMake on Linux
|
||||||
|
|
||||||
1. Run the following command
|
1. Run the following command
|
||||||
|
|
||||||
@ -117,7 +119,7 @@ wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/agnJGYeRf6fw2ci/downloa
|
|||||||
|
|
||||||
Then, create a new environmental variables `Q7S_SYSROOT` and set it to the local system root path.
|
Then, create a new environmental variables `Q7S_SYSROOT` and set it to the local system root path.
|
||||||
|
|
||||||
## Building the software with CMake
|
# Building the software with CMake
|
||||||
|
|
||||||
When using Windows, run theses steps in MSYS2.
|
When using Windows, run theses steps in MSYS2.
|
||||||
|
|
||||||
@ -153,7 +155,7 @@ When using Windows, run theses steps in MSYS2.
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
cd cmake/scripts/Q7S
|
cd cmake/scripts/Q7S
|
||||||
./create_cmake_debug.sh
|
./make_debug_cfg.sh
|
||||||
cd ../../..
|
cd ../../..
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -230,7 +232,7 @@ IP address and path settings differ from machine to machine.
|
|||||||
You can run it manually there. To perform auto-start on boot, have a look at the start-up
|
You can run it manually there. To perform auto-start on boot, have a look at the start-up
|
||||||
application section.
|
application section.
|
||||||
|
|
||||||
## Debugging the software via Flatsat PC
|
# Debugging the software via Flatsat PC
|
||||||
|
|
||||||
Open SSH connection to flatsat PC:
|
Open SSH connection to flatsat PC:
|
||||||
|
|
||||||
@ -269,7 +271,8 @@ the process using it with `q7s_kill`.
|
|||||||
|
|
||||||
You can use `AltGr` + `X` to exit the picocom session.
|
You can use `AltGr` + `X` to exit the picocom session.
|
||||||
|
|
||||||
To debug an application, first make sure a static IP address is assigned to the Q7S. Run ifconfig on the Q7S serial console.
|
To debug an application, first make sure a static IP address is assigned to the Q7S. Run ifconfig
|
||||||
|
on the Q7S serial console.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ifconfig
|
ifconfig
|
||||||
@ -289,12 +292,14 @@ To launch application from Xilinx SDK setup port fowarding on the development ma
|
|||||||
ssh -L 1534:192.168.133.10:1534 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 -t bash
|
ssh -L 1534:192.168.133.10:1534 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 -t bash
|
||||||
```
|
```
|
||||||
|
|
||||||
This forwards any requests to localhost:1534 to the port 1534 of the Q7S with the IP address 192.168.133.10.
|
This forwards any requests to localhost:1534 to the port 1534 of the Q7S with the IP address
|
||||||
|
192.168.133.10.
|
||||||
This needs to be done every time, so it is recommended to create an alias to do this quickly.
|
This needs to be done every time, so it is recommended to create an alias to do this quickly.
|
||||||
|
|
||||||
Note: When now setting up a debug session in the Xilinx SDK, the host must be set to localhost instead of the IP address of the Q7S.
|
Note: When now setting up a debug session in the Xilinx SDK or Eclipse, the host must be set
|
||||||
|
to localhost instead of the IP address of the Q7S.
|
||||||
|
|
||||||
## Transfering files via SCP
|
# Transfering files via SCP
|
||||||
|
|
||||||
To transfer files from the local machine to the Q7S, use port forwarding
|
To transfer files from the local machine to the Q7S, use port forwarding
|
||||||
|
|
||||||
@ -318,11 +323,11 @@ From a windows machine files can be copied with putty tools (note: use IPv4 addr
|
|||||||
pscp -scp -P 22 eive@192.168.199.227:</directory-to-example-file/>/example-file </windows-machine-path/>
|
pscp -scp -P 22 eive@192.168.199.227:</directory-to-example-file/>/example-file </windows-machine-path/>
|
||||||
````
|
````
|
||||||
|
|
||||||
## Launching an application at start-up
|
# Launching an application at start-up
|
||||||
|
|
||||||
Load the root partiton from the flash memory (there are to nor-flash memories and each flash holds two xdi images).
|
Load the root partiton from the flash memory (there are to nor-flash memories and each flash holds
|
||||||
Note: It is not possible to modify the currently loaded root partition, e.g. creating directories. To do this,
|
two xdi images). Note: It is not possible to modify the currently loaded root partition, e.g.
|
||||||
the parition needs to be mounted.
|
creating directories. To do this, the parition needs to be mounted.
|
||||||
|
|
||||||
1. Disable write protection of the desired root partition
|
1. Disable write protection of the desired root partition
|
||||||
|
|
||||||
@ -340,11 +345,13 @@ the parition needs to be mounted.
|
|||||||
3. Copy the executable to `/usr/bin`
|
3. Copy the executable to `/usr/bin`
|
||||||
|
|
||||||
4. Make sure the permissions to execute the application are set
|
4. Make sure the permissions to execute the application are set
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
chmod +x application
|
chmod +x application
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Create systemd service in /lib/systemd/system. The following shows an example service.
|
5. Create systemd service in /lib/systemd/system. The following shows an example service.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cat > example.service
|
cat > example.service
|
||||||
[Unit]
|
[Unit]
|
||||||
@ -361,8 +368,8 @@ the parition needs to be mounted.
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
6. Enable the service. This is normally done with systemctl enable. However, this is not possible when the service is
|
6. Enable the service. This is normally done with systemctl enable. However, this is not possible
|
||||||
created for a mounted root partition. Therefore create a symlink as follows.
|
when the service is created for a mounted root partition. Therefore create a symlink as follows.
|
||||||
```sh
|
```sh
|
||||||
ln -s '/tmp/the-mounted-xdi-image/lib/systemd/system/example.service' '/tmp/the-mounted-xdi-image/etc/systemd/system/multi-user.target.wants/example.service'
|
ln -s '/tmp/the-mounted-xdi-image/lib/systemd/system/example.service' '/tmp/the-mounted-xdi-image/etc/systemd/system/multi-user.target.wants/example.service'
|
||||||
```
|
```
|
||||||
@ -380,37 +387,14 @@ the parition needs to be mounted.
|
|||||||
```sh
|
```sh
|
||||||
systemctl status example
|
systemctl status example
|
||||||
```
|
```
|
||||||
|
|
||||||
More detailed information about the used q7s commands can be found in the Q7S user manual.
|
More detailed information about the used q7s commands can be found in the Q7S user manual.
|
||||||
|
|
||||||
### Bringing up CAN
|
|
||||||
|
|
||||||
```sh
|
|
||||||
ip link set can0 down
|
|
||||||
ip link set can0 type can loopback off
|
|
||||||
ip link set can0 up type can bitrate 1000000
|
|
||||||
```
|
|
||||||
|
|
||||||
Following command sends 8 bytes to device with id 99 (for petalinux)
|
|
||||||
````
|
|
||||||
cansend can0 -i99 99 88 77 11 33 11 22 99
|
|
||||||
````
|
|
||||||
For Q7S use this:
|
|
||||||
````
|
|
||||||
cansend can0 5A1#11.22.33.44.55.66.77.88
|
|
||||||
````
|
|
||||||
Turn loopback mode on:
|
|
||||||
````
|
|
||||||
ip link set can0 type can bitrate 1000000 loopback on
|
|
||||||
````
|
|
||||||
Reading data from CAN:
|
|
||||||
````
|
|
||||||
candump can0
|
|
||||||
````
|
|
||||||
|
|
||||||
## Setting up UNIX environment for real-time functionalities
|
## Setting up UNIX environment for real-time functionalities
|
||||||
|
|
||||||
Please note that on most UNIX environments (e.g. Ubuntu), the real time functionalities
|
Please note that on most UNIX environments (e.g. Ubuntu), the real time functionalities
|
||||||
used by the UNIX pthread module are restricted, which will lead to permission errors when creating these tasks
|
used by the UNIX pthread module are restricted, which will lead to permission errors when creating
|
||||||
and configuring real-time properites like scheduling priorities.
|
these tasks and configuring real-time properites like scheduling priorities.
|
||||||
|
|
||||||
To solve this issues, try following steps:
|
To solve this issues, try following steps:
|
||||||
|
|
||||||
@ -435,58 +419,27 @@ required for some framework components. The recommended values for the new messa
|
|||||||
length is 130.
|
length is 130.
|
||||||
|
|
||||||
2. Edit the /etc/sysctl.conf file
|
2. Edit the /etc/sysctl.conf file
|
||||||
```sh
|
|
||||||
sudo nano /etc/sysctl.conf
|
|
||||||
```
|
|
||||||
Append at end:
|
|
||||||
```sh
|
|
||||||
fs/mqueue/msg_max = <newMsgMaxLen>
|
|
||||||
```
|
|
||||||
Apply changes with:
|
|
||||||
```sh
|
|
||||||
sudo sysctl -p
|
|
||||||
```
|
|
||||||
|
|
||||||
A possible solution which only persists for the current session is
|
```sh
|
||||||
```sh
|
sudo nano /etc/sysctl.conf
|
||||||
echo <newMsgMax> | sudo tee /proc/sys/fs/mqueue/msg_max
|
```
|
||||||
```
|
|
||||||
or running the `unlockRealtime` script.
|
|
||||||
|
|
||||||
3. Run the shell script inside the linux folder
|
Append at end:
|
||||||
```sh
|
```sh
|
||||||
./unlockRealtime
|
fs/mqueue/msg_max = <newMsgMaxLen>
|
||||||
```
|
```
|
||||||
This script executes the `sudo setcap 'cap_sys_nice=eip' \<application\>`
|
|
||||||
command on the binaries, increases the soft real time limit of the current
|
Apply changes with:
|
||||||
session and increases the maximum number of message queues by setting
|
```sh
|
||||||
`/proc/sys/fs/mqueue/msg_max`.
|
sudo sysctl -p
|
||||||
All changes are only applied for the current session (read 2. and 3. for
|
```
|
||||||
a permanent solution). If running the script before executing the binary does
|
|
||||||
not help or an warning is issue that the soft real time value is invalid,
|
|
||||||
the hard real-time limit of the system might not be high enough (see step 1).
|
|
||||||
|
|
||||||
## Flight Software Framework (FSFW)
|
A possible solution which only persists for the current session is
|
||||||
|
```sh
|
||||||
|
echo <newMsgMax> | sudo tee /proc/sys/fs/mqueue/msg_max
|
||||||
|
```
|
||||||
|
|
||||||
An EIVE fork of the FSFW is submodules into this repository.
|
# PCDU
|
||||||
To add the master upstream branch and merge changes and updates from it
|
|
||||||
into the fork, run the following command in the fsfw folder first:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git remote add upstream https://egit.irs.uni-stuttgart.de/fsfw/fsfw.git
|
|
||||||
git remote update --prune
|
|
||||||
```
|
|
||||||
|
|
||||||
After that, an update can be merged by running
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git merge upstream/master
|
|
||||||
```
|
|
||||||
|
|
||||||
Alternatively, changes from other upstreams (forks) and branches can be merged like that in
|
|
||||||
the same way.
|
|
||||||
|
|
||||||
## PCDU
|
|
||||||
|
|
||||||
Connect to serial console of P60 Dock
|
Connect to serial console of P60 Dock
|
||||||
````
|
````
|
||||||
@ -511,10 +464,11 @@ p60-dock # param get out_en[0]
|
|||||||
GET out_en[0] = 1
|
GET out_en[0] = 1
|
||||||
````
|
````
|
||||||
|
|
||||||
## Debugging the software (when workstation is directly conncected to Q7S)
|
# Debugging the software (when workstation is directly conncected to Q7S)
|
||||||
|
|
||||||
1. Assign static IP address to Q7S
|
1. Assign static IP address to Q7S
|
||||||
* Open serial console of Q7S (Accessible via the micro-USB of the PIM, see also Q7S user maunal chapter 10.3)
|
* Open serial console of Q7S (Accessible via the micro-USB of the PIM, see also Q7S user
|
||||||
|
manual chapter 10.3)
|
||||||
* Baudrate 115200
|
* Baudrate 115200
|
||||||
* Login to Q7S:
|
* Login to Q7S:
|
||||||
* user: root
|
* user: root
|
||||||
@ -562,10 +516,10 @@ GET out_en[0] = 1
|
|||||||
11. Test connection (This ensures the TCF Agent is running on the Q7S)
|
11. Test connection (This ensures the TCF Agent is running on the Q7S)
|
||||||
12. Select Application tab
|
12. Select Application tab
|
||||||
* Project Name: eive_obsw
|
* Project Name: eive_obsw
|
||||||
* Local File Path: Path to eiveobsw-linux.elf (in _bin\linux\devel)
|
* Local File Path: Path to eiveobsw-linux.elf (in `_bin\linux\devel`)
|
||||||
* Remote File Path: /tmp/eive_obsw.elf
|
* Remote File Path: `/tmp/eive_obsw.elf`
|
||||||
|
|
||||||
## Running cppcheck on the Software
|
# Running cppcheck on the Software
|
||||||
|
|
||||||
Static code analysis can be useful to find bugs.
|
Static code analysis can be useful to find bugs.
|
||||||
`cppcheck` can be used for this purpose. On Windows you can use MinGW64 to do this.
|
`cppcheck` can be used for this purpose. On Windows you can use MinGW64 to do this.
|
||||||
@ -597,6 +551,15 @@ Finally, you can convert the generated `.xml` file to HTML with the following co
|
|||||||
cppcheck-htmlreport --file=report.xml --report-dir=cppcheck --source-dir=..
|
cppcheck-htmlreport --file=report.xml --report-dir=cppcheck --source-dir=..
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Special notes on Eclipse
|
||||||
|
|
||||||
|
When using Eclipse, there are two special build variables in the project properties
|
||||||
|
→ C/C++ Build → Build Variables called `Q7S_SYSROOT` or `RPI_SYSROOT`. You can set
|
||||||
|
the sysroot path in those variables to get any additional includes like `gpiod.h` in the
|
||||||
|
Eclipse indexer.
|
||||||
|
|
||||||
|
# Q7S Utilities
|
||||||
|
|
||||||
## Libgpiod
|
## Libgpiod
|
||||||
|
|
||||||
Detect all gpio device files:
|
Detect all gpio device files:
|
||||||
@ -626,7 +589,54 @@ gpioget <gpiogroup> <offset>
|
|||||||
Example to get state:
|
Example to get state:
|
||||||
gpioget gpiochip7 14
|
gpioget gpiochip7 14
|
||||||
|
|
||||||
## Running the EIVE OBSW on a Raspberry Pi
|
## Xilinx UARTLIE
|
||||||
|
|
||||||
|
Get info about ttyUL* devices
|
||||||
|
````
|
||||||
|
cat /proc/tty/driver
|
||||||
|
````
|
||||||
|
|
||||||
|
## I2C
|
||||||
|
|
||||||
|
Getting information about I2C device
|
||||||
|
````
|
||||||
|
ls /sys/class/i2c-dev/i2c-0/device/device/driver
|
||||||
|
````
|
||||||
|
This shows the memory mapping of /dev/i2c-0
|
||||||
|
|
||||||
|
## CAN
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ip link set can0 down
|
||||||
|
ip link set can0 type can loopback off
|
||||||
|
ip link set can0 up type can bitrate 1000000
|
||||||
|
```
|
||||||
|
|
||||||
|
Following command sends 8 bytes to device with id 99 (for petalinux)
|
||||||
|
````
|
||||||
|
cansend can0 -i99 99 88 77 11 33 11 22 99
|
||||||
|
````
|
||||||
|
For Q7S use this:
|
||||||
|
````
|
||||||
|
cansend can0 5A1#11.22.33.44.55.66.77.88
|
||||||
|
````
|
||||||
|
Turn loopback mode on:
|
||||||
|
````
|
||||||
|
ip link set can0 type can bitrate 1000000 loopback on
|
||||||
|
````
|
||||||
|
Reading data from CAN:
|
||||||
|
````
|
||||||
|
candump can0
|
||||||
|
````
|
||||||
|
|
||||||
|
## Useful Q7S Linux Commands
|
||||||
|
|
||||||
|
Rebooting currently running image:
|
||||||
|
````
|
||||||
|
xsc_boot_copy -r
|
||||||
|
````
|
||||||
|
|
||||||
|
# Running the EIVE OBSW on a Raspberry Pi
|
||||||
|
|
||||||
Special section for running the EIVE OBSW on the Raspberry Pi.
|
Special section for running the EIVE OBSW on the Raspberry Pi.
|
||||||
The Raspberry Pi build uses the `bsp_rpi` BSP folder, and a very similar cross-compiler.
|
The Raspberry Pi build uses the `bsp_rpi` BSP folder, and a very similar cross-compiler.
|
||||||
@ -642,28 +652,22 @@ sudo apt-get install gpiod libgpiod-dev
|
|||||||
|
|
||||||
to install the required GPIO libraries before cloning the system root folder.
|
to install the required GPIO libraries before cloning the system root folder.
|
||||||
|
|
||||||
## Special notes on Eclipse
|
# Flight Software Framework (FSFW)
|
||||||
|
|
||||||
When using Eclipse, there are two special build variables in the project properties
|
An EIVE fork of the FSFW is submodules into this repository.
|
||||||
→ C/C++ Build → Build Variables called `Q7S_SYSROOT` or `RPI_SYSROOT`. You can set
|
To add the master upstream branch and merge changes and updates from it
|
||||||
the sysroot path in those variables to get any additional includes like `gpiod.h` in the
|
into the fork, run the following command in the fsfw folder first:
|
||||||
Eclipse indexer.
|
|
||||||
|
|
||||||
## Xilinx UARTLIE
|
```sh
|
||||||
Get info about ttyUL* devices
|
git remote add upstream https://egit.irs.uni-stuttgart.de/fsfw/fsfw.git
|
||||||
````
|
git remote update --prune
|
||||||
cat /proc/tty/driver
|
```
|
||||||
````
|
|
||||||
|
|
||||||
## I2C
|
After that, an update can be merged by running
|
||||||
Getting information about I2C device
|
|
||||||
````
|
|
||||||
ls /sys/class/i2c-dev/i2c-0/device/device/driver
|
|
||||||
````
|
|
||||||
This shows the memory mapping of /dev/i2c-0
|
|
||||||
|
|
||||||
## Useful Q7S Linux Commands
|
```sh
|
||||||
Rebooting currently running image:
|
git merge upstream/master
|
||||||
````
|
```
|
||||||
xsc_boot_copy -r
|
|
||||||
````
|
Alternatively, changes from other upstreams (forks) and branches can be merged like that in
|
||||||
|
the same way.
|
@ -6,8 +6,8 @@
|
|||||||
FileSystemTest::FileSystemTest() {
|
FileSystemTest::FileSystemTest() {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
SdCard sdCard = SdCard::SDC0;
|
SdCard sdCard = SdCard::SDC0;
|
||||||
cout << "SD Card Test for SD card qg" << static_cast<int>(sdCard) << std::endl;
|
cout << "SD Card Test for SD card " << static_cast<int>(sdCard) << std::endl;
|
||||||
std::system("echo Hello World");
|
//std::system("echo Hello World");
|
||||||
}
|
}
|
||||||
|
|
||||||
FileSystemTest::~FileSystemTest() {
|
FileSystemTest::~FileSystemTest() {
|
||||||
|
Loading…
Reference in New Issue
Block a user