2010-04-21 14 views
21

Niedawno zacząłem opracowywać sterownik wbudowanego urządzenia z systemem Linux.Nowość w jądrze Linux/Driver development

Do tej pory mam tylko przeczytać o wewnętrznych elementach linux.
Nie mając wcześniejszego doświadczenia w tworzeniu sterowników, uważam, że trudno jest wylądować mój pierwszy krok.

  • Pobrałem kod źródłowy jądra (v2.6.32).
  • Przeczytałem (skimped) Sterowniki urządzeń Linux (3e)
  • Przeczytałem kilka powiązanych stanowisk tutaj na StackOverflow.
  • Rozumiem, że linux ma podejście "monolityczne".
  • Mam wbudowane jądro (uwzględniono istniejący sterownik w menuconfig itp.)
  • Znam podstawy plików kconfig i makefile, więc nie powinno to stanowić problemu.

Czy ktoś może opisać strukturę (czyli inter-links)
różnych katalogów w kodzie źródłowym jądra.

Innymi słowy, biorąc pod uwagę to plik kodu źródłowego,
które inne pliki byłoby zapoznać się z nimi związane Kod

(dalej „#include” -s zapewnić częściowe pomysł)

Czy ktoś mógłby mi pomóc w uzyskaniu lepszego pomysłu?
Każda pomoc zostanie bardzo doceniona.

Dziękuję.

+0

To powinno wyczyścić. http://www.youtube.com/watch?v=ENNKtfR2PYc –

+0

Napisz prosty moduł Hello World dla jądra. Następnie, gdy już zrozumiesz moduł jądra Hello World , zapisz to http://www.freesoftwaremagazine.com/articles/drivers_linux i przetestuj go. Przestrzegaj powyższego linku, dopóki go nie zrozumiesz. , a także przeczytać dwa moje posty tutaj http://mail.nl.linux.org/kernelnewbies/2010-09/ Dosłownie walczyłem na forum, aby zrozumieć, jak to działa. Musisz więc zrobić to samo. Niezależnie od tego, co ktoś mówi, walczyć, dopóki nie zrozumiesz. Najlepszym sposobem nauki jest podnieść projekt i zacząć pracę na końcu, dostaniesz dużo. Na przykład zdecyduj się naprawić –

+0

Błąd dla sterownika bezprzewodowego w jądrze. Wiem, że na tym etapie brzmi zmęczony, ale gonić go, aż to zrobisz.Na koniec będziesz mógł to zrobić. –

Odpowiedz

18

Biorąc pod uwagę plik C, należy spojrzeć na funkcje, które wywołują i struktury danych, których używa, zamiast martwić się o konkretne pliki.

Istnieją dwie podstawowe drogi do rozwijania własnego sterownika:

  • wziąć sterownik, który jest podobny do Ciebie; usuń kod, który nie dotyczy Twojego urządzenia, i wpisz nowy kod urządzenia.
  • Zacznij od bardzo podstawowych elementów sterownika urządzenia i dodawaj elementy po trochu, aż urządzenie zacznie działać.

Pliki składające się na sterownik będą bardziej sensowne po zakończeniu tego procesu. Zastanów się, co należy do każdego pliku, ale w pewnym stopniu dzielenie sterownika między pliki jest bardziej sztuką niż nauką. Mniejsze sterowniki często mieszczą się w jednym lub dwóch plikach.

Trochę wzorów może być również dobre. Zastanów się, co robi urządzenie i co powinien zrobić twój sterownik. Na tej podstawie powinieneś być w stanie określić, jakie funkcje powinien posiadać sterownik urządzenia.

Wierzę również, że Linux Device Drivers, Third Edition może pomóc ci wejść na drogę rozwoju sterowników.

Pliki w systemie Linux zawierają pliki oparte na tym, co robią, w jakiej warstwie znajdują się i na jakiej warstwie mają dostęp do stosu wywołań. Duży obraz naprawdę informuje, w jaki sposób każdy plik jest powiązany z następnym.

+0

+1 w zaleceniu dla sterowników urządzeń Linux – ctuffli

+0

Dzięki za rekomendację. dziś wieczorem przejdzie ostrożnie przez książkę. Co jeszcze?? Praktyczny przewodnik dla każdego ... – TheCodeArtist

+1

Aby przejść przez jądro, potrzeba prawdziwego eksperta na więcej niż kilka stron ... na dodatek wiele części jądra zmienia się szybko, więc nie ma danych po ich zapisaniu . Najlepiej jest przeczytać i zrozumieć podsystemy, które Cię interesują. – WhirlWind

7

Musiałem raz naprawić sterownik jądra. Moją największą wskazówką (jeśli używasz vima) jest ustawienie go za pomocą ctags, dzięki czemu możesz przeskakiwać źródło jądra za pomocą ctrl-] za każdym razem, gdy zobaczysz funkcję, której nie rozumiesz.

+2

... robimy to już od jakiegoś czasu! I NAPRAWDĘ naprawdę pomocna! – TheCodeArtist

+0

@frankster - wielkie porady dzięki – artm