Cmake introduction

Automatisches Generieren von Makefiles

$ mkdir build
$ cd build
$ cmake ..   // führt die CMakeList.txt aus = generiert Makefiles
             // cmakeList.txt liegt ein Verzeichnis weiter unten
$ make       // führt die Makefiles aus

Mit cmake werden Makefiles generiert. Alle Makefiles liegen im Ordner build. Alle Dateien, die die Programme zur Ausführung brauchen, müssen im build liegen.

Mehrere Executables

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(HuffmanDecoder)

ADD_DEFINITIONS("-std=c++11 -g")

ADD_EXECUTABLE(decoder
    main.cpp
    FileStreamReader.cpp
    HuffmanDecoder.cpp
    BinaryTree.cpp
    EndoscopeImage.cpp
)

ADD_EXECUTABLE(decoder_fullversion
    decoder.cpp
    FileStreamReader.cpp
    HuffmanDecoder.cpp
    BinaryTree.cpp
    EndoscopeImage.cpp
)

ADD_EXECUTABLE(encoder
    encoder.cpp
    FileStreamReader.cpp
    HuffmanDecoder.cpp
    BinaryTree.cpp
    EndoscopeImage.cpp
)

ADD_EXECUTABLE(testTree
    testTree.cpp
    BinaryTree.cpp
)

Will man nur ein bestimmtes Projekt kompilieren, schreibt man:

$ make testTree && ./testTree

Durch && ./executalbe wird das Programm direkt ausgeführt.

 

Referenzen im Netz

Link1: Anleitung für Programmiererinnen

Link2: Einfache Einführung

Make bedeutet kompilieren (und linken). Will man mehrere Dateien kompilieren und dann auch linken, genügt ein einfacher Shell-Befehl gcc -o main.c test  nicht mehr. Man macht dann ein Makefile, in dem durch Pfad-Variablen und Variablen der Datein, das Kompilieren, Linken vereinfacht wird.

Die Aufgabe von Cmake ist es, Makefiles automatisiert zu erstellen. Der Aufruf cmake funktioniert nur, wenn im Zielordner auch die Datei CMakeLists.txt liegt. In jedem Unterordner liegt eine CMakeLists.txt

cmake pfad/zu/dateien

Alle wichtigen Ergebnisse des Kompilieren, Linkens legt das Programm selbständig in diese Datei ab.

………………………………………………………………………………….

Projektstruktur
project /  CMakeList.txt                          // das main CMake
.                 / source /  CMakeList.txt      // jeder Unterordner braucht sein CMake
.                                     main.cpp
.                                      classb.cpp
.                  /build/                                        // nur hier kein CMakeList.txt
.

Erhält man ein Programm aus einer Plattform, wird das Programm oft so gebildet:

$ mkdir build
$ cd build
$ cmake ..   // führt die CMakeList.txt aus = generiert Makefiles
$ make       // führt die Makefiles aus

 

……………………………………………………………………………………….

CMake legt auch eine CMakeCache.txt Datei selbständig an. Darin sind alle Konfigurationen gespeichert. Diese Datei sollte nicht manuell geändert werden.

Das Programm wird oft nicht im Ordner der Quelldateien abgelegt. Man kann einen Ordner build angeben oder /user/bin nehmen.


Hauptdatei: CMakeLists.txt

add_executable(hallowelt main.c)

Hat man mehrere Files, so werden diese in einer Varibale zusammengefasst

SET( SOURCE main.c calculator.c)   Mit set werden Variablen gesetzt

Braucht man später die Variable, so geschieht dies mit ${SOURCE}  .

add_executable(calculator ${SOURCE})

PROJECT( name )
INCLUDE_DIRECTORY( /usr/bin )
TARGET_LINK_LIBRARIES()
ADD_DEFINITIONS()

INSTALL( TARGETS <programm> RUNTIME DESTINATION bin)

 

Variable zu bereits bestehenden Variablen hinzufügen

SET( EXTRALIBS ${EXTRALIBS} /usr/local/bla)
Fett stehen hier alle alten Pfade zu Bibliotheken, danach kommt der neue Pfad.
Ein typisches Beispiel ist die Umgebungsvariable PATH. Dort wird auch zu ${PATH} <neuer Pfad> dazugeführt.

..

VHDL State Machine One Hot

One Hot
Ist ein VHDL-Endcoding-BEgriff und bezieht sich auf die Umsetzung der Zustände in Hardware.
Bei One Hot wird für jeden Zustand s ein weiteres Bit gebraucht wird bzw. ein neues FF eingebaut.

s1 = 0001    -> 4 Flip-Flop
s2 = 0010
s3 = 0100
s4 = 1000

Der Vorteil von One Hot ist, dass sich die Input-Logik (das Decodieren der Zustände) vereinfacht. Man muss nur 1 Bit kontrollieren.

Minimal Bit Endocding
Ist der Gegenbegriff. Die Zustände werden mit möglichst wenigen Bits in VHDL umgesetzt.

s1 = 00    -> 2 Flip-Flop
s2 = 01
s3 = 10
s4 = 11

Einstellen in quartus
Menu Settings/ Analyse & Synthese/   Klicken auf Feld: More Settings:
Scrollen  bis zum Betriff  State Machine Processing:
Dort unter diversen Optionen One-Hot oder minimal-Bit auswählen

Beagle Bone (mit WLAN-CAP)

Beagle Bones sind von Texas Instruments. Sie sind die professionellere Variante der Arduinos und eine Alternative zu den Raspberry Pi.

Implementation des WLAN-Chips WL183x
Zum Testen dieses Chips, ist das Beagle Bone eine gute Idee.

beaglebone_Kommunikation

Die Prozessoren sind von ARM, dieses Modell hat HDMI ist ist bezüglich Kommunikation sehr vielseitig. Gleichzeitg ist das Board energiesparend konzipiert.

BEAGLEBONE_WL1835MOD_Cape
Das WLAN- und Bluetooth-Cap ist für durchsatz-starkes WLAN ( 802.11 n) gedacht und hat leistungsstarke Komponenten. Das Cap hat 2 Antennen (MIMO) und kann 40 MHz-Bandbreiten (802.11n) verarbeiten.

Bei Bluetooth ist BLE implementiert und die Coexistenz von BLE und WLAN ist möglich. Ein eigener, freier Datenstack ist vorhanden

Speicherzeilen und Speichertiefe

Speicherbreite
Die Speicherbreit ist oft identisch mit der Busbreite.
Ist sie dies nicht, muss mit Byte-enable das Ansprechen geregelt werden.
Word
= Breite einer Bit-Zeile (32-Bit, 16-Bit, ..)
= Speicherbreite
.               1 Word hat m Bits.
Bit      = Einzelne Speicherzelle.

Speichertiefe
Die Tiefe hängt von der Anzahl Adressleitungen ab.
Führen zum Speicher n Adressleitunge,  so ist der Speicher
2^n  (Word-)Zeilen tief.
Bsp.         2 Adressleitungen = 4 Speicherzeilen (Words) auslesbar

Speichergrösse
Word-Grösse x Anzahl Zeilen = m x 2^n
Bsp. Word = 32 Bit,  16 Adressleitungen
Speichergrösse:  4 x 2^16 =
4 x 2^3 x 2^3 x 2^10 = 4 x 8 x 8 x 1’000 =
32 x 8’000 = 256 kBytes

Organisation_Speicherzelle

 

 

 

 

Raspdebian am Netz: Sicherheit

RSA-Keys für User erstellen

Login mit RSA-Key und ohne Passwort
Beim Login kommt man zu Root. Man muss das debian Passwort eingeben. Steht der Raspberry Pi im Netz, sollte der Login ohne Passwort sein!  Brut force attacken werden so verworfen, da das Eingeben eines Passwortes verboten ist.

Port Forwarding  <Dienstanfrage Server> führt direkt auf <Dienstplattform auf lokalem Gerät>
Der Raspberry Pi steht nicht im Internet, er steht im privaten Netz und kann aufs Internet. Vom Internet aus kann man nicht auf den Rasperry PI zugreiffen. (Nur Lokal über SSH) . Nur der Router steht im Internet.
Will man OwnCloud brauchen, muss man vom Internet darauf zugreiffen können. Gibt man  <Dienstanfrage Routers> ein, so gelangt man auf den <Raspery Pi>. Dies gilt nur für die eingestellten Dienste.

IP Throuput <ip Server> führt direkt zur <ip lokales Gerät>
Gibt man die <IP des Routers> ein so gelangt man auf den <Raspery Pi>.

debian auf raspberry pi 2

Debian auf SD-Karte laden

Schritte von Juan:

  1. Download and extract the jessie-rpi2-*.img.gz to get an .img file
  2. On any debian-based linux type sudo apt-get install bmap-tools  and install it.
  3. Then type sudo bmaptool copy –nobmap jessie-rpi2.img /dev/sdx  (Change yourlocation to the location of the .img file and sdx for the letter where the SD is mounted, if you don’t know it type sudo fdisk -l  and look for it).
  4. Wait until it finishes and then put the SD on your rp2.

