vim Easter Eggs

13. April 2009 von zimon

Da Ostern die Zeit der Easter Eggs (Ostereier) ist, habe ich hier ein paar Eier aus vim. Hier sind es nur Hilfekommandos, die zu lustigen Stellen der Dokumentation führen.

Einfach ausprobieren (es gehts nichts kaputt):

  • :h!
  • :h holy-grail
  • :h 42
  • :h UserGettingBored

Wer noch mehr Easter Eggs in vim kennt, kann sie mir gerne in den Kommentaren mitteilen.

Guake – ein ausklappendes Terminal

11. April 2009 von zimon

Wie ich eben auf Stefano Forenzas Blog gelesen habe, ist die Version 0.4 von Guake herausgekommen und soll recht stabil sein. Daraufhin habe ich mir das Gnome-Pendant zu Yakuake auch einmal angesehen.

Ein Screenshot von Guake

Ein Screenshot von Guake

Mit F12 lässt sich das Terminal von oben in den Bildschirm ausklappen und bietet direkt eine Shell zum Arbeiten an. Sehr praktisch finde ich den Fullscreen-Modus, den man standardmäßig mittels F11 ein- und ausschaltet.
Man kann sogar in den Einstellungen Screen als Interpreter definieren. Damit das funktioniert muss man aber gleichzeitig die Option “Run command as login shell” aktivieren. Dann kann man auch die Tabbar dekativieren.

Mittels Compiz soll auch echte Transparenz funktionieren. Da ich kein Compiz nutze finde ich die Möglichkeit ein eigenes Hintergrundbild oder den Desktophintergrund halbtransparent einzufügen sehr schön.

Backspace hat bei mir mit den Standardeinstellungen nicht funktioniert und ich musste in den Einstellungen unter dem Tab “Compatibility” bei “Backspace key generates:” von “ASCII DEL” auf “Control-H” umstellen.

Ansonten finde ich das Programm sehr praktisch, da man so nicht immer ein gnome-terminal geöffnet hat und es von überall aus mit einer Taste erreichbar ist.

Um das Programm automatisch zu starten, kann man unter System -> Einstellungen -> Sitzungen guake als Startprogramm hinzufügen. Dafür klickt man im Tab “Startprogramme” auf “Hinzufügen”, schreibt bei Name “guake terminal” rein und bei Befehl “guake”.

Herunterladen kann man das Programm für Hardy und Intrepid bei getdeb.net. Für andere Distributionen kann man sich die Sourcen von der offiziellen Seite besorgen.

[Update]Ich habe gelesen, dass guake für Ubuntu 8.10 Intrepid in den Paketquellen verfügbar ist. Allerdings weis ich nicht in welcher Version.
Für Dualscreen-Systeme gibt es auf gotbrain.de eine angepasste Version von guake, die das Programm auf einen Bildschirm begrenzt. Getestet habe ich dies allerdings nicht.[/Update]

Firefox Plugin – Update Scanner informiert über Änderungen an einer Seite

8. April 2009 von zimon

Da es immer noch Homepages und sogar Blogs ohne RSS-Feed gibt, ist das das Add-On Update Scanner recht praktisch.

Das Plugin speichert die aktuelle Seite und überprüft in einstellbaren Intervallen, ob sich die Seite gegenüber der gespeicherten Version geändert hat. Hat sich die Seite geändert, geht ein Infofenster in der rechten unteren Ecke auf, was einen über die Aktualisierung informiert. Ein Klick auf den entsprechenden Link öffnet die Seite in einem neuen Tab und zeigt die Änderungen gelb hinterlegt an.

Um eine Seite überprüfen zu lassen, kann man auf der Seite das Kontextmenü mit der rechten Maustaste aufrufen und dort “Seite auf Aktualisierungen prüfen…” auswählen. Im sich öffnenden Fenster kann man nun Einstellen, wie oft auf Aktualisierungen überprüft werden soll und wieviel Text sich geändert haben muss, damit die Aktualisierung angezigt wird. (Den Intervall zum überprüfen sollte man nicht zu niedrig wählen, da dies unnötigen Traffic erzeugen würde)

