diff --git a/Makefile b/Makefile
index 1e089c5e..df94de6f 100644
--- a/Makefile
+++ b/Makefile
@@ -70,8 +70,20 @@ CLEANBIN2 = $(BUILDPATH)/$(OUTPUT_FOLDER)/devel
#-------------------------------------------------------------------------------
# Tool suffix when cross-compiling
-CROSS_COMPILE =
+CROSS_COMPILE = arm-linux-gnueabihf-
+ifdef WINDOWS
+# C Compiler
+CC = $(CROSS_COMPILE)gcc.exe
+
+# C++ compiler
+CXX = $(CROSS_COMPILE)g++.exe
+
+# Additional Tools
+SIZE = $(CROSS_COMPILE)size.exe
+STRIP = $(CROSS_COMPILE)strip.exe
+CP = $(CROSS_COMPILE)objcopy.exe
+else
# C Compiler
CC = $(CROSS_COMPILE)gcc
@@ -82,6 +94,7 @@ CXX = $(CROSS_COMPILE)g++
SIZE = $(CROSS_COMPILE)size
STRIP = $(CROSS_COMPILE)strip
CP = $(CROSS_COMPILE)objcopy
+endif
HEXCOPY = $(CP) -O ihex
BINCOPY = $(CP) -O binary
@@ -250,6 +263,7 @@ hardclean:
# Only clean files for current build
clean:
+ @echo $(DEPFILES)
-rm -rf $(CLEANOBJ)
-rm -rf $(CLEANBIN)
-rm -rf $(CLEANDEP)
@@ -322,6 +336,7 @@ endif
$(OBJDIR)/%.o: %.cpp
$(OBJDIR)/%.o: %.cpp $(DEPENDDIR)/%.d | $(DEPENDDIR)
+ @echo $(I_INCLUDES)
@echo
@echo $(MSG_COMPILING) $<
@mkdir -p $(@D)
@@ -343,6 +358,7 @@ else
@$(CC) $(CXXFLAGS) $(CFLAGS) -c -o $@ $<
endif
+
#-------------------------------------------------------------------------------
# Dependency Handling
#-------------------------------------------------------------------------------
@@ -357,8 +373,10 @@ DEPFILES = $(addprefix $(DEPENDDIR)/, $(DEPENDENCY_RELATIVE))
# Create subdirectories for dependencies
$(DEPFILES):
@mkdir -p $(@D)
+
+
# Include all dependencies
-include $(wildcard $(DEPFILES))
+include $(wildcard $(DEPFILES))
# .PHONY tells make that these targets aren't files
-.PHONY: clean sdramCfg release debug all hardclean
+.PHONY: clean sdramCfg release debug all hardclean
diff --git a/README.md b/README.md
index 370542a3..a2d23e82 100644
--- a/README.md
+++ b/README.md
@@ -1,23 +1,38 @@
# EIVE On-Board Software
-## Linux
-These steps were tested for Ubuntu 20.04.
-If not done yet, install the full C++ build chain:
-```sh
-sudo apt-get install build-essential
-```
+## General information
+* OBC
+ * Xiphos Q7S
+ * Based on Zynq-7020 SoC (xc7z020clg484-2)
+ * Dual-core ARM Cortex-A9
+ * 766 MHz
+ * Artix-7 FPGA (85K pogrammable logic cells)
+ * Datasheet at https://eive-cloud.irs.uni-stuttgart.de/index.php/apps/files/?dir=/EIVE_IRS/Arbeitsdaten/08_Used%20Components/Q7S&fileid=340648
+* Linux OS
+ * Build with Yocto 2.5
+ * Linux Kernel https://github.com/XiphosSystemsCorp/linux-xlnx.git
+
-Linux has a limit to message queue message. Please see the section
-to set up UNIX environment for more information.
-Sometimes, special steps are necessary so the real-time functionalities can be used
-without root privileges. Instructions are contained in the setup section
-for UNIX as well.
+## Setting up development environment
+* Install Vivado 2018.2 and Xilinx SDK from https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html
+* 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 environment variables SDK\2018.2\gnu\aarch32\nt\gcc-arm-linux-gnueabi\bin
+* Install make (only on windows, SDK on Linux can use the make installed with the SDK)
+ 1. Install NodeJS LTS
+ 2. Install xpm
+ ````
+ npm install --global xpm
+ ````
+ 3. Install Windows build tools (after installation also linux commands like mkdir can be used from windows)
+ ````
+ xpm install --global @xpack-dev-tools/windows-build-tools@latest
+ ````
### Building the software
1. Clone the repository with
```sh
-git clone https://egit.irs.uni-stuttgart.de/fsfw/fsfw_example.git
+git clone https://egit.irs.uni-stuttgart.de/eive/eive_obsw.git
```
2. Update all the submodules
@@ -27,15 +42,68 @@ git submodule sync
git submodule update
```
-3. After that, the linux binary can be built with:
-```sh
-make -j all
-```
-to compile for Linux. All will build the debug version,
-which can also be built with the target `debug`. The optimized
-release version can be built with the target `release`.
+4. Open Xilinx SDK 2018.2
+5. Import project
+ * File → Import → C/C++ → Existing Code as Makefile Project
+6. Set build command
+ * When on Linux right click project → Properties → C/C++ Build → Set build command to make -j
+ * -j causes the compiler to use all available cores
+ * On windows create a make target (Windows → Show View → Make Target)
+ * Right click eive_obsw → New →
+ * Target name: all
+ * Uncheck "Same as the target name"
+ * Uncheck "Use builder settings"
+ * As build command type: \make -j all WINDOWS=1
+7. Run build command (double click the generated target)
-4. Run the binary located inside the `_bin` folder.
+### Debugging the software
+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)
+ * Baudrate 115200
+ * Login to Q7S:
+ * user: root
+ * pw: root
+ * Set IP address and netmask with
+ ````
+ ifconfig eth0 192.168.133.10
+ ifconfig eth0 255.255.255.0
+ ````
+2. Connect Q7S to workstation via ethernet
+3. Make sure the netmask of the ehternet interface of the workstation matches the netmask of the Q7S
+ * When IP address is set to 192.168.133.10 and the netmask is 255.255.255.0, an example IP address for the workstation
+ is 192.168.133.2
+4. Run tcf-agent on Q7S
+ * Tcf-agent is not yet integrated in the rootfs of the Q7S. Therefore build tcf-agent manually
+ ````
+ git clone git://git.eclipse.org/gitroot/tcf/org.eclipse.tcf.agent.git
+ cd org.eclipse.tcf.agent/agent
+ make CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld MACHINE=arm NO_SSL=1 NO_UUID=1
+ ````
+ * Transfer executable agent from org.eclipse.tcf.agent/agent/obj/GNU/Linux/arm/Debug to /tmp of Q7S
+ ````
+ cd obj/GNU/Linux/arm/Debug
+ scp agent root@192.168.133.10:/tmp
+ ````
+ * On Q7S
+ ````
+ cd /tmp
+ chmod +x agent
+ ````
+ * Run agent
+ ````
+ ./agent
+ ````
+5. In Xilinx SDK 2018.2 right click on project → Debug As → Debug Configurations
+6. Right click Xilinx C/C++ applicaton (System Debugger) → New →
+7. Set Debug Type to Linux Application Debug and Connectin to Linux Agent
+8. Click New
+9. Give connection a name
+10. Set Host to static IP address of Q7S. e.g. 192.168.133.10
+11. Test connection (This ensures the TCF Agent is running on the Q7S)
+12. Select Application tab
+ * Project Name: eive_obsw
+ * Local File Path: Path to eiveobsw-linux.elf (in _bin\linux\devel)
+ * Remote File Path: /tmp/eive_obsw.elf
### Setting up UNIX environment for real-time functionalities
Please note that on most UNIX environments (e.g. Ubuntu), the real time functionalities
diff --git a/bsp_linux/main.cpp b/bsp_linux/main.cpp
index 98198838..a2bd4fbf 100644
--- a/bsp_linux/main.cpp
+++ b/bsp_linux/main.cpp
@@ -9,8 +9,6 @@
#include
#include
-
-
/**
* @brief This is the main program for the hosted build. It can be run for
* Linux and Windows.
diff --git a/mission/core/ObjectFactory.cpp b/mission/core/ObjectFactory.cpp
index 3561a4b7..b5a43fb4 100644
--- a/mission/core/ObjectFactory.cpp
+++ b/mission/core/ObjectFactory.cpp
@@ -99,19 +99,11 @@ void ObjectFactory::produce(){
/* TMTC Reception via UDP socket */
new TmFunnel(objects::TM_FUNNEL);
-#ifdef LINUX
+
new TmTcUnixUdpBridge(objects::UDP_BRIDGE,
objects::CCSDS_PACKET_DISTRIBUTOR,
objects::TM_STORE, objects::TC_STORE);
new TcUnixUdpPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE);
-#elif WIN32
- new TmTcWinUdpBridge(objects::UDP_BRIDGE,
- objects::CCSDS_PACKET_DISTRIBUTOR, objects::TM_STORE,
- objects::TC_STORE);
- new TcWinUdpPollingTask(objects::UDP_POLLING_TASK,
- objects::UDP_BRIDGE);
-#endif
-
/* PUS stack */
new Service1TelecommandVerification(objects::PUS_SERVICE_1_VERIFICATION,
diff --git a/tmtc b/tmtc
index 480b0a16..ee295fa8 160000
--- a/tmtc
+++ b/tmtc
@@ -1 +1 @@
-Subproject commit 480b0a16456ff09dfdfdd85b945926a73d19c09c
+Subproject commit ee295fa849ec7af33204f437d60742d173ac5c4b