Pergunta

Tenho que testar algum código de baixo nível em uma arquitetura de braço. Normalmente, a experimentação é bastante complicada na placa real, então eu estava pensando em Qemu.

O que eu gostaria de obter é algum tipo de informação de depuração, como printfs ou gdb. Sei que isso é simples com o Linux, pois implementa o driver do dispositivo para o Integrator Qemu e o recurso GDB, mas não estou trabalhando com o Linux. Suspeito também que extrair esse tipo de funcionalidade do código -fonte do kernel Linux seja complicado.

Estou pesquisando de alguns simples Sistema operacional que já implementa um desses recursos. Você tem alguns conselhos?

Foi útil?

Solução

Você não precisa de um sistema operacional de destino para depurar o código que está sendo executado dentro do Qemu - o Qemu já faz isso por você.

Especificamente, o Qemu suporta depuração remota do GDB-você pode executar o QEMU com as opções de linha de comando apropriadas e exportará uma interface à qual uma cópia do GDB (em execução na máquina host) pode se conectar. Nesse ponto, você pode depurar o programa no GDB praticamente como se estivesse executando -o na máquina host.

http://wiki.osdev.org/gdb parece ter informações um pouco mais básicas; Possivelmente não o suficiente para começar completamente você, mas pelo menos fornece a ideia básica e alguns termos a serem procurados na documentação QEMU e GDB. Pule o pouco sobre "Implementando Stubs GDB", que não se aplica aqui, já que o Qemu já possui um, e comece na seção em "Usando Stubs do Emulador". A forma curta é simplesmente que você inicia qemu com o -s Opção (exporte uma conexão GDB no local de localhost: 1234) e o -S Opção (aguarde um comando "Continuar" do GDB antes de iniciar a execução) e depois no GDB em seu host, você diz target remote :1234 ao invés de run. Além disso, é claro, você precisa usar uma versão ARM do GDB em vez de um nativo-x86.

(Além disso, se você estiver disposto a pagar por uma solução comercial, o Arm Toolchain da CodesourCery tem a integração do IDE para definir tudo isso automaticamente, incluindo suporte para "printf" para imprimir no console do depurador. Isso funciona em uma placa física , também, se você tem um depurador de hardware. Isenção de responsabilidade usual sobre eu ser um funcionário da Codesourcery se aplica - mas acho muito fácil de usar.)

Atualização, 2012: A CodesourCery's Toolchain agora é chamada Mentor Graphics Sourcery Codebench, mas tudo o que acima ainda se aplica.

Outras dicas

Percebo que estou abordando seu problema original aqui, e não sua solução proposta (talvez seja melhor?), Mas usar o GDB (ou Insight/GDB) diretamente no alvo, use uma ferramenta JTAG de baixo custo e Openocd. Um exemplo dessa configuração e como implementá-la pode ser encontrada aqui.

Se você tem um orçamento maior, um depurador JTAG mais detalhado pode ser útil, como o Abatron BDI3000 com firmware bdigdb que permite a depuração remota e a programação de dispositivos sobre Ethernet com o GDB e nenhum drivers especiais ou agente de depuração de destino.

Talvez um microkernel goste OKL4 atenderia às suas necessidades?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top