Man kann auch auf das Icon des Update Scanners in der Statusleiste (unten rechts) klicken, wonach sich eine Seitenleiste öffnet, in der alle Seiten aufgeführt sind, die überprüft werden. Dort kann man auch neue Seiten hinzufügen oder löschen und die Einstellungen ändern. Die Überprüfung lässt sich in der Leiste auch von Hand starten.

Hier der Link zum Herunterladen bzw. Installieren: https://addons.mozilla.org/de/firefox/addon/3362

Makros aufzeichnen mit vim

5. April 2009 von zimon

Da vim komplett per Tastatur bedienbar ist, lässt sich so ziemlich jede denkbare Aktion als Makro aufzeichnen.

Ähnlich wie bei den Registern kann man auch jedem Buchstaben ein Makro zuweisen. Eingeleitet wird die Aufzeichnung mittels q<name>, wobei <name> ein beliebiger Buchstabe ist. Beispiel wäre qa oder qb. Jede Taste, die man ab dort drückt wird aufgezeichnet, egal in welchem Modus. Möchte man die Aufnahme beenden, so drückt man einmal q.

Nun ist das Makro gespeichert und man kann es mittels @<name> also z.B. @a ausführen.
Mit @@ führt man das letzte Makro erneut aus. Man kann natürlich auch Quantifizierer benutzen und so z.B. 5 Mal das Makro a ausführen mit 5@a

Ein Beispiel:

Man möchte die Ausgabe von ls -lh, die in eine Datei gespeichert wurde so umschreiben, dass zuerst der Dateiname und dann die Größe kommt. Im Moment hat die Datei die Form

Rechte Hardlinks User Group Größe Bearbeitungszeit Dateiname

also z.B.

-rw-r--r-- 1 zimon zimon 13K 2009-04-04 16:24 beispiel.txt

Hinterher soll es so aussehen:

beispiel.txt 13K

Nun könnte man natürlich versuchen einen regulären Ausdruck zu finden wie z.B.

:%s/.\{10} [0-9]\+ [a-z0-9]\+[ ]\+[a-z0-9]\+[ ]\+\([0-9a-zA-Z\,]\+\) [0-9\-]\+ [0-9\:]\+ \(.\+\)/\2 \1/

der die Zeilen entsprechend ändert, aber man kann die Aufgabe auch mit einem Makro lösen. Dafür tippt man

qad4WWd2WdBA pj0q

um folgendes zu erreichen:

  • qa – startet die Aufnahme unter a
  • d4W – löscht die ersten 4 Wörter (durch Leerzeichen getrennte Strings)
  • W – überspringt das nächste Wort (die Größenangabe)
  • d2W – löscht die nächsten 2 Wörter
  • dB – löscht nun das vorherige Wort (die Größenangabe)
  • A <ESC> – fügt am Ende der Zeile ein Leerzeichen ein (Hier könnte man nun auch einen Bindestrich oder Ähnliches einfügen)
  • p – fügt das letzte gelöschte Wort (die Größenangabe) ein
  • j0 – springt an den Anfang der nächsten Zeile (damit man dort von vorne anfangen kann)
  • q – beendet die Makro-Aufzeichnung

Nun kann man diese Befehlssequenz mit @a ausführen, wobei immer an den Anfang der nächsten Zeile gesprungen wird. Besteht die Ausgabe aus 100 Zeilen, so kann man nach dem Aufzeichnen des Makros die restlichen 99 Zeilen mit 99@a bearbeiten.

Makros sind bei sehr vielen Änderungen extrem langsam, da sie die einzelnen Befehle immer wieder nacheinander ausführen müssen. Bei sehr vielen Änderungen sind regulären Ausdrücken daher der Vorzug zu geben, wenn es sich damit machen lässt. Beim obigen Beispiel benötigte das Makro für 2000 Zeilen einer ls -lh Ausgabe ca 40 Sekunden, während der obige reguläre Ausdruck alle Änderugnen innerhalb von einer Sekunde erledigte. Dafür kann man mit Makros Aufgaben erledigen, die mit regulären Ausdrücken nicht realisierbar sind.

Einige Tipps und Tricks für Screen

