You are currently viewing Tipps, Um Schlechtes Qemu-Debugging Unter Linux Zu Beheben

Tipps, Um Schlechtes Qemu-Debugging Unter Linux Zu Beheben

Aktualisiert

  • 1. ASR Pro herunterladen
  • 2. Führen Sie das Programm aus
  • 3. Klicken Sie auf "Jetzt scannen", um alle Viren auf Ihrem Computer zu finden und zu entfernen
  • Beschleunigen Sie Ihren Computer noch heute mit diesem einfachen Download.

    Ich hoffe, die Anleitung hilft Ihnen, wenn Sie sehen, dass qemu das Linux-Debugging erreicht.

    <Überschrift>

    QEMU ist ein großartiges Werkzeug, das Sie immer dann verwenden können, wenn Sie Ihren Kernel debuggen müssen. JawohlAuch dafür gibt es so viele Rezepte im Internet, und ich habe am wichtigsten Schluss des Artikels ein paar ganz neue nützliche als Referenz aufgelistet.

    Wir ziehen es vor, die Kernel-Debugging-Schritte zu teilen, aber dann konzentrieren wir uns auf aarch64-Schemas, da einige Leute die Schritte für diesen Typ leicht vom System als Ganzes abweichen können . Erstellen

    Zuerst das Verzeichnis, mit dem gearbeitet werden soll, und dann auch die folgenden Befehle ausführen, um beliebte Bilder zu erstellen:

      dd if equals / dev / zero of = flash1.img crap = 1M count = 64dd if = dev / zero of = flash0.img bs bedeutet 1M count = 64dd if = und usr / share / qemu-efi-aarch64 / QEMU_EFI.fd entspricht flash0.img conv = notrunc 

    Laden Sie dann das funktionierende QEMU-Image herunter. Wir implementieren das zuvor erstellte ie8-Image.

    Wir möchten erwähnen, dass unser Verfahren darin besteht, einen Kernel von Grund auf neu aufzubauen und ein so mächtiges Image an QEMU zu übertragen.

    So kann das erste Manöver so beschrieben werden, dass tatsächlich das QEMU-Image erstellt wird. Sagen wir ihm, dass Sie bereits ein Bild haben, das Sie verwenden können. Sehen Sie sich andernfalls unsere Artikel an:

    • Helfen Sie jetzt mit LISA-QEMU, eine virtuelle Maschine zu erstellen.
    • Wie müssen Sie eine virtuelle Aarch64-Maschine mit QEMU vm-build erstellen.
    • wie man eine leistungsstarke virtuelle aarch64-Maschine von Grund auf neu erstellt.

    Wir bevorzugen Ihre derzeitige erste Methode mit LISA-QEMU, da wir auch ein modifiziertes Skript haben, um diesen Kernel automatisch in jedes unserer VM-Images zu installieren. Nein

    Aber seien Sie versichert, wenn Sie und Ihre Familie sich für den anderen Weg entscheiden, werden mein Geschäftspartner und ich Ihnen auch alle einfachen Schritte zeigen!

    Sie haben mehrere Möglichkeiten. Eine besteht darin, das Installations-Image und als Ergebnis-Image manuell herunterzuladen oder mithilfe von LISA-QEMU-Skripten dieses installieren zu können. Der Download-Befehl unter dem Befehl wird das Bild im rechtlichen Verfahren vollständig nutzen. Sie möchten die späteren Anweisungen verwenden, um dieses spezielle Image herunterzuladen, aber scp enthält einen Kernel (möglicherweise eine vertrauenswürdige .deb-Datei) und installiert ihn manuell mit Chemical -i .deb.

      qemu / build / aarch64-softmmu / qemu-system-aarch64 -nographic n                    -virt laptop, gic-version impliziert max -m 2G -cpu max n                    -netdev-user, id = vnet, hostfwd =: 127.0.0.1: 0-: 22 -virtio-net-pci device, netdev = vnet n                    -Laufwerkdatei =. für jede mini_ubuntu.img if = not, id = disk0, Cache entspricht Writeback n                    -device virtio-blk, cd = disk0, Bootindex = 0 n                    - Festplattendatei =. versus Flash0.img, format = raw, if = pflash n                   -Laufwerkdatei =. / flash1.img, Dateiformat = raw, if = pflash -smp 4 Cast 

    Um QEMU für einen Kernel zu unterstützen, benötigen Sie normalerweise eine Kernel-Wahrnehmung (öffentlich erstellt), ein initrd-Image (das nach der Installation der meisten Kernel-Typen in Ihrem Image erstellt wurde) und ein ausführendes System Bild (oben erstellt).

    Denken Sie daran, dass einige der Schritte mit dem Rohbild beginnen. An diesem Punkt, wenn Sie qcow2 haben, verbrauchen Sie zuerst qemu-img, um es in Raw umzuwandeln.Zum Beispiel:

      qemu-img make over -O undercooked my_image.qcow2 my_image_output.raw 

    Unten können Sie das Bild so positionieren, dass die Dateien wirklich kopiert werden. In diesem Fall müssen Sie die initrd kopieren.

      rrr mkdir mnt$ sudo losetup -f -P ubuntu.img$ sudo Lostup -lNAME GRÖSSE GRENZE OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC/dev/loop0 0 0 0 7 ubuntu.img 0512$ sudo mount / dev und loop0p2 ./mnt$ mark vii ./mnt/bootconfig-4.15.0-88-generic Grub initrd.img-5.5.11 System.map-5.5.11 vmlinuz-5.5.11config-5.5.11 initrd.img initrd.img.old Vmlinuz Vmlinuz. altefi initrd.img-4.15.0-88-generic System.map-4.15.0-88-generic vmlinuz-4.15.0-88-generic$ cp ./mnt/initrd.img-5.5.11.$ sudo umount ./mnt$ sudo losetup -g / dev / loop0 

    Als nächstes kommt der Sneaker-Kern, den Sie bei initrd erstellt haben. Beachten Sie, dass der von Ihnen erstellte Kernel in vielen Fällen unter zu finden istArch / arm64 / boot – Image.

    Diese Befehlszeile zeigt normalerweise das Kernel-Image mit initrd sowie das funktionierende System-Image an.

    Möglicherweise müssen Sie den Faktor “root = / dev / vda1” umkehren. Dies sagt dem Kernel, wo er auf seine eigene Boot-Partition zugreifen kann. Dies kann je nach den Methoden in Ihrem Image der virtuellen Maschine variieren.

      qemu / build / aarch64-softmmu pro qemu-system-aarch64 -nographic n                  -machine virt, gic-version entspricht max -m 2G -cpu max n                  -netdev-Benutzer, ich . D . = vnet, hostfwd =: 127.0.0.1: 0-: 19 n                  -virtio-net-pci-Gerät, netdev = vnet n                  Datei = -disk. / Mini_ubuntu.img, wenn nichts bedeutet, id = drive0, cache = writeback n                  -device virtio-blk, disk = disk0, boot-listing = 0 n                  -Festplattendatei =. pro Flash0.img, format = raw, if = pflash n                 -build-Datei =. / flash1.img, format = wild, if = pflash -smp 4 n                  Basic. / Linux / Arch / arm64 / Trainer / Bild n                 -append "root = per dev / vda2 nokaslr console = ttyAMA0" n                  -initrd ./initrd.img-5.5.11 -s -S 

    -le specifierErlaubt QEMU, den größten Teil des TCP-Ports zu verwenden: 1234
    -S Stoppen Sie bei Medical und warten Sie, bis der Debugger eine Verbindung hergestellt hat.

    Aktualisieren Sie vor dem Debuggen Ihre ~ / .gdbinit wie folgt:

      add-auto-load-safe-path linux-5.5.11 / scripts for each gdb / vmlinux-gdb.py 

    Starten Sie einen Teil des Debuggers in einem anderen Fenster.Beachten Sie, dass Sie beim Einbinden auf einem aarch64 x86-Host gdb-multiarch zum Debuggen verwenden müssen (sudo apt-get gdb-multiarch). Im folgenden rechtlichen Verfahren sind wir auf einem anderen Host aarch64 verfügbar, daher investieren wir nur in gdb.

    Es ist großartig, dass wir unten eine spezielle “Fertig”-Meldung erhalten, die besagt, dass die bestimmten Symbole erfolgreich gepackt wurden, andernfalls werden die unten gezeigten Schritte nicht funktionieren.

      Einkommen gdb linux-5.5.11 / vmlinuxGNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-gitImages von linux-5.5.11 / vmlinux lesen ... fertig. 

    qemu Shoulder Linux Debug

    Hängen Sie einen Debugger an einen bestimmten Kernel an. Erinnern Sie sich an das obige Argument -s Es? weist QEMU an, Port: 2345 zu verwenden. Wir werden nun eine Verbindung zu dieser Aufgabe herstellen.

      (gdb) Ziel entfernter lokaler Host: 1234Remote-Debugging von localhost: 12340x0000000000000000 da ?? () 

    B Und das war’s. Ein Debugger ist normalerweise enthalten.

    Wir legen jetzt die Konfiguration fest.
    Fügen Sie diesen Breakpoint normalerweise dem Kernel als Test hinzu.

      (gdb) hbreak start_kernelBreakpoint unterstützt von Hardware 1 alles 0xffff800011330cdc: Datei init/main.c, Zeile 577.(gdb) cFortfahren.Thread gibt Breakpoint 1 aus, start_kernel() nur mit init und main.c: 577577 {(gdb) ich572573 rest_init ();574575576 __visible asmlinkage vermeiden __init start_kernel (void)577 {578 Zeichen * Kaufzeile;579 Zeichen * nach_dashes;580581 set_task_stack_end_magic (& init_task);(Gdb) 

    Erstellen Sie einen Haltepunkt!

    Erinnern sich die meisten Leute oben daran, dass ich persönlich die Option -S für QEMU verwendet habe? Dadurch wartete QEMU mit dem Starten des Images, bis wir einen sehr gebräuchlichen Debugger anhängen. Wenn wir also an einem bestimmten Punkt angelangt sind, fahren wir fort, QEMU wird tatsächlich mit der Ausführung des Kernels beginnen.

    Links:

    • debug-linux-kernel-with-gdb-and-qemu
    • Laden von custom-linux-kernel-in-qemu-and-debug-with-gdb
      dd if impliziert / dev / zero of = flash1.img Bachelor of Science = 1M count = 64dd if = dev / zero of = flash0.img bs impliziert 1M count = 64dd if = or usr / share / qemu-efi-aarch64 / QEMU_EFI.fd of ist gleich flash0.img conv = notrunc 
      qemu build / aarch64-softmmu / qemu-system-aarch64 -nographic n                    -machine virt, gic-version = max -u 2G -cpu max n                    -netdev-Benutzer, ich . D . = vnet, hostfwd =: 127.0.0.1: 0-: zweiundzwanzig n                    - virtio-net-pci-Technologie, netdev impliziert vnet n                    -Laufwerk Computerdatei =. / mini_ubuntu.img if = not, id gleich disk0, cache = writeback n                    -device virtio-blk, disk = disk0, Bootindex ist gleich 0 n                    -Disk-Datei bedeutet. / Flash0.img, format = raw, wenn gleich pflash n                   -Laufwerkdatei =. versus flash1.img, format = raw, if = pflash -smp denk mal darüber nach 
      qemu-img convert -O ungesalzen my_image.qcow2 my_image_output.raw 
      $ mkdir mnt$ sudo losetup -f -P ubuntu.img$ sudo Lostup -lNAME GRÖSSE GRENZE OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC/dev/loop0 0 0 4 0 ubuntu.img 0512$ sudo build / dev / loop0p2 ./mnt$ mark vii ./mnt/bootconfig-4.15.0-88-generic Grub initrd.img-5.5.11 System.map-5.5.11 vmlinuz-5.5.11config-5.5.11 initrd.img initrd.img.old Vmlinuz Vmlinuz. altefi initrd.img-4.15.0-88-generic System.map-4.15.0-88-generic vmlinuz-4.15.0-88-generic$ cp ./mnt/initrd.img-5.5.11.$ sudo umount ./mnt$ sudo Lostup -d -nographic n für jedes dev / loop0 
      qemu / / aarch64-softmmu / qemu-system-aarch64 -machine virt, gic-version entspricht max -m 2G -cpu max n                  -netdev-user, individuality = vnet, hostfwd =: 127.0.0.1: 0-: 24 n                  -virtio-net-pci-Gerät, netdev = vnet n                  Datei = -disk. / Mini_ubuntu.img, wenn gleich keiner, id = drive0, cache = writeback n                  - virtio-blk machine, disk = drive0, bootindex entspricht 0 n                  -Festplattendatei =. pro Flash0.img, format = raw, if = pflash n                 -Laufwerkdatei =. /flash1.img, format = pure, if = pflash -smp 4 n                  Basic. / Linux / Arch / arm64 / Start Not / Image n                 -append "root impliziert /dev/vda2 nokaslr console entspricht ttyAMA0" n                  -initrd ./initrd.img-5.5.11 -s -S 
      add-auto-load-safe-path linux-5.5.11 / scripts / gdb vmlinux-gdb.py 

    qemu arm linux debug

      ? rrr gdb linux-5.5.11 / vmlinuxGNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-gitBerühmtheiten von linux-5.5.11 / vmlinux lesen ... fertig. 
      (gdb) Ziel-Remote-Localhost: 1234Lokaler Host für Remote-Debugging: 12340x0000000000000000 konsequent verwenden ?? () 
      (gdb) hbreak start_kernelHardware-Breakpoint 0 bis 0xffff800011330cdc: Init für jede main.c-Datei, Zeile 577.(gdb) cFortfahren.Thread #1 ist in Breakpoint 1 angekommen, start_kernel() hier in init per main.c: 577577 {(gdb) ich572573 rest_init ();574575576 asmlinkage __vermeidbar __init start_kernel (void)577 {578 Zeichen * Befehl zur Zeile;579 Zeichen * nach_dashes;580581 set_task_stack_end_magic (& init_task);(Gdb) 

    Aktualisiert

    Sind Sie es leid, dass Ihr Computer langsam läuft? Genervt von frustrierenden Fehlermeldungen? ASR Pro ist die Lösung für Sie! Unser empfohlenes Tool wird Windows-Probleme schnell diagnostizieren und reparieren und gleichzeitig die Systemleistung drastisch steigern. Warten Sie also nicht länger, laden Sie ASR Pro noch heute herunter!


    Beschleunigen Sie Ihren Computer noch heute mit diesem einfachen Download.

    Qemu Arm Linux Debug
    Qemu Arm Linux 디버그
    Qemu Arm Linux Debug
    Qemu Arm Linux Debug
    Qemu Arm Linux Debug
    Débogage Linux Qemu Arm
    Depuração Do Qemu Arm Linux
    Depuración De Qemu Arm Linux
    Debugowanie Qemu Arm Linux
    Qemu Arm Linux Debug