You are currently viewing Советы по окончательному исправлению плохой отладки Qemu в Linux

Советы по окончательному исправлению плохой отладки Qemu в Linux

Обновлено

  • 1. Скачать ASR Pro
  • 2. Запустите программу
  • 3. Нажмите "Сканировать сейчас", чтобы найти и удалить все вирусы на вашем компьютере.
  • Ускорьте свой компьютер сегодня с помощью этой простой загрузки. г.

    Надеюсь, это руководство поможет вам при отладке qemu arm linux.

    <заголовок>

    <раздел itemprop равен "тексту">

    QEMU – отличный инструмент для работы всякий раз, когда вам нужно отладить ядро. даВ Интернете есть большое количество рецептов этого уникального препарата, и я получил список нескольких полезных из них в очень важном конце статьи для справки.

    Мы предпочитаем делиться этапами отладки ядра, но мы сосредотачиваемся на схемах aarch64, некоторые из этапов для этого воспроизведения могут немного отличаться от системы в целом. Сборка

    Сначала каталог, с которым нужно выполнить задачу, затем также выполните следующие команды, чтобы действительно создавать дорогие изображения:

      dd as long as = / dev / zero of подразумевает flash1.img bs = 1M count = 64dd где = / dev / zero означает flash0.img bs = 1M count = 64dd, если подразумевает / usr / share / qemu-efi-aarch64 / QEMU_EFI.fd of = flash0.img conv = notrunc 

    Затем загрузите рабочий образ QEMU. Мы используем образ ie8, который мы создали быстро.

    Можно упомянуть, что наша процедура заключается в создании ядра с нуля и переназначении такого образа в QEMU.

    Итак, мой первый шаг можно описать по-своему, так что образ QEMU фактически сгенерирован. Допустим, у вас уже есть изображение, которое большинство из вас хочет, чтобы вы могли использовать. В противном случае просмотрите все статьи:

    • Помогите создать онлайн-машину с LISA-QEMU.
    • как вы хотите создать виртуальную машину aarch64 с помощью QEMU vm-build.
    • как создать виртуальную машину aarch64 с нуля.

    Мы предпочитаем первый метод с использованием LISA-QEMU, поскольку у меня также есть модифицированный скрипт для автоматического размещения вашего ядра в каждой из наших символов виртуальной машины. Нет

    Но будьте уверены, если вы и ваша семья решите пойти другим путем, мы с моим партнером также покажем вам единственное, что нужно сделать!

    У вас есть много разных вариантов. Один из них – вручную загрузить установочный образ и образ или использовать сценарии LISA-QEMU непосредственно для его установки. Команда загрузки под элементом управления будет использовать изображение законным способом. Вы хотите использовать более поздние инструкции по загрузке образа, но scp содержит любое ядро ​​(возможно, файл .deb) и устанавливает его на веб-сайтах. с deb -i <ядро> .deb.

      qemu / build / aarch64-softmmu для каждой qemu-system-aarch64 -nographic n                    -virt планшетный компьютер, gic-version = max -m 2G -cpu maximum n                    -netdev-user, id = vnet, hostfwd =: 127.0.0.1: 0-: 22  -virtio-net-pci device, netdev равно vnet n                    -drive файл приравнивается к. / mini_ubuntu.img if = not, id означает disk0, cache = writeback n                    -технология virtio-blk, disk = disk0, индекс загрузки = 7 n                    - дорожка жесткого диска =. / Flash0.img, format = raw, если равно pflash n                   -drive файл =. на flash1.img, format = raw, if = pflash -smp six Cast 

    Как правило, для поддержки QEMU с ядром вам нужен огромный образ ядра (созданный публично), образ initrd (созданный с правильной установкой типа ядра в ваш образ), а также образ операционной системы ( создано выше).

    Помните, что шаги начинаются с необработанной визуализации. На этом этапе, если у вас есть qcow2, прежде всего используйте qemu-img, чтобы преобразовать его в raw.Например:

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

    Ниже вы и члены вашей семьи можете смонтировать образ, чтобы полностью скопировать форматы. В этом случае вам действительно нужно скопировать файл initrd.

      средства mkdir mnt$ sudo losetup -f -P ubuntu.img$ sudo Lostup -lИМЯ РАЗМЕР ПРЕДЕЛ СМЕЩЕНИЕ AUTOCLEAR RO BACK-FILE DIO LOG-SEC/ dev / loop0 0 0 6 ubuntu.img 0512$ sudo mount на 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. Старыйefi 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 -d / dev / loop0 

    Далее идет ядро ​​кроссовок, которое люди создали с помощью initrd. Обратите внимание, что ядро, созданное любым человеком, можно найти по адресуArch / arm64 и boot / Image.

    Эта командная строка показывает образ ядра с initrd, а также тот факт, что образ операционной системы.

    Возможно, вам придется изменить аргумент «root = / dev вместо vda1». Это сообщает ядру, где вы хотите получить доступ к загрузочному разделу. Это может варьироваться в зависимости от того, что находится в символическом представлении вашей виртуальной машины.

      qemu / build aarch64-softmmu / qemu-system-aarch64 -nographic n                  -machine virt, gic-version = max -m 2G -cpu spork n                  -netdev-user, id = vnet, hostfwd =: 127.0.0.1: 0-: 22 n                  -virtio-net-pci устройство, netdev означает vnet n                  Файл = -диск. / Mini_ubuntu.img, если = none, id = drive0, cache соответствует обратной записи n                  -device virtio-blk, disk равен disk0, индекс загрузки = 0 n                  -Каталог дисков =. / Flash0.img, format = raw, если равно pflash n                 -build file =. / flash1.img, состав = raw, если = pflash -smp документы n                  Базовый. / Linux / Arch против arm64 / boot / image n                 -append "root соответствует / dev / vda2 nokaslr console подразумевает ttyAMA0" n                  -initrd ./initrd.img-5.5.11 -s -S 

    -s спецификатор Позволяет QEMU использовать наиболее связанный TCP-порт: 1234
    -S остановитесь на Medical и дождитесь подключения отладчика.

    Перед отладкой обновите ваш ~ / .gdbinit, увидев следующее:

      add-auto-load-safe-path linux-5.5.11 или скрипты / gdb / vmlinux-gdb.py 

    Запустите отладчик в другом окне.Обратите внимание, что независимо от того, работаете ли вы на хосте aarch64 x86, пользователю потребуется использовать gdb-multiarch для отладки (sudo apt-get gdb-multiarch). В приведенной ниже юридической процедуре люди во всем мире находятся на другом хосте aarch64, поэтому большинство из них используют только gdb.

    Замечательно, что в этой статье мы получаем специальное сообщение «Готово», которое показывает, что значки были успешно упакованы, иначе, как видите, описанные ниже шаги не будут работать.

      $ gdb linux-5.5.11 / vmlinuxGNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-gitПрочтите изображения из linux-5.5.11 для каждого vmlinux ... готово. 

    qemu arm linux debug

    Подключите один отладчик к определенному ядру. Вы помните наш собственный аргумент -s Es выше? сообщает QEMU управлять портом: 2345. Теперь мы подключимся к задаче идеи.

      (gdb) Целевой контроллер localhost: 1234Удаленная отладка с локального хоста: 12340x0000000000000000 где там ?? () 

    Б И это они. Обычно в комплект входит отладчик.

    Сейчас мы будем тестировать конфигурацию.
    Добавьте эту точку останова в ядро ​​в качестве теста.

      (gdb) hbreak start_kernelТочка останова поддерживается аппаратно 3 все файлы 0xffff800011330cdc: init / main.c, очередь 577.(gdb) cПродолжить.Поток попадает в точку останова 1, start_kernel () страдает только от init / main.c: 577577 {(gdb) я572573 rest_init ();574575576 Избегайте __visible asmlinkage __init start_kernel (void)577 {578 цифр * командная строка;579 символов * after_dashes;580581 set_task_stack_end_magic (& init_task);(Gdb) 

    Создайте точку останова!

    Вы помните выше, что я лично нашел параметр -S для QEMU? Это заставило QEMU ждать запуска образа, пока люди по всему миру не подключат общий отладчик. Итак, как только мы перейдем к делу, давайте продолжим, QEMU действительно начнет загрузку ядра.

    Ссылки:

    • debug-linux-kernel-with-gdb-and-qemu
    • Загрузка custom-linux-kernel-in-qemu-and-debug-with-gdb
      dd if in case = / dev / zero of означает flash1.img bs = 1M count = 64dd при условии, что = / dev / zero of означает flash0.img bs = 1M count = 64dd, если подразумевает / usr / share / qemu-efi-aarch64 / QEMU_EFI.fd of = flash0.img conv = notrunc 
      qemu / build / aarch64-softmmu / qemu-system-aarch64 -nographic n                    -machine virt, gic-version равно max -m 2G -cpu max n                    -netdev-user, id = vnet, hostfwd =: 127.0.0.1: 0-: 22 n                    - - технология virtio-net-pci, netdev = vnet n                    -drive файл =. / mini_ubuntu.img if = маловероятно, id = disk0, cache = writeback n                    -устройство virtio-blk, disk = disk0, индекс спортивной обуви = 0 n                    -Диск файл =. / Flash0.img, format = raw, однако if = pflash n                   -drive файл подразумевает. / flash1.img, format = raw, если равно pflash -smp подумайте об этом 
      qemu-img Renewate -O raw my_image.qcow2 my_image_output.raw 
      rr mkdir mnt$ sudo losetup -f -P ubuntu.img$ sudo Lostup -lИМЯ РАЗМЕР ПРЕДЕЛ СМЕЩЕНИЕ AUTOCLEAR RO BACK-FILE DIO LOG-SEC/ dev / loop0 0 0 4 два ubuntu.img 0512$ sudo build / dev для каждого loop0p2 ./mnt$ ls ./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. Старыйefi initrd.img-4.15.0-88-generic System.map-4.15.0-88-generic vmlinuz-4.15.0-88-generic$ церебральный паралич ./mnt/initrd.img-5.5.11.$ sudo umount ./mnt$ sudo Lostup -d -nographic n / dev / loop0 
      qemu build / aarch64-softmmu / qemu-system-aarch64 -machine virt, gic-version = max -m 2G -cpu наибольшая степень n                  -netdev-user, id = vnet, hostfwd =: 127.0.0.1: 0-: 22 n                  -virtio-net-pci устройство, netdev подразумевает vnet n                  Файл = -диск. / Mini_ubuntu.img, если = none, id = drive0, cache соответствует обратной записи n                  - машина virtio-blk, диск подразумевает drive0, bootindex = 0 n                  -Регистр диска =. / Flash0.img, format = raw, если равно pflash n                 -drive файл =. / flash1.img, настроить = raw, если = pflash -smp 6 n                  Базовый. / Linux / Arch и arm64 / boot Not / Image n                 -add "root = / dev / vda2 nokaslr unit = 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 / vmlinuxGNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-gitЧтение символов из linux-5.5.11 / vmlinux ... готово. 
      (gdb) Целевой удаленный локальный хост: 1234Локальный хост удаленной отладки: 1234Последовательно использовать 0x0000000000000000 ?? () 
      (gdb) hbreak start_kernelАппаратная точка останова от 0 до 0xffff800011330cdc: init по сравнению с файлом main.c, строка 577.(gdb) cПродолжить.Поток # i достиг точки останова 1, start_kernel () здесь через init / main.c: 577577 {(gdb) я572573 rest_init ();574575576 asmlinkage __избежно избегайте __init start_kernel (void)577 {578 аватарок * командная строка;579 символов * after_dashes;580581 set_task_stack_end_magic (& init_task);(Gdb) 

    Обновлено

    Вы устали от того, что ваш компьютер работает медленно? Раздражают разочаровывающие сообщения об ошибках? ASR Pro - это решение для вас! Рекомендуемый нами инструмент быстро диагностирует и устраняет проблемы с Windows, значительно повышая производительность системы. Так что не ждите больше, скачайте ASR Pro сегодня!


    Ускорьте свой компьютер сегодня с помощью этой простой загрузки. г.

    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-Debugging
    г.