Cel
Próbuję napisać prosty sterownik urządzenia na Ubuntu. Chcę to zrobić za pomocą Eclipse (lub lepszego IDE odpowiedniego do programowania sterowników). Oto kod:
#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 );
Mój wysiłek
Po kilku badaniach zdecydowałem się użyć Eclipse CTD do opracowania sterownika (chociaż nadal nie jestem pewien, czy obsługuje narzędzia do debugowania wielowątkowego). Więc ja:
- Zainstalowałem Ubuntu 11.04 desktop x86 na maszynie wirtualnej VMWare,
- Zainstalowano
eclipse-cdt
i linux-headers-2.6.38-8 za pomocą Synaptic Package Manager, - Utworzono do niego
C Project
nazwanyTestDriver1
i wklejony powyżej powyższy kod, - Zmieniono domyślne polecenie kompilacji
make
na następujące niestandardowe polecenie kompilacji:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
Problem
Podczas próby zbudowania tego projektu przy użyciu środowiska Eclipse pojawia się błąd. Oto dziennik kompilacji:
**** Kompilacja konfiguracji Debugowanie dla projektu TestDriver1 ****
make -C /lib/modules/2.6.38-8-generic/build M = / home / isaac / workspace / TestDriver1 wszystkie
make: Wpis do katalogu „/usr/src/linux-headers-2.6.38-8-generic”
make: *** Brak reguły, aby cel był
vmlinux', needed by
wszystkim ”. Zatrzymać.make: Wyjście z katalogu „/usr/src/linux-headers-2.6.38-8-generic”
Co ciekawe, nie otrzymuję błędu, gdy używam shell
zamiast eclipse
budować ten projekt. Aby użyć shell
, po prostu utworzę Makefile
zawierające obj-m += TestDriver1.o
i użyj powyższego make
polecenia, aby zbudować.
Coś musi być nie tak z zaćmieniem Makefile
. Może szuka vmlinux
architektury (?) Lub czegoś, podczas gdy obecna architektura to x86. Może to z powodu VMWare?
Jak zrozumiałem, eclipse
automatyczne tworzenie plików makefile i modyfikowanie ich ręcznie spowoduje błędy w przyszłości LUB utrudni zarządzanie makefile
.
Jak mogę skompilować ten projekt zaćmieniem?
autotools
Wkrótce sprawdzę wtyczkę. Czy znasz jakieś lepsze IDE do programowania sterowników? Czy myślisz, że ja (leniwy użytkownik VS, który nie ma doświadczenia w Linuksie) mogę zarządzaćmakefile
? Czymakefile
naprawdę można sobie poradzić w dużych projektach?