Kann ich auf meiner Entwicklungsmaschine ein Chroot verwenden, um eine Anwendung zu erstellen, die auf einer eingebetteten Linux-Installation ausgeführt werden kann?

Kann ich auf meiner Entwicklungsmaschine ein Chroot verwenden, um eine Anwendung zu erstellen, die auf einer eingebetteten Linux-Installation ausgeführt werden kann?

Ich versuche, eine Anwendung zu entwickeln, die auf einer eingebetteten Linux-Installation läuft. Sie wird mit einer älteren Version von libc ausgeliefert als die, die ich auf meinem Entwicklungsrechner habe. Wenn ich auf meinem Entwicklungsrechner eine Chroot-Umgebung erstellen, die Bibliotheken von meinem eingebetteten Gerät so kopieren würde, dass die Chroot-Umgebung das Gerät spiegelt, und dann die Anwendung erstellen würde, wäre es dann sicher, sie auf dem Gerät auszuführen? Mein Entwicklungsrechner und das Gerät sind beide x86 32-Bit, daher glaube ich nicht, dass ich plattformübergreifend kompilieren muss.

Wenn die von mir geschriebene Anwendung außerdem eine Verknüpfung mit zusätzlichen Bibliotheken erfordert (die auf dem Gerät nicht vorhanden sind), kann ich diese Bibliotheken dann sicher auf der Entwicklungsmaschine im Chroot erstellen und sie dann einfach für die Anwendungsbereitstellung auf das Gerät kopieren?

Aus all dem, was ich zu diesem Thema gelesen habe, geht hervor, dass ich nur dann sicherstellen kann, dass alles richtig zusammenhängt, wenn ich die Anwendung tatsächlich auf dem Gerät erstelle. Dies ist jedoch keine Option, da es sich um eine Minimalinstallation handelt und die GCC-Installation nicht mitgeliefert wird.

Antwort1

Dies funktioniert im Allgemeinen. Ich würde es einfach mal ausprobieren, aber es gibt ein paar Dinge, die Sie beachten müssen:

  • Beim Erstellen müssen Binärdateien für die CPU-Architektur und -Funktionen Ihres Ziels erstellt werden. Da beide x86 sind, ist dies sehr hilfreich, Sie müssen jedoch weiterhin vorsichtig sein, wenn Sie Prozessorfunktionen wie SSE3 usw. verwenden. Wenn Sie eine Binärdatei erstellen, die Funktionen nutzt, die in Ihrer Zielinstallation nicht vorhanden sind, funktioniert sie nicht.

  • Der Kernel Ihres Build-Systems kann einen gewissen Einfluss auf das Verhalten Ihrer Chroot-Umgebung haben. Sie können für ein Chroot-System keinen anderen Kernel als für das Host-System verwenden, daher kann es zu Abweichungen zwischen den beiden kommen. Apps kommunizieren jedoch im Allgemeinen letztendlich über libc mit dem Kernel, was eine Standardschnittstelle bietet, die dazu beitragen kann, solche Probleme zu vermeiden.

  • Ihre libc muss bis zu einem gewissen Grad mit Ihrem Kernel kompatibel sein. Die libc Ihres eingebetteten Systems ist je nach Schnittstellenänderungen möglicherweise nicht vollständig mit Ihrem Kernel kompatibel. Wenn die libc jedoch älter als Ihr Kernel ist, dürfte dies kein Problem darstellen (alte Kernelschnittstellen bleiben eher erhalten, um alte Binärdateien zu unterstützen).

  • Die Dienste Ihres Hostsystems sind für Ihr eingebettetes System sichtbar. Dies ist bei allen Chroots üblich, da sie Prozesstabellen, Netzwerkschnittstellen usw. gemeinsam nutzen.

  • Für Ihre „zusätzlichen Bibliotheken“ können Sie statische Verknüpfungen verwenden, um diese mit Ihrer Anwendung zu verknüpfen. Dann können Sie vermeiden, die Bibliotheken auf dem Gerät bereitzustellen. Ihre Laufleistung kann variieren.

Sie könnten stattdessen die Verwendung einer virtuellen Maschine in Betracht ziehen. Dies wird zwar nicht unbedingt alle Probleme beseitigen (wie Prozessorfunktionen/-flags), aber Sie können eine Umgebung erstellen, die Ihrem eingebetteten System viel besser entspricht. Das heißt, Sie können denselben Kernel verwenden, denselben Startvorgang ausführen, eine Kontaminierung durch die Dienste des Hosts vermeiden …

Bedenken Sie, dass Sie, wenn Sie eine Build-Toolchain in Ihrem Chroot einrichten, darüber nachdenken sollten, wie Sie die neuen Dateien zurück auf Ihr eingebettetes System kopieren; wahrscheinlich möchten Sie die Toolchain-Dateien (gcc usw.) nicht kopieren.

Versuchen Sie, es einzurichten und eine Testanwendung zu schreiben, einige Bibliotheken oder was auch immer zu erstellen, und sehen Sie, wie gut sie funktionieren, wenn sie auf das eingebettete System verschoben werden.

verwandte Informationen