3. April 2009 von zimon

Ploppor hat schon eine kleine Einführung in Screen gegeben. Nun möchte ich diese durch ein paar praktische Tipps erweitern.

Mit Splitscreens arbeiten

Um ein Fenster horizontal zu spliten kann man Strg-a S nutzen. Daraufhin teilt sich das Fenster und man kann mit Strg-a Tab zwischen beiden Fenstern hin- und herschalten. Das neue Splitfenster ist noch leer, aber man kann einfach mit Strg-a p oder Strg-a n zwischen den bereits geöffneten Fenstern hin und herschalten oder mit Strg-a c ein neues anlegen.
Man kann auch die Größe der Fenster ändern. Dafür geht man mittels Strg-a : in den Command Line Modus und gibt fogendes ein:

resize size

Dabei steht size für die Anzahl der Zeilen, die bestimmt wie groß das Fenster sein soll.

Um ein Fenster eines Splitscreens wieder zu schließen kann man Strg-a X benutzen. Mit Strg+a Q werden alle anderen außer das aktuelle Fenster eines Splitscreens geschlossen

Mehrere Screen Sessions verwalten

Startet man Screen mit

screen -S sessionname

so wird dieser Session der Name “sessionname” mitgegeben. Wenn man nun mehrere detached Sessions hat, kann man die gewünschte Session einfach mit

screen -r sessionname

attachen.
Dabei kann man sich mit folgendem Befehl auch alle laufenden Sessions anzeigen lassen:

screen -ls

Programme mit Screen im Hintergrund starten

Man kann mit Screen ein Programm starten und die Session gleichzeitig detachen, so dass man wieder in der Kommandozeile ist und weiter arbeiten kann.
Die Screensession beendet sich automatisch, wenn auch das Programm beendet wird. Um z.B. top zu starten kann man nun folgenden Befehl benutzen:

screen -S top_session -md top

Der Session wurde auch direkt ein Name gegeben, so dass man sie später von anderen Sessions unterscheiden kann.
So kann man seine Befehle auf dem Server direkt in je einer Screen-Session starten und mit screen -ls sehen, ob z.B. Kopieraktionen abgeschlossen sind.
Das Starten im Hinergrund funktioniert nur, wenn man keine automatischen Aktionen für den Start von Screen in der .screenrc definiert hat.

Konsolenausgaben in eine Datei schreiben

Um die Ausgabe eines Fensters zu loggen gibt es folgende Befehle, die man im Command Line Modus ( Strg-a : ) eingeben kann:

  • logifle dateiname – gibt den Namen der Datei an, in die gespeichert werden soll
  • flush sekunden – gibt die Häufigkeit der Speicherung in Sekunden an (Standard 10)
  • log on – schaltet das Logging an
  • log off – schaltet das Logging aus

Session mit Passwort schützen

Man kann eine Session auch mit einem Passwort schützen, indem man im Command Line Modus password eingibt. Danach wird man 2 mal nach einem Passwort gefragt.
Wird die Session nun detached und man möchte sie wieder aufnehmen, so wird man zuerst nach dem Passwort gefragt.

Eine Session mehrmals attachen

Man kann mittels

screen -x sessionname

eine Session auch mehrmals attachen. Praktisch, wenn die ssh Verbindung abgebrochen ist und die Session somit nicht detached wurde.
Man kann eine Session sogar anderen Usern freigeben, die diese dann auch attachen können. Dafür gibt man im Command Line Modus die folgenden zwei Befehle ein:

multiuser on
acladd username

Wobei username der Name des Users ist, der freigegeben werden soll.
Nun kann ein anderer User diese Session attachen mit

screen -c username/sessionname

Hier ist username der Name des Users, dem die Session gehört.
Um anderen Usern die Session freizugeben muss allerdings das suid-Bit von Screen gesetzt werden und der Ordner /var/run/screen auf die Rechte 755:

sudo chmod u+s /usr/bin/screen
sudo chmod 755 /var/run/screen

Backup mit Linux Boardmitteln

2. April 2009 von zimon

Ich mag die Kommandozeile und ich mag Standardwerkzeuge. Daher möchte ich hier ein paar Backuplösungen vorstellen, die nur mit Standardwerkzeugen auskommen.

