Tworzenie sterowników dla FreeBSD Michał Hajduk mih@semihalf.com AGH, Kraków 23.04.2009
Szkic prezentacji Wstęp, defnicje Architektura urządzeń RTC, I2C, DMA Wprowadzenie do tworzenia sterowników Newbus, autokonfguracja Struktura Przykłady implementacji sterowników RTC, I2C Połączenie ze światem użytkownika, pomocne narzędzia Podsumowanie Pytania, komentarze?
Architektura urządzeń Defnicje RTC Zegar czas rzeczywistego I2C (Philips) Inter IC (Integrated Circuits) Bus DMA Bezpośredni dostęp do pamięci
Magistrala I2C Dwie linie: SDA - Serial Data Line SCL Serial Clock Line Tryb pracy Master / Slave Magistrala szeregowa, dwukierunkowa Transmisja 8 bitowa Adresowanie 7 lub 10 bitowe STOP / START/ REPEATED START 3 prędkości (100 kbps, 400 kbps, 3.4 Mbps) Wykorzystanie (EEPROM, SPD, A/D)
Magistrala I2C c.d. Format ramki START / STOP http://www.standardics.nxp.com/support/documents/i2c/pdf/i2c.bus.specification.pdf
Magistrala I2C c.d. Transmisja danych http://www.standardics.nxp.com/support/documents/i2c/pdf/i2c.bus.specification.pdf
Wybrane interfejsy jądra bus_space(9) Abstrakcja dostępu do magistrali lokalnej CPU Porządek bajtów, szerokość słów, przestrzeń adresowa bus_dma(9) rman(9) Abstrakcja operacji Direct Memory Access Synchronizacja (cache, DMA bez wsparcia dla koherencji) Warstwa zarządzania abstrakcyjnymi zasobami
Newbus Dwa główne interfejsy Device probe, attach, detach shutdown, resume, suspend Bus Mechanizm zorientowany obiektowo Wykorzystanie bus_space bus_space_read bus_space_write mbus root nexus i2c mge rtc
Newbus c.d. Główne zalety Pseudo szyny (pseudo-busses) Modularność Dynamiczne przyłączanie Forma drzewa (łatwość obserwacji zależności) Odzielenie części zależnej i niezależnej od sprzętu Interfejs łatwy w użyciu
Pliki typu.m Interfejs magistrali Rezerwacja zasobów bus_alloc_resource bus_release_resource Przydzielanie przerwań Inne bus_setup_intr bus_teardown_intr bus_generic_attach bus_add_child Interfejs zdefiniowany w pliku typu.m
Struktura sterownika device_method_t cdevsw * probe attach detach shutdown... open close read write ioctl Struktura: device_method_t DEVMETHOD(9) probe attach detach device_t devclass_t softc DRIVER_MODULE(9)... * opcjonalnie
Struktura sterownika c.d. make_dev destroy_dev nazwa sterownika nazwa magistrali (rodzic)
Struktura sterownika c.d. Deklarowanie zasobów Sterownik Pliki platformowe W naszym przypadku: sys/arm/mv/kirkwood/kirkwood.c
Przykładowe implementacje Funckja settime dla sterownika rtc
Przykładowe implementacje c.d. Alokacja zasobó w Dodanie potomka Przyłączenie potomka (wywołanie probe i attach)
CDEVSW Interesuje nas funkcja write Przypomnienie deklaracji
CDEVSW c.d.
Testy i porady Blokady w sterownikach Rozwiązywanie problemów KDB/DDB Panic Weryfkacja poprawności kodu Rozwój aplikacji wspomagających testy Pliki źródłowe wykorzystane w prezentacji sys/arm/mv/rtc.c sys/arm/mv/twsi.c sys/dev/iicbus/
Kompilacja Dynamiczna forma modułu jądra KLD (dynamic kernel linker) kldload, kldunload dodatkowy Makefle Statyczna forma modułu jądra Podpięcie sterownika do systemu budowania. KERNCONF np. sys/arm/mv/kirkwood/fles.db88f6xxx wpis standard / optional np. sys/arm/conf/db-88f6xxx device name_optional
Połączenie ze światem użytkownika (userspace) Implementacja ioctl Wołanie systemowe Funkcje biblioteczne a wołania systemowe Implementacja wołania systemowego Przerwanie software'owe User Space Proce s Kernel Space System Call
Pomocne narzędzia (userspace) i2c(8) (FreeBSD 8 - current ) usr.sbin/i2c/ ioctl
Pomocne narzędzia (userspace) i2c(8) - ostrzeżenie!
Pomocne narzędzia (userspace) truss(1) watchdog(8) pciconf(8) devinfo(8)
Podsumowanie Kernel Mode / User Mode Obiektowość Newbus Struktura sterownika man(1) Wygodny system budowania Wsparcie dla developerów Dlaczego warto! style(9)
Bibliografa, podziękowania Embedded FreeBSD Cookbook (Paul Cevoli, Newnes 2002, ISBN-13: 978-1589950047) The FreeBSD Project FreeBSD Books http://www.freebsd.org/doc/en/books/handbook/ http://www.freebsd.org/doc/en/books/arch-handbook/ http://www.freebsd.org/doc/en/books/developers-handbook/ Zespół programistów Semihalf
Dziękuję za uwagę! Pytania, komentarze?
Tworzenie sterowników dla FreeBSD Michał Hajduk mih@semihalf.com AGH, Kraków 23.04.2009