Esta não é uma resposta direta à sua pergunta - eu acho que @BasileStarynkevitch está certo que, em geral, isso não é algo que você possa fazer facilmente / confiantemente, embora, pelo menos em teoria, seu código seja suficientemente abstrato (não realmente em quaisquer dependências do kernel), então eu suponho que você poderia vinculá-lo a um processo de espaço de usuário stub e testar dessa maneira.
Tendo dito que o kernel oferece algo que pode ser útil para você - UML (User Mode Linux) ( observe que, no momento em que este livro foi escrito, esta página parece estar inativa devido a problemas de infra-estrutura do sourceforge - esperamos que volte em breve)
A UML é um Linux ARCH especial que constrói todo o kernel como um executável do espaço do usuário. Quando este executável é executado, ele é acionado como o kernel normalmente faz, mas está contido no espaço de um processo do espaço do usuário. Isso significa que você pode ligar o GDB diretamente ao processo UML como faria com qualquer outro processo do userspace e depurar como normal, sem precisar mexer nos depuradores de kernel.
Você precisará pelo menos do seguinte:
- A árvore de origem do kernel para qualquer sabor de kernel que você esteja usando.
- Construa o kernel usando
ARCH=um
. Isso pode ou não ser fácil com qualquer kernel e configuração que você tenha. Etapas detalhadas estão na página do sourceforge, se isso voltar. Também mais informações aqui .
- Para ativar este kernel, você também precisará de um sistema de arquivos para inicializar. Existem alguns pré-construídos aqui . Note que nem todos os sistemas de arquivos funcionarão com todos os kernels, então você deve escolher e escolher criteriosamente.
- Estou assumindo que seu código faz parte de um módulo do kernel. Se assim for, você também terá que construir este módulo usando
ARCH=um
e insmod quando o processo do kernel UML estiver em execução.