Wygodniejsze pisanie sterowników dla Windows dzięki Driver Module Framework

Wygodniejsze pisanie sterowników dla Windows dzięki Driver Module Framework

Autor: Krzysztof Sulikowski

Opublikowano: 8/16/2018, 7:04 PM

Liczba odsłon: 2069

Aby ułatwić deweloperom pisanie sterowników dla Windows, Microsoft udostępnił open source'owy framework Driver Module Framework (DMF). Pozwoli on deweloperom pisać proste i ustrukturyzowane sterowniki Windows Driver Framework (WDF), a także udostępniać kod między nimi. Idea, która przyświecała zespołowi Microsoft Devices, wywodzi się z praktyk twórców Surface, którzy na przestrzeni lat budowali dość zróżnicowane urządzenia.

Urządzeń z linii Surface, takich jak Pro, Studio, Laptop czy Book, naszym Czytelnikom przedstawiać nie trzeba. Wiadomo, że prócz cech wspólnych każde z nich posiada unikalne cechy i możliwości sprzętowe. By je zaadresować, Microsoft musiał napisać odpowiednie sterowniki i firmware. I tu zaczyna się wspomniana idea. Jak wspomina Microsoft:

Nawet pomimo tego, że te produkty mają cechy wspólne w kwestii tego, jak łączą się ze sprzętem, poszczególne zespoły produktów pracowały w izolacji i budowały raczej własne sterowniki od zera lub kopiowały je, bazując na swojej świadomości istniejącego kodu, i modyfikowały, by dopasować do swoich potrzeb. Było to pomocne, gdy chodziło o natychmiastowe priorytety biznesowe, ale prowadziło do potężnej duplikacji kodu i kosztów związanych z utrzymaniem. Deweloperzy o zróżnicowanych poziomach doświadczenia zwykle tworzyli wiele rozbieżnych rozwiązań, by rozwiązać ten sam problem, a kodowi brakowało struktury i jakości.

By uniknąć tej sytuacji, twórcy Surface postanowili potraktować kwestię sterowników holistycznie i zaczęli pracować nad sposobem strukturyzacji kodu, który zapewniłby możliwość maksymalnego ponownego użycia kodu. Zaczęło się od rozbicia poszczególnych funkcjonalności w sterownikach na dającą się udostępniać bazę kodu. Doprowadziło to do powstania DMF - rozszerzenia dla WDF, które dostarcza nam biblioteki nowych obiektów WDF o nazwie DMF Modules. Moduły zdolne są do strukturalnej interakcji ze sobą nawzajem, z WDF i ze sprzętem. Dziś wszystkie sterowniki WDF pisane są przez zespół Microsoft Devices z użyciem DMF. Moduły są lepiej przetestowane i mogą być używane ponownie lub rozszerzane w celu spełnienia nowych wymagań. Poza oczywistą korzyścią, jaką są dobrze zaprojektowane sterowniki, poprawki błędów są teraz dużo efektywniejsze. Poprawka w module jest automatycznie aplikowana do wszystkich sterowników, które zostały zbudowane na jego podstawie. Microsoft dodaje też, że udostępnił wiele modułów na licencji open source, by dostarczyć rozwiązań wielu typowych problemów.

Driver Module Framework (DMF)

Czym dokładnie różnią się tradycyjne sterowniki WDF od sterowników WDF opartych na DMF? Microsoft wymienia kilka takich różnic:

  • WDF komunikuje się z DMF, podczas gdy DMF komunikuje się ze sterownikiem.
  • Kontekst urządzenia (zaznaczony na zielono) istnieje niezależnie w każdym module i w specyficznym dla sterownika kodzie klienta. Każdy mniejszy kontekst urządzenia trzyma jedynie te elementy, które są potrzebne dla tego modułu. Żaden moduł nie może uzyskać dostępu do kontekstu urządzenia innego modułu.
  • Wywołania zwrotne (zaznaczone na czerwono) istnieją teraz niezależnie w każdym module i specyficznym dla klienta kodzie. WDF wywołuje sterownik klienta. DMF przechwytuje to wywołanie i wysyła je do każdego modułu w drzewku instancjonowanych modułów. Każdy moduł zajmuje się każdym wywołaniem zwrotnym, które pasuje. DMF przechwytuje wywołania zwrotne do wywołań zwrotnych sterownika klienta.
  • Należy jeszcze zwrócić uwagę na strzałki. Pokazują one przepływ pomiędzy modułami i kodem specyficznym dla klienta. W tym przykładzie kod specyficzny dla klienta może komunikować się z trzema modułami: ACPI, Button i Stream. Nie może komunikować się GPIO, FIFO, List ani Thread. ACPI nie może komunikować się z FIFO etc. Nawet bez patrzenia na kod źródłowy łapiemy ideę tego, jak dane przepływają w tym sterowniku.

Można to jeszcze podsumować w ten sposób: każdy moduł jest samodzielną, pojedynczą jednostką. Posiada własny kod, kontekst i wywołania zwrotne. Czyni to kod łatwym w ponownym użyciu, a taka organizacja sterowników rozwiązuje wiele problemów.

DMF i jego moduły, szablony i próbki kodu zostały przez Microsoft udostępnione do publicznego użycia i można je pobrać z (nota bene niedawno przez Microsoft przejętego) serwisu GitHub.

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia