Embedded Systems:Teil Linux (KT1)
Folien: ebssd_Präs_2_Betriebssystemvarianten_Lizenzen_Echtzeit Versuch1: Installation des Hostsystems Versuch2: Linux from Scratch – Teil 1 Versuch3: Linux from Scratch – Teil2 _Linux_Realtime- Fähigkeiten(Stefan Agner, 2009).pdf" Kapitel 3 und 4.
Folien: ebssd_Präs_2_Betriebssystemvarianten_Lizenzen_Echtzeit Versuch1: Installation des Hostsystems Versuch2: Linux from Scratch – Teil 1 Versuch3: Linux from Scratch – Teil2 _Linux_Realtime- Fähigkeiten(Stefan Agner, 2009).pdf" Kapitel 3 und 4.
-
- 1 / 82
-
Flashcards
Was wird benötigt um Linux direkt ab der internen HD booten zu können? Bemerkung über UEFI und BIOS.
Bootmanager(Grub2), dieser wird von Linux-Installer installiert.
Bei einem Boot via UEFI ist dies relativ problemlos (sofern die Installation klappt). Sofern Sie hingegen das System via BIOS und nicht via UEFI booten, wird ein kleiner Teil des Bootmanagers direkt in den Master-Boot-Record der Disk installiert sowie der Rest in die neu installierte Linux-Partition. Falls Sie dann irgendwann Linux wieder entfernen, bootet folglich auch Windows nicht mehr, da der Bootmanager ja in der gerade gelöschten Linux-Partition war! Ein Windows-kompatibler Bootloader könnte in diesem Fall nur per Booten einer Linux-Live-CD/USB-Stick oder Windows-Setup-CD restauriert werden...
Welches ISO-Abbild wird verwendet? Was heisst LTS?
Geben Sie hierbei das aktuelle Ubuntu LTS 64-Bit (Multiarch) ISO-Image an, welches Sie vorgängig ganz vom Server auf Ihren PC herunterladen.
Anmerkung: Nur die „LTS“ Version (Long-Time-Support) garantiert längerfristig Sicherheitsupates!
Auf was basiert Ubuntu?
Was ist der Vorteil?
Ubuntu basiert auf Debian und hat deshalb von diesem den Software- Update/Upgrade-Mechanismus geerbt: mit diesem kann Ubuntu einerseits übers Netz aktualisiert werden (für Security- und Bug-Fixes), andererseits können aber auch Programme bequem nachinstalliert werden.
Zigtausend OpenSource Programmpakete liegen auf dem Ubuntu-Pool – insbesondere der riesige Bereich „universe“ wird unverändert vom Debian-Pool übernommen, d.h. bloss für den Ubuntu-Release neu compiliert!
Welche Befehle können anstatt apt-get verwendet werden?
Was ist die Alternative zum Konsolenbasierten upgraden?
Statt mittels Programm apt-get kann sofern installiert ohne weiteres auch das Programm apt oder aptitude mit den gleichen Argumenten (update, upgrade, dist-upgrade install, remove, purge...) verwende werden (alle drei Programme sind in etwa gleichwertig und verwenden die gleiche Datenbasis).
Die Vorgänge update und upgrade oder auch das Aktivieren zusätzlicher Pool-Bereiche (universe, multiverse,...) kann jedoch auch bequem unter der grafischen Oberfläche erfolgen.
Wann müssen die Treiber des Gastsystems neu kompiliert werden?
Sofern mit dem Upgrade ein neues Kernel-Image installiert wurde, sollten Sie das Gastssytem nun rebooten, denn die Treiber der Gastsystemerweiterungen müssen nach jedem Kernel-Update neu kompiliert werden!
Ist man automatisch Administrator-User?
Nein
Die Ubuntu-Installation hat den „Administrator“-User sicherheitshalber deaktiviert, Ihnen jedoch glücklicherweise so genanntes „sudo-Recht“ vergeben, d.h. Sie können auf der Kommandozeile durch voranstellen von „sudo“ jedes beliebige Kommando auch unter den Rechten des Sysadmin-Users ausführen!
Was ist unter /etc/fstab gespeichert?
Wie wird das /etc/fstab editiert?
- Die Konfigurations-Datei /etc/fstab enthält nötige Informationen, um das Einhängen von Partitionen [3] ganz oder teilweise zu automatisieren. Bei Systemen mit systemd als Init-System (kommt unter Ubuntu ab Version 15.04 zum Einsatz), werden auf Basis der Datei /etc/fstab die entsprechenden mount Units erstellt.
Hierzu /etc/fstab im Gasstsystem editieren mit: 'sudo gedit /etc/fstab' und folgende Zeile zufügen:
hostdisk /media/hostdisk vboxsf uid=1000,gid=1000,rw 0 0
Wie wird der Mountpoint erstellt?
Was ist mit dem Mountpoint möglich?
den „Mountpoint“ noch mittels 'sudo mkdir /media/hostdisk' erstellen und erstmalig manuell mittels 'sudo mount -a' einbinden oder das Gastsystem rebooten.
Das „Laufwerk“ sollte hiernach über den Dateimanager zugänglich sein.
Wie heisst der Packagemanager, welcher alternativ zum vorinstallierten, graphischen Packagemanager, installiert wurde?
Wie wird dieser aufgerufen?
Da der vorinstallierte graphische Ubuntu-Packagemanager wenig taugt, installieren Sie mit diesem oder per 'sudo apt-get install synaptic' zusätzlich den graphischen Packagemanager „Synaptic“
Wonach Sie diesen starten per: Synaptic-Paketverwaltung
Was bedeutet Multiarch?
Was muss noch installiert werden das auch 32-bit Programme funktionieren?
Wie wird das gemacht?(Befehle)
„Multiarch“ bedeutet, dass Programme für unterschiedliche CPU-Architekturen unterstützt werden, voraus- gesetzt die CPU unterstützt diese und die erforderlichen Libraries sind installiert.
Um bei einem 64-bit Linux auch 32-bit Programme laufen zu lassen, müssen also die 32-bit Libraries nachinstalliert werden.
Auf aktuellen Ubuntu/Debian/Mint Systemen hierzu zuerst die 32-Bit Architektur aktiviert werden per:
'sudo dpkg --add-architecture i386' wonach nach einem 'sudo apt-get update' die benötigten 32-Bit Libraries nach- installiert werden können: 'sudo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386'
Welches Package wird benötigt um Programme und den Kernel übersetzen zu können?
Was ist da alles drin und wie wird es gemacht?
- Da wir auf dem System auch Programme und den Kernel übersetzen möchten, installieren Sie das Metapackage 'build-essential',
- welches diverse andere Packages installiert (u.a. die make Utility, Headerfiles, etc.) sowie das Package 'autoconf' (für die GNU autoconf Utility): $ sudo apt-get install build-essential autoconf
Wie wird die Netzwerkverknüpfungen zu Freigaben des Campus-Server einrichtet?(3 Schritte)
Zwecks Zugriff auf diese Windows-Freigaben
- starten Sie den Gnome Dateimanager (nautilus) und lassen in diesem mittels Ctrl-L die Adresszeile anzeigen,
- in welcher Sie dann folgendes eingeben: smb://fsemu18.edu.ds.fhnw.ch/e_18_data11$
- Geben Sie auf Anforderung Ihre FHNW-Koordinaten ein und speichern diese am besten permanent im Linux „Schlüsselbund“ - natürlich nur sofern Sie wirklich an Ihrem persönlichen Notebook arbeiten
Hangeln Sie sich im Dateimanager zum Unterrichtsordner „ebssd“ durch und erstellen Sie danach ein „Lesezeichen“ per:
(Click auf das Dateimanager-Zahnrad rechts oben) > Lesezeichen > Lesezeichen hinzufügen
Das erstellte „Lesezeichen“ finden Sie zukünftig in der Schnellstartliste des Desktops unter Orte!
Wie kann die Netzwerkverbindung unter Linux gemacht werden?
Nur sofern Sie Linux nativ als Hostsystem haben, benötigen Sie auch noch einen geeigneten VPN-Client für den Zugriff auf das AD von Zuhause:
die FHNW unterstützt wie Ihnen vermutlich bekannt ist das proprietäre „Cisco AnyConnect“ welches SSL-basiert ist.
Zum Glück existiert hierfür eine OpenSource Implementation namens „OpenConnect“, welche sich über das Package 'network-manager-openconnect' installieren lässt.
Das VPN lässt sich danach rechts oben via Netzwerk-Icon einrichten und verbinden..
Mit welchen BEfehlen kann man schauen unter welchem Namen bzw. Ort die "distk" eingebunden wurde?
Danach inspizieren Sie entweder mit 'cat /proc/partitions' oder noch besser mit 'lsblk', ob und unter
welchem Devicenode diese 'disk' eingebunden wurde (vgl. mit Grösse der SD-Karte!!)
Wie kopiert man das Image auf die Disk?(Befehl)
sudo dd if=*.img of=/dev/sdx bs=1M status=progress ; sudo sync
Zwischen Target und Host sollen welche beiden Verbindungen eingerichtet werden?
Zwischen Target und Host sollen zwei verschiedene Verbindungsarten eingerichtet werden:
einerseits über die Serielle Schnittstelle (für die Text-Console) sowie übers Ethernet zwecks NFS-Mount (d.h. Netzwerk-Dateifreigabe) und optional TFTP (für das Laden des Kernels beim booten via Netzwerk).
Unterstützen Embedded Linux-Systeme normalerweise asynchrone serielle Schnittstelle? Was kann auf dieser beobachtet werden?
Was wird unter dem Hostsystem dafür benötigt?
- Ja, embedded Linux-Systeme unterstützen normalerweise (auch) eine asynchrone serielle Schnittstelle, auf welcher einerseits der Bootvorgang angezeigt und beeinflusst werden kann, andererseits nach booten eine Shell-Console gestartet werden kann.
Um diese auf dem Hostsystem (Notebook) anzuzeigen, wird nebst dem USB-Serial Dongle ein geeignetes serielles Terminal-Emulationsprogramm für die Benutzer-Ein-/Ausgabe benötigt. Serielle Terminal- Emulationsprogramme gibt es diverse – sowohl einfache Console-Programme (minicom, picocom, cu,...) wie auch direkt unter der graphischen X11-Oberfläche lauffähige (gtkterm, sayon,...) oder z.B. unter Windows PuTTY. Viele sind jedoch „bucklig“ bis „bockig“.
Wie kontrolliert man ob und unter welchem Namen das Interface von der RS232-Schnittstelle erkannt wurde?
Kontrollieren Sie nun z.B. mittels: tail -100 /var/log/syslog
ob und unter welchem Devicenamen das Interface von Linux erkannt wurde – ev. unter ttyUSB0
Wie wird das Interface mit dem Board verbunden?
Verbinden Sie das Interface via gekreuztes Nullmodem-Kabel oder Nullmodem-Adapter EMV-gerecht und korrekt mit dem Board: Achtung: beim direkten berühren des Boards immer zuerst eine Massefläche wie z.B. die Ethernet-Buchse berühren und nicht irgendwelche Signal-Pins berühren, in welchem Fall das Board durch die Elektrostatische Entladung Schaden nehmen könnte!!
Wie wird picocom eingestellt?(Parameter und Hilfe-Befehl)
Starten Sie danach 'gtkterm' oder 'picocom' mit 115200 Baud sowie ohne Flow Control auf jener Schnittstelle, welche Sie oben ermittelt haben (vermutlich /dev/ttyUSB0 ). Bei picocom werden diese Parameter auf der Kommandozeile angegeben - die picocom-Kurzhilfe per 'picocom --help' zeigt wie Sie Baudrate und tty-Device setzen. (Die volle Hilfe würden Sie per 'man picocom' erhalten).
picocom -b 115200 /dev/ttyUSB0
Wie kann man eine Netzwerkverbindung herstellen, ohne das „On-Board“ Ethernet-Interface Ihres Notebooks nicht umkonfigurieren zu müssen?
Welcher Befehl zeigt die USB-Ethernet-Interfaces dessen Interface-Bezeichnung?
Wie kann man testen ob die Verbindung zum Ethernet Layer 2 funktioniert?(Befehl)
die Ethernet- Verbindung via einem externen USB-Ethernet-Interface realisiert werden, wobei wir mit fixen d.h. statischen IP-Adressen arbeiten:
ifconfig
Stecken Sie nun noch das Ethernet-Kabel zum IGEPv2-Board ein und schalten Sie dieses ein.
Ob auf Ethernet-Layer 2 (Link-Layer) die Verbindung funktioniert, erfahren Sie per: sudo mii-tool
Wie kann man das Hostsystem aus dem U-Bootloader anpingen lassen?
Das Hostsystem sollte sich nach Verbinden des Ethernet-Kabels aus dem U-Bootloader wie folgt anpingen lassen per:
=> setenv ipaddr 192.168.254.254 # definiert temporär die IP-Adresse des Boards
=> ping 192.168.254.10 # 'host 192.168.254.10 is alive' sollte angezeigt werden
Was kann man unter U-Boot gespeichert werden?
Was wird ohne aktives eingreifen ausgeführt?
Welche Befehle geben einen Überblick über U-Boot?
- Bei U-Boot können beliebige Commandosequenzen inkl. Parameter in Umgebungsvariable(n) gespeichert werden, und mittels 'run' wieder ausgeführt werden. Dies ist auch rekursiv möglich!
- Sofern der Bootvorgang nicht manuell (mittels Taste) abgebrochen wird, wird der Inhalt der Variable bootcmd automatisch beim Starten ausgeführt.
– U-Boot-Umgebungsvariablen per Command: U-Boot# printenv
– U-Boot-Commands per (UBoot-)Command: U-Boot# help
Was wird alles einzeln kompiliert und installiert bei einer Linu-Installation from Scrach?
Um die Hintergründe eines Linux-Systems kennen zu lernen erstellen wir eine Linux-Installation „from Scratch“ d.h. Sie kompilieren und installieren jeweils separat:
einen Bootloader (u-boot, welcher den Linux-Kernel ab SD-Karte ins RAM ladet und selbigen startet)
den Linux-Kernel (zwecks Hardware-Abstraktion und Zuteilung von Memory und CPU-Ressourcen)
ein Root-Filesystem (RFS) beinhaltend die wichtigsten System- und Anwendungsprogramme.
Was versteht man unter einer Toolchain?
Was ist unser Hostsystem für eine Architektur und welcher C/C++ Crosscompiler wird verwendet?
Was gibt es sonst noch für einen verbreiteten C-Compiler?
Darunter versteht man eine Sammlung aus C/C++ Compiler-Tools samt Standard C/C++ Library.
Im Falle einer Cross-Toolchain (resp. Cross-Compiler) haben das Hostsystem, also das Entwicklungs- system, auf welchem die Compiler-Tools ausgeführt werden und das Targetsystem (also das Zielsystem), auf welchem die erzeugten Programme (Binaries, Objektcode, Maschinencode) laufen nicht die gleiche CPU-Architektur.In unserem Fall hat das Hostsystem eine x86 (32bit) oder amd64 (64bit) Architektur sowie das Zielsystem eine ARMv7a (ARM 32bit) CPU-Architektur. Als C/C++ Crosscompiler dominiert im Open Source Bereich die „GNU Compiler Collection“, kurz GCC aus dem GNU Projekt. Wir verwenden die 2. Variante, d.h. Sie installieren selbst eine vorkompilierte Toolchain von Linaro welche nebst GCC die glibc (GNU Libc Standard C Library) beinhaltet.
Ein weiterer Stern am Himmel unter den Open Source C-Compilern ist der vergleichsweise schlanke Clang/LLVM Compiler. Gegenwärtig lässt sich Linux damit aber nicht cross-compilieren
Was machen wir anstatt der offiziellen Anleitung für die Erstellung des Kernels und Bootloaders? (WIeso machen wir dies?)
Um danach den Kernel und den Bootloader zu erstellen, gehen wir nicht gemäss der offiziellen „Wandboard“ Homepage auf http://www.wandboard.org/ vor, da selbige einen recht betagten Kernel verwendet und wir ja möglichst aktuell sein möchten ;-)
Stattdessen verfahren wir mehr oder weniger gemäss dem HOWTO von Robert Nelson (Applikationsingenieur bei Digikey) auf http://eewiki.net/display/linuxonarm/Wandboard, wodurch wir einen brandaktuellen Kernel erhalten, welcher sogar auch auf anderen modernen ARM Embeddeed Boards lauffähig sein könnte (deshalb auch als „armv7-multiplatform“ genannt). Diese Universalität sparen wir uns aber, zugunsten einer kürzeren Kompilationszeit (bei einem virtualisiertem Linux-Entwicklungssystem dauert es auch dann noch recht lange!).
Wieso soll die Grundinstallation der Toolchain nur mit normalen Benutzerrechten durchgeführt werden?
Bei der Generation des Bootloaders, Kernels und Rootfilesystem kommt es gelegentlich trotz korrekter Zielarchitektur des Coss-Toolchain zu Inkompatibilitäten, in welchem Fall das „Binary“ zwar kompiliert wird, jedoch auf dem Zielsystem nicht lauffähig ist. Hier ist manchmal ein mühsames „Trial and Error“ mit unterschiedlichen Toolchain-Releases erforderlich. Am Besten verwendet man sowohl für den Kernel als auch die (Anwender-)Programme resp. das im Rootfilesystem den gleichen Compiler-Release.
Welche „bewährte“ nicht ganz topaktuelle vorkompilierte Toolchain-Release von Linaro verwenden wir?
Linaro Toolchain for Cortex-A→linaro-toolchain-binaries (little-endian)
gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabihf
Zu was gehört die Datei wenn man sie vie "wget" bezieht`?
Wie kann man via Shell eine Datei entzippen und wo ist sie dann zu finden?
Nun haben Sie diese Toolchain ja nicht via Ubuntu-Pool sondern als „binary“ aus Ubuntu-fremden Quellenbezogen,weshalbSiediesewieessichfürBinär-FremdpacketegehörtunterVerzeichnis /opt/ installieren. Angenommen Sie haben die Archivdatei im Donwloads Ordner, wechseln Sie hierzu ins Verzeichnis ~/Downloads und
entpacken die Archvdatei danach z.B. aus einer Shell per: sudo tar xavf gcc-linaro-5.3*.tar.xz -C /opt/
Wonach die Toolchain nun unter /opt/gcc-linaro-5.3* installiert sein sollte (*=irgendwas).
was muss gemacht werden dass die enthaltenen Cross-Compilertools auch ohne Pfadangabe aufgefunden werden kann?(3 Schritte)
Damit die enthaltenen Cross-Compilertools auch ohne Pfadangabe aufgefunden werden, muss noch der
Suchpfad gesetzt werden. Editieren Sie hierzu in Ihrem Homeverzeichnis die versteckte Datei .profile :$ gedit ~/.profile
und Ergänzen Sie in dieser Datei zuunterst (nach dem „fi“) eine neue Zeile mit:
PATH=$PATH:/opt/gcc-linaro*/bin/
Wobei Sie für gcc-linaro-* den tatsächlichen Verzeichnisnamen einsetzen, wie unter /opt installiert!Die Datei .profile wird von der Login-Shell nur beim Einloggen automatisch eingelesen. Includen Sie deshalb die Datei in die laufende Shell mittels dem '.' oder 'source' Shell-Command:
$ . ~/.profile
Der Command-Präfix 'arm-linux-gnueabihf-' hat welche Bedeutung?
arm: ARM 32bit Architektur, linux: Linux-Binärinterface inkl. Virtual Memory-Unterstützung,
gnueabihf: GNU C/C++ Library (glibc) mit eabi = Embedded Application Binary Interface und
hf = Hardware-Floatingpoint-Unterstützung.
Welche GCC Version hat der Compiler selbst?
5.3.1 20160412
Was sind die Befehle für das Builden des Bootloaders
Builden Sie den Bootloader nun für das Wandboard mit Dual Light (dl) SoC unter Verwendung des zuvor installierten Cross-Compilers:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- wandboard_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- mit der make-Option -j<N> unter Angabe von <N>=Anzahl Threads lässt sich die Kompilation beschleunigen – ein
virtualisiertes Gastsystem erhält aber standardmässig nur einen Core vom Host - und nicht alle Quellpackages vertragen -jN
Was ist der Unterschied zuwischen Disk und Partition?
Beachten Sie auch den Unterschied zwischen „Disk“ und „Partition“:
sdb oder mmcblk0 ist die ganze Disk, wogegen sdb1 oder mmcblk0p1 jeweils die erste Partition ist.
Welcher Befehl zeigt sowohl Grösse als auch Name an der Inerfaces? Welche nur die Namen?
Mit 'cat /proc/partitions' lassen sich auf jedem Linux-System alle erkannten Disks und Diskpartitionen auflisten. Da hiermit jedoch die Grösse nicht angezeigt wird, verwenden wir statt dessen: $ lsblk
Wie definiert man Shell-Umgebungsvariablen?
export DISK=/dev/sdX # also z.B. /dev/sdb sofern 'lsblk' sdb mit der SD-Kartengrösse anzeigt
export PART=/dev/sdX1 # also z.B. /dev/sdb1
Wie unmountet man eine SD-Karte?
Wie löscht man spezifische Daten von der Karte?
- Neu-Partitionierung / Neu-Formatierung sollte aber nie im gemounteten Zustand erfolgen, weshalb wir diese wie folgt alle Partitionen der SD „unmounten“ : $ sudo umount ${DISK}*
Löschen Sie wie folgt die ersten paar Megabytes der SD-Karte und damit die Partitonstabelle: $ sudo dd if=/dev/zero of=$DISK bs=1M count=10
was gibt es für Disk-Partitionierungstools auf Console-Ebene und was ist deren Nachteil?
Wie heisst das graphische Tool?(Befehl)
Disk-Partitionierungstools auf Console-Ebene gäbe es verschiedene (fdisk, cfdisk, gdisk, ...). Bei deren Verwendung müssten dann die erstellten Partitionen nachträglich noch mit mkfs einzeln formatiert werden
Bei vorhandener graphischer Oberfläche lässt sich aber das Partitionieren und Formatieren bequemer mittels gparted durchführen: $ sudo gparted $DISK
Wie lädt man den Pre-Bootloader und de Bootloader? WIe heissen sie? Befehle?
Nun kopieren Sie sowohl den Pre-Bootloader „SPL“ als auch den Bootloader „u-boot“ in den zuvor reservierten Bereich ab Offset 1024 (denn der Controller (SoC) lädt den den Bootloader ab dem 3. physikalischen
512Byte Sektor, also hinter der Partitionstabelle aber noch vor der ersten Partition welche bei 1MiB beginnt...)
$ cd ~/ebssd/u-boot/
$ sudo dd if=SPL of=${DISK} seek=1 bs=1k
$ sudo dd if=u-boot.img of=${DISK} seek=69 bs=1k
$ sudo sync
wie wechseln Sie in das erstellte Linux Kernel Stammverzeichnis ?
Wie sollte Updatet werde?
Wie können alle Deflaut-Konfigurationen angezeigt werden?
$ cd ~/ebssd/linux-stable
Übrigens, ein „Updaten“ des lokalen Git Repository sollte nur mit aktivem Branch 'master' geschehen,
und zwar per 'git pull' .
Unter arch/arm/configs/ sind die Default-Konfigurationen aller Boards mit ARM CPU zu sehen. Wenn Sie diesen Ordner mit 'ls arch/arm/configs/' auflisten erkennen Sie, dass keine spezifische Default-Konfig für das „Wandboard“ existiert.