Die Vorteile sind

  • Die Werkzeuge sind auf fast jedem System Verfügbar
  • Die Werkzeuge sind im Allgmeinen sehr gut erprobt und enthalten quasi keine Bugs
  • Alles kann mit der Konsole gemacht werden. Also auch wenn man keine graphische Oberfläche hat oder per ssh eingeloggt ist
  • Vieles kann mittels Bash-Scripts automatisiert werden
  • Die Backups können meistens auch unter schwierigen Umständen noch erstellt und eingespielt werden



Komplettes Festplatten-Image erstellen

Um ein Komplettes Image der Festplatte zu erstellen kann man tar benuzten. Dies ist bei so ziemlich jeder Linux-Distribution standardmäßig installiert.

Man bootet mit einer LiveCD oder Knoppix CD. Wenn man einen Root-Server hat, kann man das Rescue-System (so heißt es bei Hetzner, andere Provider sollten jedoch ähnliches anbieten) booten. Nun erstellen wir ein Verzeichnis und mounten darin die Festplatte, die gesichert werden soll. Hat man sein System auf mehrere Partitionen verteilt, kann man diese an die entsprechenden Stellen einbinden oder von jeder einzelnen ein Backup machen. Das folgende Beispiel zeigt, wie man die Partition /dev/sda1 sichert. Die Datei liegt hinterher im Wurzelverzeichnis der Partition als image.tar.gz.  (Alle Befehle mit root-Rechten ausführen):

mkdir /mnt/system
mount /dev/sda1 /mnt/system
cd /mnt/rescue
tar cvzpf image.tar.gz ./ --exclude=image.tar.gz

Diese Datei kann nun auf einen externen Datenträger, einen FTP-Server  oder eine andere Partition/Festplatte kopiert werden.

Ist auf /dev/sda1 nicht genug Platz, so kann man auch direkt auf eine andere Partition bzw. einen Wechelsdatenträger sichern. Im folgenden wird ein Backup von /dev/sda1 nach /dev/sda2 gemacht:

mkdir /mnt/system
mount /dev/sda1 /mnt/system
mkdir /mnt/backup
mount /dev/sda2 /mnt/backup
cd /mnt/backup
tar cvzpf image.tar.gz -C /mnt/system ./

Das Praktische an dieser Datei ist, dass man sie jederzeit wieder auf eine (neue) Festplatte aufspielen kann und das gesammte System wieder hergestellt ist (lediglich der Bootloader muss ggf. neu installiert werden). Dabei ist egal, ob der die Partition eine andere Größe hat (solange alles drauf passt) oder mit einem anderen Dateisystem formatiert ist.
Das Einspielen des Backups geht nun folgendermaßen: Wieder Booten mit LiveCD oder im Rescue-System und dann:

mkdir /mnt/system
mount /dev/sda1 /mnt/system
cd /mnt/system
cp /path/to/backup/image.tar.gz .
tar xvzpf image.tar.gz

Der Kopierbefehl muss entsprechend angepasst werden oder man entpackt direkt vom anderen Medium:

mkdir /mnt/system
mount /dev/sda1 /mnt/system
mkdir /mnt/backup
mount /dev/sda2 /mnt/backup
cd /mnt/backup
tar xvzpf image.tar.gz -C /mnt/system

Wi man Grub neu installiert ist auf dem Ubuntuusers Wiki im Artikel Grub sehr gut beschrieben. (Ich gehe mal davon aus, dass lilo kaum noch genutzt wird und wer es noch nutzt, wird wissen wie man es neu installiert)



Einzelne Verzeichnisse sichern

Möchte man nur bestimmte Verzeichnisse sichern, so kann man auch tar verwenden. Im Prinzip geht dies genauso, nur dass man nicht unbedingt neu zu booten braucht. (Die Pfade müssen dann entsprechend angepasst werden und es braucht nichts gemountet werden. Verzeichnisse brauchen auch nur einmal am Anfang erstellt werden.) Ein Backupscript mit tar gibt es im Ubuntuusers Wiki. Ein weiteres sehr gutes Script mit vielen weiteren Optionen und automatischem FTP-Upload ist Tartarus (Dies ist ein recht großes Bash Script, welches jedoch nur Standardwerkzeuge nutzt).
Möchte man MySQL Datenbanken sichern, so sollte man vorher einen Dump machen und diesen sichern, da sich die Datenbank sonst in einem inkonsistenten Zustand befinden kann.
Hier ein kleines Script, welches alle Datenbanken sichert:

