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?
źródło
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?Jestem również nowy w programowaniu sterowników dla Linuksa. Odkryłem, że istnieje nowy sposób wdrażania modułów jądra (które nie znajdują się w oficjalnym drzewie Linuksa) o nazwie DKMS. Moduł zostanie zainstalowany jako źródło, a DKMS zajmie się jego kompilacją dla każdego jądra. Oznacza to, że plik Makefile dla modułu zostanie zapisany ręcznie, a jego źródło nie zostanie dołączone do autotools.
http://linux.dell.com/dkms/
zaktualizowano ...
DKMS został przeniesiony na http://en.community.dell.com/techcenter/os-applications/w/wiki/2463.linux-projects.aspx
To tutoriale / szybkie wprowadzenie do DKMS (linki z Dell widoku projektu): Linux Journal artykuł , papier Power Solutions , Ottawa Linux Symposium papieru
DKMS służy do szybkiego wdrażania sterowników. Na przykład moduły jądra używające DKMS na moim komputerze Ubuntu:
To jest kod, który napisałem wcześniej. Może być pomocny jako DKMS Hello World. https://github.com/sneetsher/RTD-DM5408-Driver-Port-for-Linux
źródło
1> możesz spróbować z tym poleceniem
„make” -> „/ usr / bin / make”
2> w katalogu przechowuj swój kod powitalny, nazwa pliku twórczego „Makefile”
źródło