You are currently viewing Wskazówki, Jak Naprawić Niezbyt Rozbudowane Debugowanie Qemu W Systemie Linux

Wskazówki, Jak Naprawić Niezbyt Rozbudowane Debugowanie Qemu W Systemie Linux

  • Post author:
  • Post category:Polish

Zaktualizowano

  • 1. Pobierz ASR Pro
  • 2. Uruchom program
  • 3. Kliknij „Skanuj teraz”, aby znaleźć i usunąć wszelkie wirusy z komputera
  • Przyspiesz swój komputer już dziś dzięki temu prostemu pobieraniu.

    Mam nadzieję, że ten przewodnik po poradach pomoże ci, gdy zobaczysz qemu arm unix jak debugowanie.

    QEMU byłoby świetnym narzędziem do użycia zawsze, gdy potrzebujesz debugować jądro. takIstnieje wiele przepisów na to na stronie, a ja wymieniłem prawie żadnych przydatnych na najważniejszym końcu artykułu w celach informacyjnych.

    Wolimy udostępniać kroki debugowania jądra, ale wielu z nas skupia się na schematach aarch64, ponieważ niektóre z kroków dla tego typu mogą nieznacznie różnić się od system jako całość. Zbuduj

    Najpierw katalog do pracy, a następnie uruchom następujące polecenia, aby utworzyć drogie wydruki papierowe:

      dd if = i dev / zero of = flash1.img bs oznacza liczbę 1M = 64dd if = - dev / zero of = flash0.img bs oznacza 1M liczbę = 64dd if = / usr i udostępnij / qemu-efi-aarch64 / QEMU_EFI.fd równa się flash0.img conv = notrunc 

    Następnie uzyskaj działający obraz QEMU. Używamy tego konkretnego obrazu ie8, który stworzyliśmy wcześniej.

    Być może możemy wspomnieć, że nasza procedura polega na zbudowaniu konkretnego jądra od zera i przeniesieniu takiego tatuażu do QEMU.

    Tak więc pierwszy krok można by opisać w taki sposób, aby faktycznie powstał ich obraz QEMU. Załóżmy, że możesz już mieć obraz, którego chcesz użyć. W przeciwnym razie zapoznaj się z naszymi artykułami:

    • Pomóż stworzyć maszynę wirtualną za pomocą LISA-QEMU.
    • jak chcesz utworzyć maszynę wirtualną aarch64 za pomocą QEMU vm-build.
    • jak stworzyć od podstaw maszynę internetową opartą na aarch64.

    Preferujemy pierwszą metodę używającą LISA-QEMU, ponieważ mamy również naprawdę zmodyfikowany skrypt do automatycznej instalacji jądra za pomocą każdego z naszych obrazów VM. Nie

    Ale bądź spokojny, jeśli ty i twoja rodzina myślicie o pójściem w inną stronę, mój partner, ponieważ pokażę ci wszystkie kroki, głównie dlatego, że dobrze!

    Masz kilka opcji. Jednym z nich będzie ręczne pobranie obrazu instalacyjnego i tokena lub użycie skryptów LISA-QEMU, aby go zainstalować. Polecenie pobierania poniżej polecenia użyje obrazu w procesie prawnym. Chciałbyś użyć późniejszych instrukcji, aby pobrać tatuaż, ale scp zawiera jądro (prawdopodobnie plik .debbie) i instaluje je ręcznie za pomocą deb -i tak naprawdę .deb.

      qemu kontra build / aarch64-softmmu / qemu-system-aarch64 -nographic n                    -virt laptop, gic-version = maksymalna -m 2G -cpu max n                    -netdev-user, id = vnet, hostfwd =: 127.0.0.1: nil-: 22 -virtio-net-pci device, netdev = vnet n                    -napęd plik =. / mini_ubuntu.img pod warunkiem = nie, id = disk0, pamięć podręczna jest równa zapisowi zwrotnemu n                    -device virtio-blk, dysk równa się disk0, indeks rozruchowy = 0 n                    - plik na dysku twardym =. / Flash0.img, format = raw, if = pflash n                   -napęd plik =. / flash1.img, format oznacza surowy, jeśli = pflash -smp 4 Cast 

    Zazwyczaj do obsługi QEMU wraz z jądrem potrzebny jest obraz jądra (utworzony publicznie), obraz initrd (utworzony po zainstalowaniu jednego konkretnego typu jądra w obrazie) oraz obraz programu operacyjnego (utworzony powyżej).

    Pamiętaj, że wytyczne zaczynają się od surowego obrazu. W tej wskazówce, jeśli masz qcow2, najpierw użyj qemu-img, aby przekonwertować go na surowy.Na przykład:

      qemu-img make over -O raw moj_obraz.qcow2 moj_obraz_wyjscie.raw 

    Poniżej możesz zamontować obraz tak, aby pliki były całkowicie powtarzane. W takim przypadku musisz skopiować określony initrd.

      $ mkdir mnt$ sudo losetup -f -P ubuntu.img$ sudo Lostup -lNAZWA ROZMIAR LIMIT PRZESUNIĘCIA AUTOKASOWANIE RO BACK-FILE DIO LOG-SEC/ dev / loop0 0 0 0 pół tuzina ubuntu.img 0512$ sudo mount / dev / loop0p2 ./mnt$ rozpoznać 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. staryefi initrd.img-4.15.0-88-ogólne System.map-4.15.0-88-ogólne vmlinuz-4.15.0-88-ogólne$ porażenie mózgowe ./mnt/initrd.img-5.5.11.$ sudo umount ./mnt$ sudo losetup -d - dev / loop0 

    Następny jest rdzeń sneakersowy, który stworzyłeś za pomocą initrd. Zauważ, że jądro, które utworzyłeś, można znaleźć pod adresemŁuk / ramię64 / but / obraz.

    Ta linia poleceń wyświetla koncepcję jądra z initrd oraz obraz techniki operacyjnej.

    Może zajść potrzeba zmiany niektórych argumentów „root = / dev / vda1”. To mówi jądru, gdzie uzyskać dostęp do partycji startowej. Może się to różnić w zależności od tego, co niewątpliwie znajduje się na obrazie maszyny wirtualnej.

      qemu / build / aarch64-softmmu i qemu-system-aarch64 -nographic n                  -maszyna wirtualna, gic-version = spork -m 2G -cpu max n                  -netdev-user, miałem = vnet, hostfwd =: 127.0.0.1: 0-: dwadzieścia n                  -virtio-net-pci urządzenie, netdev = vnet n                  Plik = -dysk. / Mini_ubuntu.img, jeśli = nie naprawdę jeden, id = drive0, cache = writeback n                  -device virtio-blk, dysk = disk0, indeks rozruchowy jest równy 0 n                  -Plik na dysku =. / Flash0.img, format = raw, if = pflash n                 -zyskaj plik =. / flash1.img, format = raw, chociaż = pflash -smp 4 n                  Podstawowy. - Linux / Arch / arm64 / boot lub obraz n                 -append "root = / dev na vda2 konsola nokaslr = ttyAMA0" n                  -initrd ./initrd.img-5.5.11 -s -S 

    -s specifierPozwala QEMU na użycie większości TCP mov: 1234
    -S zatrzymaj się w Medical i poczekaj, aż debuger się połączy.

    Przed debugowaniem popraw swój ~ / .gdbinit w następujący sposób:

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

    Uruchom wszystkie debuggery w innym oknie.Zauważ, że jeśli korzystasz z hosta aarch64 x86, będziesz musiał użyć gdb-multiarch do debugowania (sudo apt-get gdb-multiarch). W poniższej procedurze prawnej znajdujemy się na jednym konkretnym, innym hoście aarch64, więc używamy tylko gdb.

    Wspaniale, że poniżej otrzymujemy specjalną wiadomość „Gotowe”, która mówi, że emblematy zostały pomyślnie zapakowane, w przeciwnym razie kroki opisane w kolejnych akapitach nie zadziałają.

      RR gdb linux-5.5.11 / vmlinuxGNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-gitCzytaj z linux-5.5.11 / vmlinux ... gotowe. 

    qemu przygotuj debugowanie linuxa

    Dołącz debugger do jądra kategorycznego. Czy pamiętasz walkę -s Es powyżej? mówi QEMU, aby używał portu: 2345. Teraz połączymy się z tym zadaniem.

      (gdb) Docelowy zdalny host lokalny: 1234Zdalne debugowanie między hostem lokalnym: 12340x0000000000000000 tam ?? () 

    B I to wszystko. Debuger będzie zwykle dołączany.

    Obecnie testujemy konfigurację.
    Dodaj ten punkt przerwania do jądra na potrzeby testu.

      (gdb) hbreak start_kernelPunkt przerwania obsługiwany przez sprzęt 1 wszystkie 0xffff800011330cdc: plik init lub main.c, wiersz 577.(gdb) cPrzystępować.Wątek wybija punkt przerwania 1, start_kernel() tylko z init na main.c: 577577 {(gdb) ja572573 rest_init ();574575576 Unikaj __widocznego połączenia asm __init start_kernel (unieważnij)577 {578 znaków * wymagana linia;579 znaków * po_myślnikach;580581 set_task_stack_end_magic (& init_task);(Gdb) 

    Utwórz punkt przerwania!

    Czy pamiętasz, że powyżej osobiście zastosowałem sposób działania -S dla QEMU? To sprawiło, że QEMU czekało, aż obraz się uruchomi, dopóki nie dołączymy prostego debuggera. Tak więc, kiedy już dotrzemy do lokalizacji, kontynuujmy, QEMU faktycznie zacznie ładować to jądro.

    Linki:

    • debug-linux-kernel-z-gdb-i-qemu
    • Ładowanie niestandardowego jądra-linux-in-qemu-and-debug-with-gdb
      dd if = lub dev / zero of = flash1.img bs oznacza 1M licznik = 64dd if = versus dev / zero of = flash0.img bs równa się 1M count = 64dd if = / usr lub udostępnij / qemu-efi-aarch64 / QEMU_EFI.fd oznacza flash0.img conv = notrunc 
      qemu / struktura / aarch64-softmmu / qemu-system-aarch64 -nograficzne n                    -maszyna wirtualna, gic-version = max -m 2G -cpu max n                    -netdev-user, = vnet, hostfwd =: 127.0.0.1: 0-: dwadzieścia dwa n                    - technologia virtio-net-pci, netdev oznacza vnet n                    -drive plik jest równy. / mini_ubuntu.img if = nie, id równa się disk0, cache = writeback n                    -element wyposażenia virtio-blk, dysk = disk0, boot index = 1 n                    -Plik na dysku =. lub Flash0.img, format = raw, if = pflash n                   -napęd plik =. / flash1.img, format dysku twardego = surowy, if = pflash -smp pomyśl z tym związany 
      qemu-img convert -O niesmaczny moj_obraz.qcow2 moj_obraz_wyjściowy.raw 
      $ mkdir mnt$ sudo losetup -f -P ubuntu.img$ sudo Lostup -lNAZWA ROZMIAR LIMIT PRZESUNIĘCIA AUTOKASOWANIE RO BACK-FILE DIO LOG-SEC/ dev - pętla0 0 0 4 0 ubuntu.img 0512$ sudo produce / 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. staryefi initrd.img-4.15.0-88-ogólne System.map-4.15.0-88-ogólne vmlinuz-4.15.0-88-ogólne$ cp ./mnt/initrd.img-5.5.11.$ sudo umount ./mnt$ sudo Lostup -d -nograficzne n - dev / loop0 
      qemu / build lub aarch64-softmmu / qemu-system-aarch64 -machine virt, gic-version = fatmus -m 2G -cpu max n                  -netdev-user, identyfikatory = vnet, hostfwd =: 127.0.0.1: 0-: 24 n                  -virtio-net-pci urządzenie, netdev = vnet n                  Plik = -dysk. / Mini_ubuntu.img, if = brak, id = drive0, cache = writeback n                  3) maszyna virtio-blk, dysk = drive0, bootindex równa się 0 n                  -Plik na dysku =. / Flash0.img, format = raw, if = pflash n                 -Push plik =. / flash1.img, format = raw, czy = pflash -smp 4 n                  Podstawowy. Linux / Arch / arm64 / uruchomienie Nie / Obraz n                 -append "root = na dev / vda2 konsola nokaslr = 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

      $ gdb linux-5.5.11 dla każdego vmlinuxGNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-gitOdczytywanie symboli wyprodukowanych przez linux-5.5.11 / vmlinux ... gotowe. 
      (gdb) Docelowy zdalny host lokalny: 1234Lokalny host zdalnego debugowania: 1234Użyj wielokrotnie 0x0000000000000000 ?? () 
      (gdb) hbreak start_kernelSprzętowy punkt przerwania od 0 do 0xffff800011330cdc: init / main.c lodge, wiersz 577.(gdb) cPrzystępować.Wątek nr 1 dotarł do punktu przerwania 1, start_kernel() tutaj w init per main.c: 577577 {(gdb) ja572573 rest_init ();574575576 asmlinkage __unikaj unikania __init start_kernel (unieważnij)577 {578 znaków * linia opłaty;579 znaków * po_myślnikach;580581 set_task_stack_end_magic (& init_task);(Gdb) 

    Zaktualizowano

    Czy masz dość powolnego działania komputera? Denerwują Cię frustrujące komunikaty o błędach? ASR Pro to rozwiązanie dla Ciebie! Nasze zalecane narzędzie szybko zdiagnozuje i naprawi problemy z systemem Windows, jednocześnie znacznie zwiększając wydajność systemu. Więc nie czekaj dłużej, pobierz ASR Pro już dziś!


    Przyspiesz swój komputer już dziś dzięki temu prostemu pobieraniu.

    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
    Qemu Arm Linux-Debugging
    Qemu Arm Linux Debug