#!/bin/bash
 
# Wohin sollen Datenbank Backups geschrieben werden?
DB_BACKUP_PATH=/pfad/zum/backup/verzeichnis
 
cd $DB_BACKUP_PATH
 
# Bereinigte Liste der Datenbanken erzeugen
#ersetze passwort mit dem root-Passwort der MySQL Datenbank
DBASELIST=`mktemp`
mysqlshow -ppasswort | awk '{print $2}' | grep -v Databases | sort > $DBASELIST
 
for x in `cat $DBASELIST`; do
    #echo "Datenbank: $x sichern";
    mysqldump --opt -ppasswort $x > $x.sql;
done;
 
# Alte .gz-Dateien loeschen
rm *.gz
 
# Dateien zippen
gzip *



Inkrementelles Backup mit rsync

Möchte man regelmäßig ein Backup von zu Hause ziehen, so ist rsync die beste Wahl. Denn es werden nur Dateien kopiert, die sich geändert haben.
rsync ist auch dann eine gute Wahl, wenn man die Möglichkeit hat auf einen Server mit ssh Zugriff zu sichern. Natürlich kann rsync aber auch in ein Verzeichnis sichern.
Eine ausführliche Erklärung zu rsync gibt es im Ubuntuusers Wiki (und natürlich in der manpage). Ein sehr gutes Backup-Script mit Erklärung wurde von Heinlein online gestellt.
Auch bei rsync-Backups ist bei Datenbanken darauf zu achten, dass vorher ein Dump erstellt und nur dieser gesichert wird.



Meine Backuplösung

Ich nutze Tartarus und rsync für die Backups.
Für Tartarus habe ich 3 Configurationen eingerichtet: eine für die Webaccounts, eine für die Datenbanken und eine für Konfigurationsdateien (/etc). Bei den Datenbanken wird obiges Script als Pre-Hook vor dem eigentlichen Backup durchgeführt um nur die Dumps zu sichern. Die Backups werden symmetrisch GPG verschlüsselt, da sie per FTP auf den Backupserver geladen werden, der von Hetzner zur Verfügung steht. Es wird einmal die Woche ein volles Backup und jeden Tag dazwischen ein inkrementelles Backup der Daten erstellt. Backups, die älter als eine Woche sind, werden automatisch gelöscht.
Mit rsync wird jeden Tag ein inkrementelles Backup zu mir nach Hause durchgeführt.

Aprilscherze 2009 im Netz

1. April 2009 von zimon

Es ist wieder der 1. April und das Netz ist voller Scherze.

Hier sammel ich mal einige von ihnen, die mir im Laufe des Tages so unter kommen.

Google hat jedes Jahr mehrere Aprilscherze auf Lager (alle in englisch)

Es werden bestimmt noch mehr werden, daher einfach später nochmal wieder kommen ;-)

vim als Dateibrowser und (S)FTP-Client

30. März 2009 von zimon

vim bietet Funktionen an, um sich die Dateien in einem Ordner anzusehen.
Dafür braucht man nur statt einer Datei einen Ordner mit vim zu öffnen. Z.B. mit

vim meinordner

wird das Verzeichnis “meinordner” geöffnet. Oder aus vim heraus z.B. mit

:e .

um das aktuelle Verzeichnis in vim zu öffnen.

Nun wird der Ordnerinhalt angezeigt. Dort kann man wie gewohnt mit j und k den Cursor nach oben und unten Bewegen. Mit Enter öffnet man eine Datei oder einen Ordner. Die Ordner werden blau dargestellt und werden vor den Dateien einsortiert (wie auch in vielen graphischen Dateibrowsern).
Interessant in diesem Zusammenhang ist das Plugin NERDTree, welches die Standardfunktion mit einem Dateibaum ersetzt und einige Tastenkombinationen bietet um z.B. einen Teilbaum zu öffnen oder zu schließen.