Erster SSH-Login zum Konfigurieren

  • Das RPi durch Ethernet mit dem Router verbinden und dann am Strom anschliesen zum booten.
  • Auf dem Router prüfen, welche  IP-Adresse das RPi bekommen hat (durch Namen der Maschine)
  • $ ssh root@192.168.1.158 mit Passwort debian

Grundsystem konfigurieren

  • Kontos für ale und katrin erstellen. Login ohne Passwort, nur mit key.
    • adduser katrin  (+ale)
    • auf Linux, SSH-key generieren: ssh-keygen  (fragt um ein Pfad)
    • scp id_rsa.pub katrin@192.168.1.158:.ssh/  (+ale)
    • auf den rpi: cat id_rsa.pub >> .ssh/authorized_keys
    • Zugangsrechte für ~.ssh/*  auf r–  setzen
  • kein login für root und nur key login für den users:
    • edit /etc/ssh/ssh_config ,
    • PasswordAuthentication no  und PermitRootLogin no  setzen.
  • Auf dem Router, Port forwarding für https einrichten

Owncloud installieren

  • die externe festplatte in /etc/fstab  hinzufügen
    • die uuid der festplatte mit blkid  auslesen
    • in /etc/fstab die folgende Zeile hinzufügen:
      UUID=375cae2c-e89e-45ef-80f3-ee65e54b27e2 /mnt/data ext4 defaults 0 2
    • ln -s /mnt/data/owncloud /var/www/owncloud/data  (falls data/ bereits exisitert, zuerst umbennen und dann den inhalt in den neuen data/  verzeichnis kopieren; es scheint nicht möglich zu sein, auf andere laufwerke zugreifen)
  • user owncloud  in der datenbank hinzufügen:
    $ mysql –user=root –password mysql
    create user ‚owncloud’@’localhost‘ identified by ‚owncloud‘ WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON *.* TO ‚owncloud’@’localhost‘;

    SELECT User FROM mysql.user;
    create database owncloud;
  • Community Debian Repository von Owncloud hinzufügen und das neuste Owncloud installieren
  • php5-mysql  dazu installieren
  • Frage: sollten wir nginx statt apache brauchen? (http://etapien.com/guides/how-to-install-owncloud-on-debian-7-with-nginx/)
  • 192.168.1.158/owncloud/ aufrufen, admin konto erstellen und unbedingt auf |> clicken um mysql als datenbank auszuwählen.
  • port für SSH auf nicht Standard setzen (22; https://www.adayinthelifeof.nl/2012/03/12/why-putting-ssh-on-another-port-than-22-is-bad-idea/)
  • Securing MySQL: MySQL ships with a few conveniences that are supposed to be removed when put on a real server, to do that type:
    sudo mysql_secure_installation

DNS

  • You need to log into your Domain Registra’s account and set the A-record for your domain (mysite.com) to point to your router’s public IP address.

SSL

  • https://blog.hasgeek.com/2013/https-everywhere-at-hasgeek/
  • https://hallard.me/enable-ssl-for-apache-server-in-5-minutes/
  • http://www.startssl.com/?app=1

VPN

  • You’ll need to forward port 1194 (UDP traffic) to your Raspberry Pi’s internal IP address.
  • Install openvpn
    • http://readwrite.com/2014/04/10/raspberry-pi-vpn-tutorial-server-secure-web-browsing
    • http://www.raspberrypihelp.net/tutorials/1-openvpn-server-tutorial
    • http://www.linuxuser.co.uk/news/create-a-vpn-with-the-raspberry-pi

WIFI als LAN-Verbindung zu Raspery Pi einrichten

  • wicd-curses  installieren (network manager)
  • die netdev  gruppe für beide users hinzufügen
  • das wifi sollte automatisch erkannt werden, falls nicht:
    • sudo iwlist eth2 scan  zeigt alle access points
    • in der Preferences von wicd wlan0 als device setzen und wicd neu starten

How to get the wifi to work: http://sjoerd.luon.net/posts/2015/02/debian-jessie-on-rpi2/#comment-2210d3fbce30bfee22ad73d751a14d31$

Andere programme

  • usbutils  for lsusb
  • vim
  • sudo update-alternatives –config editor
  • sudo nmap -sP 192.168.1.0/24  to discover the ip addresses around you