1. Einführung
Dieses Dokument beschreibt, wie man die LinuxCNC Software und Dokumentation aus dem Quellcode erstellt. Dies ist vor allem nützlich, wenn Sie ein Entwickler sind, der LinuxCNC modifiziert. Es kann auch nützlich sein, wenn Sie ein Benutzer sind, der Entwickler-Zweige testet, obwohl Sie dann auch die Möglichkeit haben, einfach Debian-Pakete aus dem Buildbot zu installieren: http://buildbot.linuxcnc.org
1.1. Schnellstart
Wer ungeduldig ist, kann dies versuchen:
> git clone https://github.com/LinuxCNC/linuxcnc.git linuxcnc-dev
> cd linuxcnc-dev/src
> ./autogen.sh
> ./configure --with-realtime=uspace
> make
Das wird wahrscheinlich schiefgehen! Das macht Sie nicht zu einem schlechten Menschen, es bedeutet nur, dass Sie dieses ganze Dokument lesen sollten, um herauszufinden, wie Sie Ihre Probleme lösen können. Insbesondere den Abschnitt über <Satisfying-Build-Dependencies, Bedienen von Build Abhängigkeiten (engl. dependencies)>>.
Wenn Sie auf einem Echtzeit-fähigen System arbeiten (wie z.B. eine Installation aus dem LinuxCNC Live/Install Image, siehe den Echtzeit Abschnitt unten), ist ein zusätzlicher Build-Schritt zu diesem Zeitpunkt erforderlich:
>$ sudo make setuid
Nachdem Sie erfolgreich LinuxCNC gebaut haben, ist es nun Zeit, die Tests durchzuführen:
>$ source ../scripts/rip-environment
>$ runtests
Auch das kann fehlschlagen! Lesen Sie das gesamte Dokument, insbesondere aber den Abschnitt Einrichten der Testumgebung.
2. Unterstützte Plattformen
Das LinuxCNC-Projekt orientiert sich an moderne Debian-basierte Distributionen, einschließlich Debian, Ubuntu und Mint.
Wir testen kontinuierlich auf den unter http://buildbot.linuxcnc.org aufgeführten Plattformen.
LinuxCNC baut auf die meisten anderen Linux-Distributionen, obwohl die Verwaltung von Abhängigkeiten mehr manuell und weniger automatisch sein wird. Patches zur Verbesserung der Portabilität auf neue Plattformen sind immer willkommen.
2.1. Echtzeit
LinuxCNC ist eine Werkzeugmaschinensteuerung, und es erfordert eine Echtzeit-Plattform, um diesen Anforderungen gerechtzuwerden. Diese Version von LinuxCNC unterstützt drei Echtzeit-Plattformen
- RTAI
-
Von https://www.rtai.org. Ein Linux-Kernel mit dem RTAI-Patch ist aus dem Debian-Archiv unter https://linuxcnc.org erhältlich. Siehe LinuxCNC erhalten für Installationsanweisungen.
- Xenomai
-
Von https://xenomai.org. Sie müssen einen Xenomai-Kernel selbst kompilieren oder beziehen.
- Preempt-RT
-
Von https://rt.wiki.kernel.org. Ein Linux-Kernel mit dem Preempt-RT-Patch ist gelegentlich im Debian-Archiv unter https://www.debian.org und in der Wayback Machine unter https://snapshot.debian.org verfügbar.
Um die Echtzeit-Fähigkeiten von LinuxCNC zu nutzen, müssen bestimmte Teile von LinuxCNC mit root-Rechten laufen. Um root für diese Teile zu aktivieren, führen Sie diesen zusätzlichen Befehl nach dem make
aus, der LinuxCNC baut:
>$ sudo make setuid
2.2. Nicht in Echtzeit
LinuxCNC kann auch auf Nicht-Echtzeit-Plattformen, wie z.B. einer normalen Installation von Debian oder Ubuntu ohne speziellen Echtzeit-Kernel, gebaut und ausgeführt werden.
In diesem Modus ist LinuxCNC nicht nützlich für die Steuerung von Werkzeugmaschinen, aber es ist nützlich für die Simulation der Ausführung von G-Code und für die Prüfung der Nicht-Echtzeit-Teile des Systems (wie die Benutzeroberflächen, und einige Arten von Komponenten und Gerätetreiber).
3. Build-Modi
Es gibt zwei Möglichkeiten, LinuxCNC zu bauen: den entwicklerfreundlichen "run in place" Modus und den benutzerfreundlichen Debian-Packaging-Modus.
3.1. Kompilieren (bauen) für eine Ausführung ohne Installation ("run-in-place")
In einem Run-In-Place-Build werden die LinuxCNC-Programme aus den Quellen kompiliert und dann direkt aus dem Build-Verzeichnis ausgeführt. Nichts wird außerhalb des Build-Verzeichnisses installiert.
Dies ist schnell und einfach und eignet sich für schnelle Iterationen von Änderungen.
Die LinuxCNC Test-Suite läuft nur in einem Run-In-Place-Build.
Die meisten LinuxCNC-Entwickler bauen hauptsächlich auf diese Weise.
Das Bauen für Run-In-Place folgt den Schritten im Schneller Einstieg Abschnitt am Anfang dieses Dokuments, möglicherweise mit anderen Argumenten für src/configure
und make
.
3.1.1. src/configure
Argumente
Das Skript src/configure
konfiguriert, wie der Quellcode kompiliert werden soll. Es nimmt viele optionale Argumente entgegen.
Alle Argumente für src/configure
auflisten, indem man dies ausführt:
>$ cd linuxcnc-dev/src
>$ ./configure --help
Die am häufigsten verwendeten Argumente sind:
-
--with-realtime=uspace
-
Bauen für jede Echtzeit-Plattform, oder für Nicht-Echtzeit. Die resultierenden ausführbaren Dateien von LinuxCNC laufen sowohl auf einem Linux-Kernel mit Preempt-RT-Patches (mit Echtzeit-Maschinenkontrolle) als auch auf einem reguälren (ungepatchten) Linux-Kernel (mit G-Code-Simulation, aber ohne Echtzeit-Maschinenkontrolle). Wenn Entwicklungsdateien für Xenomai (typischerweise aus dem Paket libxenomai-dev) oder RTAI (typischerweise aus einem Paket, dessen Name mit "rtai-modules" beginnt) installiert sind, wird die Unterstützung für diese Echtzeit-Kernel ebenfalls aktiviert.
-
--with-realtime=/usr/realtime-$VERSION
-
Bauen Sie für die RTAI-Echtzeitplattform unter Verwendung des älteren "Echtzeit-Kernel" Pakets. Dies erfordert, dass Sie einen RTAI-Kernel und die RTAI-Module in
/usr/realtime-$VERSION
installiert haben. Die resultierenden ausführbare Dateien von LinuxCNC werden nur auf dem angegebenen RTAI-Kernel laufen. Ab LinuxCNC 2.7, produziert dies die beste Echtzeit-Leistung. -
--enable-build-documentation
-
Erstellt die Dokumentation zusätzlich zu den ausführbaren Dateien. Diese Option erhöht den Zeitaufwand für die Kompilierung erheblich, da die Erstellung der Dokumentation recht zeitaufwendig ist. Wenn Sie nicht aktiv an der Dokumentation arbeiten, sollten Sie dieses Argument weglassen.
3.1.2. make
Argumente
Der Befehl make akzeptiert zwei nützliche optionale Argumente.
- Parallele Kompilierung
-
make
nimmt ein optionales Argument-jN
(wobei N eine Zahl ist). Dies ermöglicht die parallele Kompilierung mit N gleichzeitigen Prozessen, was Ihre Erstellung erheblich beschleunigen kann.Ein nützlicher Wert für N ist die Anzahl der CPUs in Ihrem Build-System. Sie können die Anzahl der CPUs ermitteln, indem Sie
nproc
ausführen. - Bauen nur eines bestimmten Ziels
-
Wenn Sie nur einen bestimmten Teil von LinuxCNC bauen wollen, können Sie das, was Sie bauen wollen, in der Kommandozeile
make
nennen. Wenn Sie zum Beispiel an einer Komponente namens "froboz" arbeiten, können Sie seine ausführbare Datei zu bauen, indem Sie:$ cd linuxcnc-dev/src $ make ../bin/froboz
3.2. Debian-Pakete erstellen
Beim Erstellen von Debian-Paketen werden die LinuxCNC-Programme aus dem Quellcode kompiliert und dann in einem Debian-Paket gespeichert, komplett mit Abhängigkeitsinformationen. Dies nimmt mehr Zeit in Anspruch, und die Programme können nicht verwendet werden, bis das Debian-Paket auf einer Zielmaschine installiert ist.
Diese Art des Bauens ist vor allem dann nützlich, wenn die Software für die Auslieferung an Endbenutzer verpackt werden soll und wenn die Software für einen Rechner erstellt werden soll, auf dem die Build-Umgebung nicht installiert ist oder der keinen Internetzugang hat.
Das Erstellen von Debian-Paketen erfordert das Hilfsprogramm`dpkg-buildpackage` aus dem Paket dpkg-dev
:
$ sudo apt-get install dpkg-dev
Das Bauen von Debian-Paketen erfordert auch, dass alle Build-Abhängigkeiten installiert sind, wie im Abschnitt Satisfying Build Dependencies beschrieben.
Sobald diese Voraussetzungen erfüllt sind, besteht die Erstellung der Debian-Pakete aus zwei Schritten.
Der erste Schritt ist die Generierung der Debian-Paket-Skripte und Metadaten aus dem Git-Repositorium, indem Sie dies ausführen:
$ cd linuxcnc-dev/debian
$ ./configure uspace
$ cd ..
Anmerkung
|
Das Skript Das |
Sobald die Debian-Paket-Skripte und Meta-Daten konfiguriert sind, bauen Sie das Paket, indem Sie dpkg-buildpackage
ausführen (beachten Sie, dass es in dem Verzeichnis linuxcnc-dev
ausgeführt werden muss, nicht in linuxcnc-dev/debian
):
$ dpkg-buildpackage -b -uc
3.2.1. debian/configure
Argumente
Das Skript debian/configure
konfiguriert das Debian-Paket. Es muss ausgeführt werden, bevor dpkg-checkbuilddeps
und dpkg-buildpackage
ausgeführt werden können.
Es erwartet ein einziges Argument, das die Echtzeit- oder Nicht-Echtzeit-Plattform angibt, für die gebaut werden soll. Die normalen Werte für dieses Argument sind:
-
uspace
-
Konfigurieren Sie das Debian-Paket für Preempt-RT-Echtzeit oder für Nicht-Echtzeit (diese beiden sind kompatibel).
-
noauto
-
rtai
-
xenomai
-
Normalerweise wird die Liste der RTOS, die uspace Echtzeit unterstützen soll, automatisch erkannt. Wenn Sie möchten, können Sie jedoch eine oder mehrere dieser Optionen nach
uspace
angeben, um die Unterstützung für diese RTOS zu aktivieren. Um die automatische Erkennung zu deaktivieren, geben Sienoauto
an.Wenn Sie nur die traditionelle RTAI "Kernel-Modul" Echtzeit wollen, verwenden Sie stattdessen
-r
oder$KERNEL_VERSION
. -
rtai=<package name>
-
Wenn das Entwicklungspaket für rtai lxrt nicht mit "rtai-modules" beginnt, oder wenn das erste von apt-cache search aufgelistete Paket nicht das gewünschte ist, geben Sie den Paketnamen explizit an.
-
-r
-
Konfigurieren Sie das Debian-Paket für den aktuell laufenden RTAI-Kernel. Sie müssen einen RTAI-Kernel auf Ihrer Build-Maschine laufen haben, damit dies funktioniert!
-
$KERNEL_VERSION
-
Konfigurieren Sie das Debian-Paket für die angegebene RTAI-Kernel-Version (zum Beispiel "3.4.9-rtai-686-pae"). Das passende Kernel-Headers-Debian-Paket muss auf Ihrer Build-Maschine installiert sein (zum Beispiel "linux-headers-3.4.9-rtai-686-pae"). Beachten Sie, dass Sie LinuxCNC in dieser Konfiguration erstellen können, aber wenn Ihr Rechner nicht auch mit dem passenden RTAI-Kernel läuft, können Sie LinuxCNC nicht ausführen, auch die Test-Suite nicht.
4. Erfüllen von Build-Abhängigkeiten
Auf Debian-basierenden Plattformen bieten wir Paketierungs-Metadaten, die wissen, welche externen Softwarepakete installiert werden müssen, um LinuxCNC zu bauen. Dies wird Build-Abhängigkeiten von LinuxCNC genannt. Sie können diese Metadaten verwenden, um die erforderlichen Pakete direkt einzusehen, die in Ihrem Build-System fehlen.
Debian-Systeme bieten ein Programm namens dpkg-checkbuilddeps
, das die Paket-Metadaten analysiert und die als Build-Abhängigkeiten aufgelisteten Pakete mit der Liste der installierten Pakete vergleicht und Ihnen sagt, was fehlt.
Installieren Sie zuerst das Programm dpkg-checkbuilddeps
, indem Sie es ausführen:
$ sudo apt-get install dpkg-dev
Dann bitten Sie Ihren LinuxCNC git checkout, seine Debian-Paket-Metadaten zu generieren:
$ cd linuxcnc-dev/debian
$ ./configure uspace
$ cd ..
Schließlich bitten Sie dpkg-checkbuilddeps
, seine Arbeit zu tun (beachten Sie, dass es aus dem Verzeichnis linuxcnc-dev
ausgeführt werden muss, nicht aus linuxcnc-dev/debian
):
$ dpkg-checkbuilddeps
Es wird eine Liste von Paketen ausgegeben, die erforderlich sind, um LinuxCNC auf Ihrem System zu bauen, die aber noch nicht installiert sind. Installieren Sie sie alle mit sudo apt-get install
, gefolgt von den Paketnamen.
Sie können dpkg-checkbuilddeps
jederzeit erneut ausführen, um alle fehlenden Pakete aufzulisten.
5. Einrichten der Umgebung
Dieser Abschnitt beschreibt die speziellen Schritte, die benötigt werden, um eine Maschine einzurichten, um die LinuxCNC-Programme auszuführen, einschließlich der Tests.
5.1. Erhöhen Sie das Limit für den gesperrten Speicher
LinuxCNC versucht, seine Echtzeit-Latenz zu verbessern, indem es den Speicher, den es verwendet, im RAM sperrt. Es tut dies, um zu verhindern, dass das Betriebssystem von Swapping LinuxCNC auf der Festplatte, die schlechte Auswirkungen auf die Latenz haben würde.
Normalerweise ist es verpönt, Speicher in den Arbeitsspeicher zu sperren, und das Betriebssystem setzt eine strenge Grenze dafür, wie viel Speicher ein Benutzer sperren darf.
Bei Verwendung der Preempt-RT-Echtzeitplattform läuft LinuxCNC mit genügend Privilegien, um seine Speichersperrgrenze selbst zu erhöhen. Bei Verwendung der RTAI-Echtzeit-Plattform hat es nicht genug Privilegien, und der Benutzer muss die Speichersperre Grenze zu erhöhen.
Wenn LinuxCNC beim Start folgende Meldung zeigt, ist das Problem die für Ihre System konfigurierte Grenze des gesperrten Speichers:
RTAPI: ERROR: failed to map shmem
RTAPI: Locked memory limit is 32KiB, recommended at least 20480KiB.
Um dieses Problem zu beheben, fügen Sie eine Datei namens /etc/security/limits.d/linuxcnc.conf
(als root) mit Ihrem bevorzugten Texteditor hinzu (z.B. sudo gedit /etc/security/limits.d/linuxcnc.conf
). Die Datei sollte die folgende Zeile enthalten:
* - memlock 20480
Melden Sie sich ab und wieder an, damit die Änderungen wirksam werden. Überprüfen Sie mit dem folgenden Befehl, ob die Speichersperrgrenze angehoben wurde:
$ ulimit -l
6. Optionen zum Auschecken des Git-Repos
Die Schnellstart Anleitung am Anfang dieses Dokuments klont unser Git-Repository auf https://github.com/LinuxCNC/linuxcnc.git. Dies ist der schnellste und einfachste Weg um loszulegen. Es gibt jedoch auch noch andere Optionen, die Sie in Betracht ziehen sollten.
6.1. Forken Sie uns auf Github
Das LinuxCNC Projekt git repo ist auf https://github.com/LinuxCNC/linuxcnc. github ist ein beliebter git Hosting-Service und Code-Sharing-Website. Sie können ganz einfach (und kostenlos) einen Fork unseres Git-Repos bei Github erstellen und diesen verwenden, um Ihre Änderungen zu verfolgen und zu veröffentlichen.
Nachdem Sie Ihren eigenen Github-Fork von LinuxCNC erstellt haben, klonen Sie ihn auf Ihren Entwicklungsrechner und fahren Sie wie gewohnt mit den von Ihnen gwünschten Änderungen (gerne auch "hacking" genannt) fort.
Wir vom LinuxCNC-Projekt hoffen, dass Sie Ihre Änderungen mit uns teilen werden, damit die Gemeinschaft von Ihrer Arbeit profitieren kann. Github macht dieses Teilen sehr einfach: Nachdem Sie Ihre Änderungen aufpoliert und in Ihren Github-Fork gepusht haben, schicken Sie uns einen Pull Request.