Ich habe mein eigenes winziges Linux-Dateisystem mit buildroot entwickelt und busybox . Ich habe den Linux-2.6.38.8-Kernel verwendet, der je nach Bedarf für das Zielsystem (X86) konfiguriert und crosskompiliert wurde. Jetzt ist das Dateisystem erstellt, aber es hat nur die Busybox-Shell und unterstützt keine GUI. Es hat keinen Paketmanager too.Now ich möchte GUI darauf aktivieren. Ich habe /etc überprüft aber es gab kein x11 Verzeichnis oder x11.conf file.startx wird nicht unterstützt auch.
How can I install x11(XFree86 or Xorg) on my system Explicitly.
I also want to install a package-manager for my system.
Wie kann dies erreicht werden?
Akzeptierte Antwort:
Ubuntu 16.04-Host, Buildroot 2017.02
Current Buildroot hat ein X11-Paket, das es uns „einfach“ macht:https://github.com/buildroot/buildroot/tree/2016.05/package/x11r7
Dieses Repo erstellt das gesamte System für Sie in einem einzigen Befehl:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/b134f3958884ce1fce2dd9d31d19ab0c0fbe9089#x11
Alternativ hier eine vorgefertigte .config
Datei:https://github.com/cirosantilli/buildroot-configs/blob/44b45b5c7f68e44abcda360a2b980f8301901a9a/qemu_x86_64_x11_defconfig
Dies sind die minimalen X11-spezifischen Konfigurationen, mit denen ich davongekommen bin:
BR2_PACKAGE_XAPP_TWM=y
BR2_PACKAGE_XAPP_XCALC=y
BR2_PACKAGE_XAPP_XCLOCK=y
BR2_PACKAGE_XAPP_XEYES=y
BR2_PACKAGE_XAPP_XINIT=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_KEYBOARD=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_MOUSE=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_CIRRUS=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_VESA=y
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_XSERVER_XORG_SERVER=y
BR2_PACKAGE_XTERM=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
BR2_USE_WCHAR=y
So können Sie diese Optionen zu Ihrer bestehenden .config
hinzufügen :Ist es möglich, Konfigurationsfragmente mit der .config von Buildroot zu verwenden? | Stapelüberlauf
Wie ich die Optionen herausgefunden habe:make menuconfig
, suchen Sie Optionsnamen mit /
, dann rückwärts arbeiten dependes
ab von xeyes
.
Leider müssen Sie immer noch wissen, was Sie tun, hauptsächlich wegen Situationen, in denen zwei verschiedene Pakete eine Schnittstelle implementieren (z. B. X.Org Modular vs. KDrive, die beide einen X11-Server implementieren) und keines standardmäßig ausgewählt ist.
Dieser Artikel hat sehr geholfen:Building a tiny X.Org Linux System using Buildroot | agentoss.wordpress.com
Dann nur das Übliche:
make BR2_JLEVEL=$(nproc)
qemu-system-x86_64
-enable-kvm
-M pc
-m 512
-kernel output/images/bzImage
-drive file=output/images/rootfs.ext2,if=virtio,format=raw
-append root=/dev/vda
-net nic,model=virtio
-net user
Und von innerhalb von QEMU:
root
startx
Bildgröße:28 MB.
Ergebnis
Ein archaisches X11-System!
Und es verhält sich genauso wie in diesem Video:https://upload.wikimedia.org/wikipedia/commons/transcoded/5/52/TWM_without_configuration.ogv/TWM_without_configuration.ogv.480p.webm
Insbesondere hat dieser archaische Fenstermanager keinen X-Schließen-Button in Menüleisten:Sie mussten:
- klicken Sie auf den Desktop
- Wählen Sie „Töten“ aus einem Menü
- Wählen Sie das Fenster aus, das Sie beenden möchten
startx
übergibt dann /etc/X11/xinit/xinitrc
zu xinit
, die es nach dem Start der GUI aufruft. Der Standard xinitrc
enthält:
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login
was unseren Fenstermanager twm
startet (versuchen Sie, es für einen der anderen Manager zu ändern, für die Buildroot Pakete hat) und die Programme, die wir auf dem Bildschirm sehen. TODO was ist das exec xterm
Teil? Warum die exec
?
x11vnc
Wenn Sie vom Emulator zu einem echten Gerät wechseln, x11vnc
erspart Ihnen den Kauf eines Displays:Es öffnet den Bildschirm als Fenster in Ihrem Host und kann sogar Mausklicks an das Gerät senden.
Aktivieren Sie x11vnc
Paket auf Buildroot und neu erstellen.
Um zuerst auf QEMU zu testen, verwenden Sie die Optionen (siehe auch SSH vom Host zum Gast mit QEMU? | Unix &Linux Stack Exchange ):
-net nic,model=virtio
-net user,hostfwd=tcp::5901-:5900
dann auf Gast startx
, und führen Sie Folgendes aus:
x11vnc
Und zurück auf Host:
sudo apt-get install vinagre
vinagre localhost::5901
Ergebnis:
- links QEMU mit X11, x11vnc und glmark2
- rechts, Vinagre auf Wirt, zeigt genau dasselbe
- Ich kann auf beide klicken und mit ihnen interagieren, und die anderen werden sofort aktualisiert
Display-Manager (fehlgeschlagener Versuch)
Wenn Sie das Terminal vollständig vergessen möchten, aktivieren Sie auch:
- Zielpakete
- Grafikbibliotheken und Anwendungen
X.Org X Window System
:beide klickeny
und dannenter
reingehenX11R7 Applications
xconsole
(ausgeführt vonxdm
standardmäßig)xdm
- Grafikbibliotheken und Anwendungen
Wenn Sie jetzt QEMU starten, wird Ihnen ein grafischer Anmeldebildschirm wie bei „modernen“ Distributionen präsentiert:
TODO:Anmeldung nicht möglich. Benutzername root
/ leeres Passwort funktionierte für mich bei einem anderen Test mit ALLEN installierten X11-Paketen. xdm
legt Protokolle unter /var/log/xdm.log
ab , und Sie können eine TTY-Shell erhalten, um sie zu inspizieren:How can I ctrl-alt-f# to get to a TTY in a QEMU session? | Fragen Sie Ubuntu
Die Aufrufkette, die den Display-Manager startet, lautet:
/init
(bereitgestellt von BusyBox)/etc/inittab
Zeile::sysinit:/etc/init.d/rcS
/etc/init.d/rcS
/etc/init.d/S99xdm
/usr/bin/xdm