Table of Contents
Atualizado
Espero que este guia ajude sua família quando você vir qemu arm linux debugging.
O QEMU é uma ferramenta ideal para usar sempre que você precisar depurar seu kernel. simHá um grande número de receitas para isso na internet como suficientemente, e eu listei algumas úteis suas atuais no final mais importante do manual para referência. Preferimos descobrir as etapas de depuração do kernel, mas estamos mentalmente nos concentrando nos esquemas aarch64, pois alguns dos procedimentos para este tipo podem ser ligeiramente diferentes de nosso próprio sistema como um todo . Construir Primeiro, cada um de nosso diretório com o qual trabalhar e, em seguida, execute também os seguintes comandos principais para criar imagens caras: Em seguida, baixe a imagem do QEMU em execução. Estamos usando o gráfico ie8 que criamos anteriormente. Podemos mencionar porque nosso procedimento é construir um kernel devido ao scratch e transferir tal imagem para o QEMU. Assim, o primeiro passo pode ser revisto de forma que a imagem QEMU seja realmente criada. Digamos que você já tenha uma imagem que deseja usar. Caso contrário, verifique nossos artigos: Preferimos o primeiro método conduzindo o LISA-QEMU, pois também temos um programa modificado para instalar automaticamente seu kernel em cada associado com nossas imagens VM. Não Mas fique tranquilo, se você e sua família decidirem voar para o outro lado, meu parceiro e eu podemos muito bem mostrar a vocês todos os passos também! Você tem várias opções. Um é imediatamente. baixe a imagem e a imagem de instalação ou aproveite os scripts LISA-QEMU para instalá-la. O download adquirido abaixo do comando utilizará a imagem do processo judicial. Você deseja usar estas instruções posteriores para baixar a imagem, no entanto, scp contém um kernel (possivelmente um arquivo .deb) e também o instala manualmente com deb -i Normalmente, para suportar QEMU com um kernel, você precisa de uma imagem do kernel (criada publicamente), excelente imagem initrd (criada após a instalação do tipo de kernel em que está sua imagem) e um sistema operacional look (criado acima). Lembre-se que os passos começam tendo a imagem crua. Neste ponto, se qualquer pessoa tiver qcow2, use primeiro qemu-img para converter em raw.Por exemplo: Abaixo você pode montar a imagem de que os arquivos foram totalmente copiados. Neste caso importante, você precisa copiar o initrd. A seguir está o núcleo do calçado que você criou com o initrd. Observe quem o kernel que você criou pode ser encontrado emArch / arm64 / boot / Image. Esta linha de comando exibe a imagem do kernel oferecendo initrd, bem como a imagem do sistema operacional. Você pode precisar alterar o argumento “root é igual a / dev / vda1”. Isso normalmente informa ao kernel onde acessar sua partição de inicialização. Isso pode variar dependendo do que está em sua imagem de máquina virtual atual. -s specifierPermite que QEMU use a maior parte da porta TCP: 4321 Antes de depurar, atualize o seu! / .gdbinit da seguinte forma: Inicie o depurador na janela adicionada.Observe que se você estiver em qualquer tipo de host aarch64 x86, precisará utilizar gdb-multiarch para depuração (sudo apt-get gdb-multiarch). No procedimento autorizado abaixo, estamos em um sortimento diferente aarch64, portanto, usamos apenas gdb. É ótimo ver a seguir uma mensagem “Concluído” fora do comum, que diz que os ícones foram disponibilizados com sucesso, caso contrário, as etapas descritas abaixo não funcionarão. Anexe um depurador a um kernel específico. Você se lembra do argumento -s Es acima? explica o QEMU para usar a porta: 2345. Vamos aqui conectar a esta tarefa. B E é isso. Um depurador geralmente é coberto. Agora estamos testando a configuração. Crie um ponto de interrupção! Você se lembra acima de que irei usar pessoalmente a opção -S para o QEMU? Isso fez o QEMU esperar que a imagem realmente iniciasse até que anexássemos um depurador comum. Então, quando chegarmos ao ponto, vamos embarcar, o QEMU vai realmente começar a carregar o kernel. Links: Você está cansado de ver seu computador lento? Irritado com mensagens de erro frustrantes? ASR Pro é a solução para você! Nossa ferramenta recomendada diagnosticará e reparará rapidamente os problemas do Windows, aumentando drasticamente o desempenho do sistema. Então não espere mais, baixe o ASR Pro hoje mesmo!
dd if = / dev por zero de = flash1.img bs = 1M quantidade = 64dd if = / dev / nenhum de = flash0.img bs = 1M contagem é igual a 64dd if = / usr / share ou qemu-efi-aarch64 / QEMU_EFI.fd de = flash0.img conv equivale a notrunc
qemu / add / aarch64-softmmu / qemu-system-aarch64 -nographic n -virt laptop, gic-version = max -m 2G -cpu max n -netdev-user, i would = vnet, hostfwd =: 127.0.0.1: 0-: 24 -virtio-net-pci device, netdev = vnet n -drive file =. / mini_ubuntu.img if = 't, id = disk0, cache = writeback n -dispositivo virtio-blk, disco = disco0, índice inicial = 0 n - arquivo de disco rígido =. / Flash0.img, o formato é igual a bruto, se = pflash n -obtain file =. / flash1.img, format = raw, entretanto, if = pflash -smp 4 Cast
qemu-img atingir sobre -O raw my_image.qcow2 my_image_output.raw
$ mkdir mnt$ sudo losetup -f -P ubuntu.img$ sudo Lostup -lNOME TAMANHO LIMITE OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC/ dev loop0 0 0 0 6 ubuntu.img 0512$ sudo developers / dev / loop0p2 ./mnt$ marcação 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. velhoefi 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 por loop0
qemu ou build / aarch64-softmmu / qemu-system-aarch64 -nographic n -máquina virt, gic-version = max -m 2G -cpu max n -netdev-user, id é igual a vnet, hostfwd =: 127.0.0.1: 0-: 22 n dispositivo -virtio-net-pci, netdev = vnet n Arquivo é igual a -disco. / Mini_ubuntu.img, if = none, id é igual a drive0, cache = writeback n -dispositivo virtio-blk, unidade de disco rígido = disco0, índice de inicialização = três n -Arquivo de disco =. / Flash0.img, o formato é igual a bruto, se = pflash n -construir arquivo é igual a. / flash1.img, format = raw, se for igual a pflash -smp 4 n Básico. / Linux versus Arch / arm64 / boot / feeling n -append "root = / dev / vda2 sistema de controle nokaslr = ttyAMA0" n -initrd ./initrd.img-5.5.11 -lenses -S
-S pare em Médico e aguarde a conexão do depurador.
add-auto-load-safe-path linux-5.5.11 / scripts / gdb versus vmlinux-gdb.py
$ gdb linux-5.5.11 para cada vmlinuxGNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-gitLer imagens retiradas de linux-5.5.11 / vmlinux ... pronto.
(gdb) Localhost remoto de destino: 1234Depuração remota totalmente de localhost: 12340x0000000000000000 existe ?? ()
Adicione um tipo de ponto de interrupção ao kernel como uma experiência.
(gdb) hbreak start_kernelPonto de interrupção auxiliado pelo hardware 1 all 0xffff800011330cdc: init para cada arquivo main.c, linha 577.(gdb) cContinuar.Thread atinge o ponto de interrupção 1, start_kernel () apenas com init / main.c: 577577 {(gdb) i572573 rest_init ();574575576 Evite __visible asmlinkage __init start_kernel (void)577 {578 caracteres * linha de comando;579 caracteres 4. after_dashes;580581 set_task_stack_end_magic (& init_task);(Gdb)
dd if = / dev - zero de = flash1.img bs = 1M ser dependente = 64dd if = / dev / no of = flash0.img bs = 1M contagem equivale a 64dd if = / usr / share para cada qemu-efi-aarch64 / QEMU_EFI.fd de = flash0.img conv significa notrunc
qemu / build e aarch64-softmmu / qemu-system-aarch64 -nographic n -car virt, gic-version = max -m 2G -cpu utmost n -netdev-user, id significa vnet, hostfwd =: 127.0.0.1: 0-: 22 n - tecnologia virtio-net-pci, netdev = vnet n -drive file =. versus mini_ubuntu.img if = not, id = disk0, cache significa writeback n -dispositivo virtio-blk, compact disk = disk0, boot index = 0 n -Arquivo de disco =. / Flash0.img, disco rígido = raw, if = pflash n -drive file =. / flash1.img, format = unsalted, if = pflash -smp pense nisso
qemu-img convert -O raw my_image.qcow2 my_image_output.raw
$ mkdir mnt$ sudo losetup -f -P ubuntu.img$ sudo Lostup -lNOME TAMANHO LIMITE OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC/ dev / loop0 5 0 4 0 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. velhoefi 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 / dev e loop0
qemu / build / aarch64-softmmu por qemu-system-aarch64 -machine virt, gic-version = max -m 2G -cpu max n -netdev-user, id implica vnet, hostfwd =: 127.0.0.1: 0-: 22 n dispositivo -virtio-net-pci, netdev = vnet n Arquivo é igual a -disk. / Mini_ubuntu.img, if = none, id é igual a drive0, cache = writeback n 2) máquina virtio-blk, disco = drive0, bootindex = n -Arquivo de disco =. / Flash0.img, formato implica bruto, if = pflash n -drive file é igual a. / flash1.img, format = raw, se for igual a pflash -smp 4 n Básico. / Linux e Arch / arm64 / boot Not Image n -append "root = / dev - vda2 nokaslr console = ttyAMA0" n -initrd ./initrd.img-5.5.11 -s -S
add-auto-load-safe-path linux-5.5.11 - scripts / gdb / vmlinux-gdb.py
$ gdb linux-5.5.11 para cada vmlinuxGNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-gitLendo símbolos do linux-5.5.11 ou vmlinux ... pronto.
(gdb) Destino distante do localhost: 1234Localhost de depuração remota: 1234Usa 0x0000000000000000 diariamente ?? ()
(gdb) hbreak start_kernelPonto de interrupção de hardware 6 para 0xffff800011330cdc: arquivo init / main.c, linha de produto 577.(gdb) cContinuar.O thread # 1 atingiu o ponto de interrupção 1, start_kernel () aqui em init / main.c: 577577 {(gdb) i572573 rest_init ();574575576 asmlinkage __evoidably Avoid __init start_kernel (void)577 {578 caracteres * linha de comando;579 caracteres after_dashes;580581 set_task_stack_end_magic (& init_task);(Gdb)
Atualizado
Qemu Arm Linux Debug
Qemu Arm Linux 디버그
Qemu Arm Linux Debug
Qemu Arm Linux Debug
Qemu Arm Linux Debug
Débogage Linux Qemu Arm
Depuración De Qemu Arm Linux
Debugowanie Qemu Arm Linux
Qemu Arm Linux-Debugging
Qemu Arm Linux Debug