Genauso leicht kann man auch Dateien über FTP oder SFTP bearbeiten. Dafür startet man vim einfach mit der URL als Argument:

vim ftp://servername.tld/pfad/zur/datei

bzw für SFTP:

vim scp://servername.tld/pfad/zur/datei

Man kann wie von ftp gewohnt auch den Usernamen direkt mit angeben:

vim ftp://user@servername.tld/pfad/zur/datei

So spart man sich das lästige Hoch- und Runterladen von Dateien über FTP.

Lesezeichen kann man in der Datei ~/.netrc speichern indem man für jeden Rechner eine Zeile mit folgendem Inhalt anlegt:

machine HOSTNAME login USERID password "PASSWORD"

(Die Groß geschriebenen Wörter müssen jeweils ersetzt werden)

Natürlich kann man auch auf dem FTP-Server den in vim integrierten Dateibrowser nutzen:

vim ftp://servername.tld/pfad/zum/verzeichnis/

Wichtig ist hier der Slash am Ende.

Jabber Bot zBot in Version 0.2

28. März 2009 von zimon

Heute stelle ich die Version 0.2 von meinem Jabber Bot zBot vor.

Nun wird eine Logdatei unterstützt, in der alle Konversationen mit dem Bot gespeichert werden können. Die Option kann in der Datei modules/Configs.pm ein- und ausgeschaltet werden. Dort kann auch der Ort bestimmt werden, wo die Logdatei gespeichert werden soll. Ein Timestamp wird mit gespeichert. In einem MUC (Chat) wird das gesammte dortige Gespräch mit geloggt, nicht nur die Konversation mit dem Bot.

Des weiteren wurde die Plugin-Schnittstelle erweitert. Nun kann neben der Hilfe auch eine Kurzbeschreibung angegeben werden, die bei der Auflistung der verschiedenen Befehle angezeigt wird. Jetzt kann auch eine Referenz zu einer Idle-Funktion angegeben werden, die alle 15 Sekunden aufgerufen wird. Diese kann genutzt werden um z.B. regelmäßig RSS-Feeds abzurufen (bei einem RSS-Plugin) oder um ähnliche Aufgaben im Hintergrund zu erledigen. Die Vorhandenen Plugins können jedoch auch ohne Änderung weiter verwendet werden. Jedoch habe ich die Plugins hier auf dem Blog entsprechend aktualisiert, so dass sie nun eine Kurzbeschreibung enthalten.

Das Plugin “Say” (Kommando sag), welches den Bot in Chaträumen etwas sagen lässt wurde erweitert. Nun kann er auch in Räumen etwas sagen, die nicht in der Konfigurationsdatei angegeben sind und noch nicht mal auf dem angegebenen Conference-Server liegen müssen (In der modules/Configs.pm lässt sich der Bot jedoch auf den eigenen Conference-Server beschränken). Danach ist er in den entsprechenden Räumen eingeloggt und nimmt dort auch Befehle entgegen. mit dem Befehl

sag ignoriere raumname

kann man ihn im Raum raumname wieder zum schweigen bringen (Befehle aus diesem Raum werden dann ignoriert bis der Bot mit sag erneut etwas in dem Raum sagen soll). Mehr Infos sind in der Hilfe verfügbar (hilfe sag). Eine Funktion um den Bot aus dem Raum wieder abzumelden wird leider nicht von der Bibliothek (Net::Jabber::Bot) unterstützt.

Beim Befehl hilfe wird die Ausgabe der möglichen Befehle nun alphabetisch sortiert.

Eine Updatefunktion gibt es leider nicht. Da sich auch in der Konfigurationsdatei ein paar Änderungen ergeben haben, müssen alle Dateien ersetzt werden und die Daten erneut in die Konfigurationsdatei modules/Configs.pm eingefügt werden.

Die neue Version kann im ursprünglichen Artikel zBot – ein Jabber Bot in Perl herunter geladen werden. Dort findet man auch weitere Informationen zum Bot.

