Objetivo
Estou tentando escrever um driver de dispositivo simples no Ubuntu. Eu quero fazer isso usando o Eclipse (ou um IDE melhor que seja adequado para a programação de drivers). Aqui está o código:
#include <linux/module.h>
static int __init hello_world( void )
{
printk( "hello world!\n" );
return 0;
}
static void __exit goodbye_world( void )
{
printk( "goodbye world!\n" );
}
module_init( hello_world );
module_exit( goodbye_world );
Meu esforço
Após algumas pesquisas, decidi usar o Eclipse CTD para desenvolver o driver (embora ainda não tenha certeza se ele suporta ferramentas de depuração com vários threads). Então eu:
- Instalou o Ubuntu 11.04 desktop x86 em uma máquina virtual VMWare,
- Instalado
eclipse-cdt
e linux-headers-2.6.38-8 usando o Synaptic Package Manager, - Criamos um código acima
C Project
nomeadoTestDriver1
e copiado e colado para ele, - Alterou o comando de construção padrão,,
make
para o seguinte comando de construção personalizado:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
O problema
Eu recebo um erro ao tentar criar este projeto usando o eclipse. Aqui está o log da compilação:
**** Construção da configuração Debug para o projeto TestDriver1 ****
make -C /lib/modules/2.6.38-8-generic/build M = / home / isaac / workspace / TestDriver1 tudo
make: Entrando no diretório '/usr/src/linux-headers-2.6.38-8-generic'
make: *** Nenhuma regra para tornar o alvo
vmlinux', needed by
tudo '. Pare.make: Deixando o diretório '/usr/src/linux-headers-2.6.38-8-generic'
Curiosamente, não recebo nenhum erro quando uso em shell
vez de eclipse
criar este projeto. Para usar shell
, eu apenas crio um Makefile
contendo obj-m += TestDriver1.o
e uso o make
comando acima para criar.
Então, algo deve estar errado com o eclipse Makefile
. Talvez esteja procurando a vmlinux
arquitetura (?) Ou algo assim, enquanto a arquitetura atual é x86. Talvez seja por causa do VMWare?
Pelo que entendi, eclipse
cria os makefiles automaticamente e modificá-los manualmente causaria erros no futuro OU dificultaria o gerenciamento makefile
.
Então, como posso compilar este projeto no eclipse?
fonte
autotools
plugin em breve. Você conhece algum IDE melhor para a programação de drivers? Você acha que eu (um usuário preguiçoso do VS que não tem experiência no Linux) posso gerenciarmakefile
? Émakefile
realmente gerenciável em grandes projetos?Também sou novo na programação de drivers do Linux; descobri que há uma nova maneira de implantar módulos do kernel (que não estão na árvore oficial do Linux) chamada DKMS. O módulo será instalado como fonte e o DKMS cuidará de compilá-lo para cada kernel. Isso significa que o Makefile para o módulo será gravado manualmente e sua fonte não será incluída para as ferramentas automáticas.
http://linux.dell.com/dkms/
Atualizada...
O DKMS mudou-se para http://en.community.dell.com/techcenter/os-applications/w/wiki/2463.linux-projects.aspx
Este tutorial / introdução rápida ao DKMS (links da página do projeto da Dell): Artigo do Linux Journal , artigo Power Solutions , artigo Ottawa Linux Symposium
DKMS usado para implantação rápida do driver. Por exemplo, módulos de kernel usando DKMS na minha máquina Ubuntu:
Este é o código que escrevi antes. Pode ser útil como DKMS Hello World. https://github.com/sneetsher/RTD-DM5408-Driver-Port-for-Linux
fonte
1> você pode tentar com este comando
"make" -> "/ usr / bin / make"
2> no diretório armazene seu código de olá, crie o nome do arquivo "Makefile"
fonte