2012-10-07 7 views
5

Mam kilka lat doświadczenia w programowaniu. Teraz postanowiłem pracować nad rozwojem modułu jądra Linux. Jednak nie mogę nawet zacząć. Skompilowałem ten kod w Ubuntu.Jak kodować moduł jądra Linux?

#include <linux/module.h> 
int init_module(void){ printk("<1> hellp"); return 0;} 
void cleanup_module(void){ printk("<1> bye");} 

Jednak insmod nie działa, komunikat o błędzie "Niepoprawny format modułu". po uruchomieniu google uznałem, że może to być problem z kompatybilnością wersji. I nie ma dobrego sposobu na rozwiązanie tego problemu. Czy jakiś prawdziwy programista modułów jądra może mi doradzić? jakie środowisko powinienem przygotować przed rozpoczęciem nauki?

Dzięki!

Odpowiedz

10

Brakuje makr module_init() i module_exit() i niektórych ważnych #defines. Potrzebujemy więcej informacji, takich jak opcje make/gcc. Może to oznaczać "nieprawidłowy format modułu", ponieważ kompilujesz się w wersji 32-bitowej, gdy jądro ma 64-bitową wartość, więc upewnij się, że używasz -64 flagi kompilacji i łącza.

Świetny tutorial świata dla modułów jądra znajduje się tutaj: http://archive.is/KNkEE (original link do artykułu jest uszkodzony).

Witamy w pisaniu modułów jądra. Są dużo zabawy w porównaniu do pisania sterowników Windows (zrobiłem oba). Interfejs modułu jądra Linuksa jest znacznie prostszy w użyciu i istnieje wiele podstawowych sterowników, do których możesz delegować i które przyspieszają pracę.

+0

* "Brakuje makra __init i __exit, ..." * - Zastosowanie '' __exit' __init' i nie są wymagane; określają tylko sekcję tekstową, która może zostać zwolniona po zakończeniu rozruchu. Do modułu sterującego wymagane są deklaracje dla dwóch punktów wejścia za pomocą 'module_init()' i 'module_exit()'. – sawdust

1

Kompletny i uproszczony blog o jądrach systemu Linux, programowaniu modułów i pisaniu prostych sterowników urządzeń dla urządzeń wbudowanych.

xploredevicedrivers.blogspot.in