Commit f4a0092c authored by Jonathan Klamroth's avatar Jonathan Klamroth
Browse files

add README

parent 92b57fb5
# Firmware für die IPU im AM57xx
Die Firmware ist allgemein die Schnittstelle zur Hardware und hat dafür folgende
Aufgaben:
* Befehle (vom Linux) umsetzen -> Motor, Servo
* Sensordaten messen und (ans Linux) weiterleiten -> Abstände
(vorne/hinten/seitlich), Geschwindigkeit
* Steuerung über die RC Fernbedienung
Weitere Infos sind im Wiki zu finden:
https://wwwvs.cs.hs-rm.de/vs-wiki/index.php/(WS20-01)_Autonomes_Modellfahrzeug/Firmware
## Bauen
# Config laden, siehe ./configs/
make car2_1_1.5ms_LiPo_defconfig
# Build
make
## "Flashen"
scp carolocupFirmware carolo-car1:/lib/firmware/dra7-ipu1-fw.xem4
Die Firmware wird nicht automatisch neugeladen. Dazu muss die IPU zum Absturz
gebracht werden, was diese neustartet - oder der remoteproc Treiber (lädt den
Code in die IPU und startet diese) neu geladen werden.
## Reset
Der Reset wird durch das Neuladen des remoteproc Treibers ausgelöst, außerdem
ist es während dem Debuggen praktisch, recovery auszuschalten. Damit wird
verhindert, dass die IPU z. B. bei einer mmufault, also wenn man einen
unerlaubten Speicherzugriff macht, neugestartet wird. Damit kann der Fehler mit
gdb untersucht werden.
ssh carolo-car1 '/sbin/rmmod omap_remoteproc ; /sbin/modprobe omap_remoteproc ; sleep 1 ; echo disabled >/sys/kernel/debug/remoteproc/remoteproc0/recovery'
## Debuggen
Zum Debuggen, muss openocd auf dem Rechner, an dem das Auto angeschlossen ist,
gestartet werden. Dadurch steht in GDB Server bereit:
ssh -L 3333:localhost:3333 -L 4444:localhost:4444 carolo-debug /opt/carolo/connect-car1-ipu1.sh
Die Optionen `-L` aktivieren Port Forwarding, sodass man GDB lokal starten kann:
gdb-multiarch carolocupFirmware
Dies muss vom Root-Verzeichnis des Repos ausgeführt werden. Zum einen, damit
carocarolocupFirmware gefunden wird und zum anderen, damit die Datei .gdbinit
gefunden wird. Damit wird automatisch ein Breakpoint bei `main()` gesetzt und
gewartet, bis dies erreicht wurde. Dazu muss vorher in der Config die Option
"Wait for Debugger" (in "Mach Settings") aktiviert sein. Damit wartet der Code
auf den Debugger, der über die .gdbinit bestätigt wird.
Auf Ausgaben mit `printf()` kann über ein entsprechendes File des Treibers
zugegriffen werden:
cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
Es gibt einen Bug, bei dem manchmal keine Ausgaben zu sehen sind. Dann muss die
IPU wie oben beschrieben resettet werden.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment