compiled for q7s, q7s readme parts

This commit is contained in:
Jakob Meier 2020-11-07 16:48:30 +01:00
parent b34264fa93
commit d56d10b75d
5 changed files with 111 additions and 35 deletions

View File

@ -70,8 +70,20 @@ CLEANBIN2 = $(BUILDPATH)/$(OUTPUT_FOLDER)/devel
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# Tool suffix when cross-compiling # 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 # C Compiler
CC = $(CROSS_COMPILE)gcc CC = $(CROSS_COMPILE)gcc
@ -82,6 +94,7 @@ CXX = $(CROSS_COMPILE)g++
SIZE = $(CROSS_COMPILE)size SIZE = $(CROSS_COMPILE)size
STRIP = $(CROSS_COMPILE)strip STRIP = $(CROSS_COMPILE)strip
CP = $(CROSS_COMPILE)objcopy CP = $(CROSS_COMPILE)objcopy
endif
HEXCOPY = $(CP) -O ihex HEXCOPY = $(CP) -O ihex
BINCOPY = $(CP) -O binary BINCOPY = $(CP) -O binary
@ -250,6 +263,7 @@ hardclean:
# Only clean files for current build # Only clean files for current build
clean: clean:
@echo $(DEPFILES)
-rm -rf $(CLEANOBJ) -rm -rf $(CLEANOBJ)
-rm -rf $(CLEANBIN) -rm -rf $(CLEANBIN)
-rm -rf $(CLEANDEP) -rm -rf $(CLEANDEP)
@ -322,6 +336,7 @@ endif
$(OBJDIR)/%.o: %.cpp $(OBJDIR)/%.o: %.cpp
$(OBJDIR)/%.o: %.cpp $(DEPENDDIR)/%.d | $(DEPENDDIR) $(OBJDIR)/%.o: %.cpp $(DEPENDDIR)/%.d | $(DEPENDDIR)
@echo $(I_INCLUDES)
@echo @echo
@echo $(MSG_COMPILING) $< @echo $(MSG_COMPILING) $<
@mkdir -p $(@D) @mkdir -p $(@D)
@ -343,6 +358,7 @@ else
@$(CC) $(CXXFLAGS) $(CFLAGS) -c -o $@ $< @$(CC) $(CXXFLAGS) $(CFLAGS) -c -o $@ $<
endif endif
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# Dependency Handling # Dependency Handling
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
@ -357,6 +373,8 @@ DEPFILES = $(addprefix $(DEPENDDIR)/, $(DEPENDENCY_RELATIVE))
# Create subdirectories for dependencies # Create subdirectories for dependencies
$(DEPFILES): $(DEPFILES):
@mkdir -p $(@D) @mkdir -p $(@D)
# Include all dependencies # Include all dependencies
include $(wildcard $(DEPFILES)) include $(wildcard $(DEPFILES))

108
README.md
View File

@ -1,23 +1,38 @@
# <a id="top"></a> <a name="linux"></a> EIVE On-Board Software # <a id="top"></a> <a name="linux"></a> EIVE On-Board Software
## Linux ## General information
These steps were tested for Ubuntu 20.04. * OBC
If not done yet, install the full C++ build chain: * Xiphos Q7S
```sh * Based on Zynq-7020 SoC (xc7z020clg484-2)
sudo apt-get install build-essential * 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. ## Setting up development environment
Sometimes, special steps are necessary so the real-time functionalities can be used * 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
without root privileges. Instructions are contained in the setup section * For supported OS refer to https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_2/ug973-vivado-release-notes-install-license.pdf
for UNIX as well. * 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 ### Building the software
1. Clone the repository with 1. Clone the repository with
```sh ```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 2. Update all the submodules
@ -27,15 +42,68 @@ git submodule sync
git submodule update git submodule update
``` ```
3. After that, the linux binary can be built with: 4. Open Xilinx SDK 2018.2
```sh 5. Import project
make -j all * File &rarr; Import &rarr; C/C++ &rarr; Existing Code as Makefile Project
``` 6. Set build command
to compile for Linux. All will build the debug version, * When on Linux right click project &rarr; Properties &rarr; C/C++ Build &rarr; Set build command to make -j
which can also be built with the target `debug`. The optimized * -j causes the compiler to use all available cores
release version can be built with the target `release`. * On windows create a make target (Windows &rarr; Show View &rarr; Make Target)
* Right click eive_obsw &rarr; New &rarr;
* Target name: all
* Uncheck "Same as the target name"
* Uncheck "Use builder settings"
* As build command type: <path to make>\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 &rarr; Debug As &rarr; Debug Configurations
6. Right click Xilinx C/C++ applicaton (System Debugger) &rarr; New &rarr;
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 ### 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

View File

@ -9,8 +9,6 @@
#include <version.h> #include <version.h>
#include <unistd.h> #include <unistd.h>
/** /**
* @brief This is the main program for the hosted build. It can be run for * @brief This is the main program for the hosted build. It can be run for
* Linux and Windows. * Linux and Windows.

View File

@ -99,19 +99,11 @@ void ObjectFactory::produce(){
/* TMTC Reception via UDP socket */ /* TMTC Reception via UDP socket */
new TmFunnel(objects::TM_FUNNEL); new TmFunnel(objects::TM_FUNNEL);
#ifdef LINUX
new TmTcUnixUdpBridge(objects::UDP_BRIDGE, new TmTcUnixUdpBridge(objects::UDP_BRIDGE,
objects::CCSDS_PACKET_DISTRIBUTOR, objects::CCSDS_PACKET_DISTRIBUTOR,
objects::TM_STORE, objects::TC_STORE); objects::TM_STORE, objects::TC_STORE);
new TcUnixUdpPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE); 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 */ /* PUS stack */
new Service1TelecommandVerification(objects::PUS_SERVICE_1_VERIFICATION, new Service1TelecommandVerification(objects::PUS_SERVICE_1_VERIFICATION,

2
tmtc

@ -1 +1 @@
Subproject commit 480b0a16456ff09dfdfdd85b945926a73d19c09c Subproject commit ee295fa849ec7af33204f437d60742d173ac5c4b