2011-12-07 15 views
6

Próbuję utworzyć minimalistyczny system Linux dla urządzenia wbudowanego. Oznacza to konieczność kompilacji jądra i sterowników. Jeden sterownik jest zapisywany bezpośrednio na płycie urządzenia przez jego twórcę, więc nie jest to repozytorium. Może być skompilowany jako moduł jądra.Kompilowanie sterownika jako części jądra, a nie jako modułu

Jednak ze względu na niezmienny charakter systemu Linux i wymóg bardzo małego wykorzystania pamięci nie chcę używać modułów. Chcę wszystkie sterowniki wbudowane w jądro. I wszystkie sterowniki dostarczone z jądrem ustawiłem w ten sposób.

Więc moim problemem jest jak skompilować ten specjalny sterownik do jądra?

Wszystkie wyszukiwania nie dostarczyły mi rozwiązania - wszystkie dotyczą tylko kompilowania jako moduły.

Dzięki za pomoc.

+0

Wymagałoby to umieszczenia modułu w drzewie źródłowym jądra i łatania niektórych plików Makefile, aby je uwzględnić. Nie jestem jednak pewien szczegółów. Z jakiego modułu korzystasz? –

+0

Jest to domowy sterownik. Wiem, że muszę dodać go do źródła jądra. Jednak potrzebuję pewnych szczegółów, jak modyfikować pliki Makefile i tak dalej. –

+1

Możliwy duplikat [Wstaw statyczny moduł jądra Linux] (http://stackoverflow.com/questions/7353851/insert-linux-kernel-module-statically) –

Odpowiedz

5

Zdecydowanie będziesz musiał umieścić źródło sterownika w drzewie źródłowym jądra i zaktualizować plik Makefile, aby go uwzględnić. Możesz zobaczyć, jak to działa w krokach 1.1 do 1.3 here.

Jeśli oprogramowanie na poziomie użytkownika komunikuje się ze sterownikiem urządzenia, prawdopodobnie robi to poprzez wywołania systemowe. Wyszukaj źródło sterownika, szukając asmlinkage, jeśli znajdziesz którekolwiek z nich, wtedy chcesz dodać kilka wywołań systemowych. W pozostałej części powyższego dokumentu wyjaśniono, jak je skonfigurować. Będziesz musiał zmodyfikować co najmniej dwa pliki (i mogą się one nieznacznie różnić w zależności od wersji jądra).

Jeśli sterownik urządzenia komunikuje się bezpośrednio z jądrem, mamy do czynienia z przerwaniami, we/wy mapowanymi na pamięć lub DMA. Szczerze mówiąc, nie wiem, czy można z nimi poradzić w pliku źródłowym sterownika (w takim przypadku dobrze idziesz), czy też wymagają modyfikacji innych plików w drzewie źródłowym. This to dobre źródło takich rzeczy.

Powodzenia

Powiązane problemy