Tools zur VHDL Entwicklung in der Linux Konsole

25. März 2009 von zimon

Wie versprochen hier ein Toolset zu VHDL in der Linux Konsole.

Um sich das ganze geklicke zum Synthetisieren und Implementieren unter ISE zu ersparen, hat Torsten Meißner ein Makefile mit einigen Batch Dateien erstellt, die von Simon Schulz erweitert wurden. Auf seiner Website kann man sie herunter laden (und darauf beziehe ich mich im Folgenden).

Wenn das Archiv entpackt ist, kann man seine vhd Dateien in den Ordner ./rtl kopieren. In der Datei ./config/settings werden grundlegende Einstellungen vorgenommen. Die ucf-Datei kommt in das Verzeichnis ./layout.

Nach einem make project sollte eigentlich alles Funktionieren. Jedoch wird in den Dateien ./syn/src/implement.sh und ./syn/src/synthesize.sh die nichtexistente Datei ~/Xillinx/settings.sh importiert, die einige Umgebungsvariablen definieren soll. Diese Definitionen habe ich einfach statt dem Aufruf der Datei in dei beiden Dateien geschrieben. Der Pfad zum ISE Verzeichnis muss entsprechend angepasst werden:

#set envirement for ise
#. ~/Xilinx/settings.sh
export PLATFORM=lin
export XILINX=/path/to/ISE
export LMC_HOME=${XILINX}/smartmodel/${PLATFORM}/installed_lin
export PATH=${XILINX}/bin/${PLATFORM}:${PATH}
export LD_LIBRARY_PATH=${XILINX}/bin/${PLATFORM}:/usr/X11R6/lib
export NPX_PLUGIN_PATH=${XILINX}/java/${PLATFORM}/jre/plugin/i386/ns4
export myxilinxrc=${HOME}/.qt/xilinxrc

In der Makefile hat das Target bitup bei mir nicht funktioniert, da ich die libusb-driver benuzte. Daher hab ich das Ziel durch folgendes ersetzt (der Pfad zu ISE muss entsprechend angepasst werden):

#upload bit to fpga
bitup :
    bash -c 'export LD_PRELOAD=/usr/lib/libusb-driver.so; /path/to/ISE/bin/lin/impact -batch impact/impact_upload_bit.cmd'

Da das Makefile im Verzeichnis ./syn/src liegt, die vhd Dateien jedoch in ./rtl ist ein Aufruf von make aus vim heraus nur umständlich möglich. Daher habe ich ein kleines Makefile generiert, welches man ins Verzeichnis ./rtl kopieren kann.
Es wechselt für jedes Ziel das Verzeichnis und ruft das echte Makefile mit dem entsprechenden Ziel auf:

#rule for synthesis
syn :
    cd ../syn/src && make syn
 
#rule for implementation
imp :
    cd ../syn/src && make imp
 
#project file generation
project :
    cd ../syn/src && make project
 
#upload bit to fpga
bitup :
    cd ../syn/src && make bitup
 
#upload prom to fpga
promup :
    cd ../syn/src && make promup
 
#generate prom
promgen :
    cd ../syn/src && make promgen
 
#reset/unlock pport cable (if impact says cable locked)
unlock_cable :
    cd ../syn/src && make unlock_cable
 
#rule for all
all : clean syn imp bitup
 
#rule for cleaning
clean :
    cd ../syn/src && make clean

Nun funktioniert alles und man kann aus vim heraus mit :make all den kompletten Vorgang starten.

Mittels

  • :make clean werden alle temporär erstellten Dateien gelöscht (inklusive Bit-Datei)
  • :make syn wird die Synthese gestartet
  • :make imp wird die Diesign Implementation gestartet (Map, Place & Route,…) und die Bit-Datei erstellt
  • :make bitup wird die Bit-Datei in den FPGA geladen
  • :make all werden alle 4 Vorgänge nacheinander gestartet

Nachdem Dateien hinzugefügt oder gelöscht wurden muss man die Datei ./config/settings anpassen und erneut make project ausführen.


Bloggeramt.de frisch gebloggt Blogverzeichnis - Blog Verzeichnis bloggerei.de