Wydział Informatyki - Informatyka (S1)
Sylabus przedmiotu Programowanie na poziomie sprzętowym:
Informacje podstawowe
Kierunek studiów | Informatyka | ||
---|---|---|---|
Forma studiów | studia stacjonarne | Poziom | pierwszego stopnia |
Tytuł zawodowy absolwenta | inżynier | ||
Obszary studiów | nauki techniczne, studia inżynierskie | ||
Profil | ogólnoakademicki | ||
Moduł | — | ||
Przedmiot | Programowanie na poziomie sprzętowym | ||
Specjalność | systemy komputerowe i oprogramowanie | ||
Jednostka prowadząca | Katedra Architektury Komputerów i Telekomunikacji | ||
Nauczyciel odpowiedzialny | Krzysztof Makles <Krzysztof.Makles@zut.edu.pl> | ||
Inni nauczyciele | Krzysztof Makles <Krzysztof.Makles@zut.edu.pl> | ||
ECTS (planowane) | 3,0 | ECTS (formy) | 3,0 |
Forma zaliczenia | zaliczenie | Język | polski |
Blok obieralny | 10 | Grupa obieralna | 4 |
Formy dydaktyczne
Wymagania wstępne
KOD | Wymaganie wstępne |
---|---|
W-1 | Wymagane zaliczenie przedmiotu "Architektura systemów komputerowych" |
W-2 | Wymagane zaliczenie przedmiotu "Systemy wbudowane" |
W-3 | Wymagane zaliczenie przedmiotu "Programowanie obiektowe" |
W-4 | Wymagane zaliczenie przedmiotu "Systemy operacyjne I" |
W-5 | Wymagane zaliczenie przedmiotu "Systemy operacyjne II" |
Cele przedmiotu
KOD | Cel modułu/przedmiotu |
---|---|
C-1 | Zapoznanie studentów ze współcześnie stosowanymi systemami operacyjnymi dla urządzeń przenośnych. |
C-2 | Ugruntowanie umiejętności z zakresu teoretycznego i praktycznego wykorzystania operacji bliskosprzętowych w języku C/C++ (operacje na bitach, operowanie bitami na portach, struktury upakowane, pola bitowe, dostęp wariantowy). |
C-3 | Ukształtowanie umiejętności z zakresu podstaw projektowania i opracowania sterownika urządzenia dla systemu operacyjnego Linux. |
C-4 | Ukształtowanie umiejętności tworzenia oprogramowania na systemy mikroprocesorowe, ze szczególnym uwzględnieniem układów rekonfigurowalnych, na podstawie dokumentacji zestawów uruchomieniowych. |
Treści programowe z podziałem na formy zajęć
KOD | Treść programowa | Godziny |
---|---|---|
laboratoria | ||
T-L-1 | Operacje na bitach mikrokontrolera Intel 8048. | 2 |
T-L-2 | Operacje na liczbach stałoprzecinkowych o równym i różnym współczynniku skalowania. | 2 |
T-L-3 | Praktyczne wykorzystanie notacji 16.16 i 32.32. | 4 |
T-L-4 | Wykorzystanie struktur upakowanych, pól bitowych oraz dostępu wariantowego. | 3 |
T-L-5 | Tworzenie przykładowego sterownika urządzenia dla systemu Linux. | 4 |
15 | ||
projekty | ||
T-P-1 | Realizacja oprogramowania bliskosprzetowego dla wybranej platformy mikroprocesorowej dostępnej w zasobach sprzętowych Katedry. Praca w zespołach 2 osobowych. | 15 |
15 | ||
wykłady | ||
T-W-1 | Przypomnienie i uzupełnienie wiadomości z zakresu systemów operacyjnych oraz programowania systemów wbudowanych (przegląd obecnie stosowanych mikrokontrolerów, omówienie budowy aktualnych systemów operacyjnych stosowanych w urządzeniach przenośnych, pod kątem technik programowania). | 4 |
T-W-2 | Całkowite i zmiennoprzecinkowe reprezentacje liczb stosowane w urządzeniach mikrokomputerowych. | 3 |
T-W-3 | Elementy programowania bliskosprzętowego w języku C/C++ (operacje na bitach, operowanie bitami na portach, urządzenia we/wy mapowane w pamięci, struktury upakowane, pola bitowe, dostęp wariantowy). | 4 |
T-W-4 | Architektura i implementacja sterowników w popularnych systemach operacyjnych (Windows Embedded 6.0 CE, Linux). | 4 |
15 |
Obciążenie pracą studenta - formy aktywności
KOD | Forma aktywności | Godziny |
---|---|---|
laboratoria | ||
A-L-1 | Uczestnictwo w zajęciach laboratoryjnych. | 15 |
A-L-2 | Analiza ćwiczenia wykonanego na zajęciach i przygotowanie sprawozdania. | 9 |
A-L-3 | Studia literaturowe przygotowujące do wykonania ćwiczenia laboratoryjnego. | 4 |
A-L-4 | Udział w zaliczeniu i konsultacjach | 2 |
30 | ||
projekty | ||
A-P-1 | Uczestnictwo w zajęciach projektowych. | 15 |
A-P-2 | Samodzielna praca studenta nad rozwiązaniem postawionego zadania projektowego. | 13 |
A-P-3 | Udział w zaliczeniu i konsultacjach | 2 |
30 | ||
wykłady | ||
A-W-1 | Uczestnictwo w zajęciach wykładowych. | 15 |
A-W-2 | Studia literaturowe, przygotowanie do egzaminu. | 13 |
A-W-3 | Udział w zaliczeniu i konsultacjach | 2 |
30 |
Metody nauczania / narzędzia dydaktyczne
KOD | Metoda nauczania / narzędzie dydaktyczne |
---|---|
M-1 | Wykład z prezentacją. |
M-2 | Ćwiczenia laboratoryjne. |
M-3 | Metoda projektów. |
Sposoby oceny
KOD | Sposób oceny |
---|---|
S-1 | Ocena formująca: Ocenie podlegają wykonane przez studenta zadania problemowe postawione w części laboratoryjnej. |
S-2 | Ocena podsumowująca: Ocena końcowa z części laboratoryjnej ustalana na podstawie ocen cząstkowych, otrzymanych w toku zajęć. |
S-3 | Ocena podsumowująca: Ocena końcowa z części projektowej ustalana na podstawie aktywności studenta w trakcie zajęć oraz obrony wykonania projektu. |
S-4 | Ocena podsumowująca: Ocena końcowa z części wykładowej określana na podstawie egzaminu pisemnego. |
Zamierzone efekty kształcenia - wiedza
Zamierzone efekty kształcenia | Odniesienie do efektów kształcenia dla kierunku studiów | Odniesienie do efektów zdefiniowanych dla obszaru kształcenia | Odniesienie do efektów kształcenia prowadzących do uzyskania tytułu zawodowego inżyniera | Cel przedmiotu | Treści programowe | Metody nauczania | Sposób oceny |
---|---|---|---|---|---|---|---|
I_1A_O4/09_W01 Student rozróżnia mikrokontrolery stosowane obecnie w technice i potrafi je scharakteryzować. | I_1A_W10 | — | — | C-4 | T-P-1, T-W-1 | M-3 | S-3 |
I_1A_O4/09_W02 Student nazywa i opisuje współcześnie stosowane systemy operacyjne dla urządzeń przenośnych. Potrafi scharakteryzować modele sterowników urządzeń stosowane we współczesnych systemach operacyjnych. | I_1A_W04 | — | — | C-1 | T-W-1, T-W-4 | M-1 | S-4 |
Zamierzone efekty kształcenia - umiejętności
Zamierzone efekty kształcenia | Odniesienie do efektów kształcenia dla kierunku studiów | Odniesienie do efektów zdefiniowanych dla obszaru kształcenia | Odniesienie do efektów kształcenia prowadzących do uzyskania tytułu zawodowego inżyniera | Cel przedmiotu | Treści programowe | Metody nauczania | Sposób oceny |
---|---|---|---|---|---|---|---|
I_1A_O4/09_U01 Student potrafi opisywać i analizować działanie systemów elektronicznych zawierających elementy programowalne, ze szczególnym uwzględnieniem układów reprogramowalnych. | I_1A_U18 | — | — | C-4 | T-P-1 | M-3 | S-3 |
I_1A_O4/09_U02 Student potrafi rozwiązać postawione przed nim zadanie projektowe rozwiązywane w zespole, wykorzystujące zestaw uruchomieniowy zawierający mikrokontroler, oraz potrafi sporządzać dokumentację techniczną projektu. | I_1A_U02, I_1A_U17, I_1A_U03, I_1A_U05 | — | — | C-4, C-2 | T-P-1 | M-3 | S-3 |
I_1A_O4/09_U03 Student potrafi wykorzystywać i stosować wiedzę teroretyczną dotyczącą programowania bliskosprzętowego i rozwiązywać postawione przed nim zadania inżynierskie, potrafi ocenić otrzymane wyniki badań laboratoryjnych, sporządzać sprawozdaia z wykonanych zadań. | I_1A_U04, I_1A_U17, I_1A_U19 | — | — | C-3, C-2 | T-L-1, T-L-2, T-L-5, T-L-3, T-L-4, T-W-3, T-W-4, T-W-2 | M-2 | S-1, S-2 |
Zamierzone efekty kształcenia - inne kompetencje społeczne i personalne
Zamierzone efekty kształcenia | Odniesienie do efektów kształcenia dla kierunku studiów | Odniesienie do efektów zdefiniowanych dla obszaru kształcenia | Odniesienie do efektów kształcenia prowadzących do uzyskania tytułu zawodowego inżyniera | Cel przedmiotu | Treści programowe | Metody nauczania | Sposób oceny |
---|---|---|---|---|---|---|---|
I_1A_O4/09_K01 Student realizując zadanie projektowe w zespole uzyskuje świadomość odpowiedzialności za wspólnie realizowane zadanie. | I_1A_K03 | — | — | C-4, C-2 | T-P-1 | M-3 | S-3 |
I_1A_O4/09_K02 Student realizując zadania laboratoryjne oraz projektowe rozumie potrzeby dokształcania się i dzielenia się wiedzą w dynamicznie rozwijającym się obszarze nauki, jaką jest informatyka. | I_1A_K01 | — | — | C-4, C-1 | T-P-1, T-W-1 | M-2, M-3 | S-1, S-3 |
Kryterium oceny - wiedza
Efekt kształcenia | Ocena | Kryterium oceny |
---|---|---|
I_1A_O4/09_W01 Student rozróżnia mikrokontrolery stosowane obecnie w technice i potrafi je scharakteryzować. | 2,0 | Brak projektu przygotowanego w stopniu podstawowym. |
3,0 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia w sposób niepełny, nie zawiera elementów wprowadzonych samodzielnie przez studenta. Brak dokumentacji projektu. Student posiada podstawową wiedze dotyczącą elementów składowych projektu (architektura mikrokontrolera, budowa zestawu uruchomieniowego). | |
3,5 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia, nie zawiera elementów wprowadzonych samodzielnie przez studenta. Brak dokumentacji projektu. Student potrafi wskazać miejsce wdrożenia opracowanego rozwiązania. | |
4,0 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia, zawiera elementy wprowadzone samodzielnie przez studenta. Brak dokumentacji projektu. Student potarfi przeprowadzić dyskusję uzyskanego rozwiązania i zidentyfikować słabe strony rozwiązania. | |
4,5 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia, zawiera elementy wprowadzone samodzielnie przez studenta. Przygotowana podstawowa dokumentacja projektowa. Student potrafi ocenić mocne i słabe strony uzyskanego rozwiązania. | |
5,0 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia, zawiera elementy wprowadzone samodzielnie przez studenta. Przygotowana pełna dokumentacja projektowa. Student potrafi ocenić mocne i słabe strony uzyskanego rozwiązania, oraz obronić opracowane rozwiązanie. Potrafi wskazać praktyczne zastosowania opracowanego rozwiązania. | |
I_1A_O4/09_W02 Student nazywa i opisuje współcześnie stosowane systemy operacyjne dla urządzeń przenośnych. Potrafi scharakteryzować modele sterowników urządzeń stosowane we współczesnych systemach operacyjnych. | 2,0 | Wiedza z części wykładowej sprawdzana jest w drodze egzaminu pisemnego, ocenianego w skali punktowej. Student nie potrafi przywołać wiedzy dotyczącej systemów operacyjnych i modeli sterowników urządzeń. |
3,0 | Wiedza z części wykładowej sprawdzana jest w drodze egzaminu pisemnego, ocenianego w skali punktowej. Student potrafi określić podział architektury sterowników i opisać podział architektury sterowników ze względu na ich implementację, moduł ładujący oraz ładowanie do pamięci. | |
3,5 | Wiedza z części wykładowej sprawdzana jest w drodze egzaminu pisemnego, ocenianego w skali punktowej. Student potrafi określić podział architektury sterowników i scharakteryzować każdy z typów architektury sterowników. | |
4,0 | Wiedza z części wykładowej sprawdzana jest w drodze egzaminu pisemnego, ocenianego w skali punktowej. Student potrafi określić podział architektury sterowników i scharakteryzować każdy z typów architektury sterowników. Zna funkcje interfejsu strumieniowego w powiązaniu z systemem operacyjnym. Rozróżnia sterowniki działające w trybie urzytkownika, oraz sterowniki działające w trybie jądra. | |
4,5 | Wiedza z części wykładowej sprawdzana jest w drodze egzaminu pisemnego, ocenianego w skali punktowej. Student potrafi określić podział architektury sterowników i scharakteryzować każdy z typów architektury sterowników. Zna funkcje interfejsu strumieniowego w powiązaniu z systemem operacyjnym. Rozróżnia sterowniki działające w trybie urzytkownika, oraz sterowniki działające w trybie jądra. Potrafi wskazać zastosowanie obiektu reflektora i określić jego funkcje. | |
5,0 | Wiedza z części wykładowej sprawdzana jest w drodze egzaminu pisemnego, ocenianego w skali punktowej. Student posiada pełną wiedzę dotyczącą systemów operacyjnych dla urządzeń przenośnych, oraz architektur sterowników. Potrafi krytycznie ocenić różne architektury sterowników. Potrafi powiązać wiedzę dotyczącą sterowników urządzeń z wiedzą dotyczącą aspektów działania systemów operacyjnych. |
Kryterium oceny - umiejętności
Efekt kształcenia | Ocena | Kryterium oceny |
---|---|---|
I_1A_O4/09_U01 Student potrafi opisywać i analizować działanie systemów elektronicznych zawierających elementy programowalne, ze szczególnym uwzględnieniem układów reprogramowalnych. | 2,0 | Nie potrafi wymienić i nazwać popularnych mikrokontrolerów. Nie posiada elementarnej wiedzy na temat układów reprogramowalnych. |
3,0 | Student potrafi wymienić i nazwać popularne mikrokontrolery, oraz wyliczyć i opisać architektury układów reprogramowalnych. | |
3,5 | Student potrafi wymienić i nazwać popularne mikrokontrolery, oraz wyliczyć i opisać architektury układów reprogramowalnych. Potrafi przeprowadzić analize działania podstawowych elementów zestawu uruchomieniowego. | |
4,0 | Student potrafi wymienić i nazwać popularne mikrokontrolery, oraz wyliczyć i opisać architektury układów reprogramowalnych. Potrafi przeprowadzić analize działania wszystkich elementów zestawu uruchomieniowego. | |
4,5 | Student potrafi wymienić i nazwać popularne mikrokontrolery, oraz wyliczyć i opisać architektury układów reprogramowalnych. Potrafi przeprowadzić analize działania wszystkich elementów zestawu uruchomieniowego. Potrafi opisać architekturę i sposób wykorzystania magistrali łączącej elementy zestawu uruchomieniowego. | |
5,0 | Student potrafi wymienić i nazwać popularne mikrokontrolery, oraz wyliczyć i opisać architektury układów reprogramowalnych. Potrafi przeprowadzić analize działania wszystkich elementów zestawu uruchomieniowego. Potrafi opisać architekturę i sposób wykorzystania magistrali łączącej elementy zestawu uruchomieniowego. Posiada umiejętność planowania architektury rozwązania, które ma być określone w strukturze reprogramowalnej. | |
I_1A_O4/09_U02 Student potrafi rozwiązać postawione przed nim zadanie projektowe rozwiązywane w zespole, wykorzystujące zestaw uruchomieniowy zawierający mikrokontroler, oraz potrafi sporządzać dokumentację techniczną projektu. | 2,0 | Brak projektu przygotowanego w stopniu podstawowym. |
3,0 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia w sposób niepełny, nie zawiera elementów wprowadzonych samodzielnie przez studenta. Brak dokumentacji projektu. Student potrafi dobrać zestaw uruchomieniowy (zawierający mikrokontroler) do postawionego zadania. | |
3,5 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia, nie zawiera elementów wprowadzonych samodzielnie przez studenta. Brak dokumentacji projektu. Student potrafi dobrać zestaw uruchomieniowy (zawierający mikrokontroler) do postawionego zadania. | |
4,0 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia, zawiera elementy wprowadzone samodzielnie przez studenta. Brak dokumentacji projektu. Student potrafi dobrać zestaw uruchomieniowy (zawierający mikrokontroler) do postawionego zadania. Wykorzystuje interfejsy dostępne w zestawie uruchomieniowym do komunikacji opracowanego rozwiązania ze światem zewnętrznym. | |
4,5 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia, zawiera elementy wprowadzone samodzielnie przez studenta. Przygotowana podstawowa dokumentacja projektowa. Student potrafi dobrać zestaw uruchomieniowy (zawierający układ reprogramowalny) do postawionego zadania. | |
5,0 | Projekt wykonany zgodnie z wytycznymi prowadzącego zajęcia, zawiera elementy wprowadzone samodzielnie przez studenta. Przygotowana pełna dokumentacja projektowa. Student potrafi dobrać zestaw uruchomieniowy (zawierający układ reprogramowalny) do postawionego zadania. Wykorzystuje interfejsy dostępne w zestawie uruchomieniowym do komunikacji opracowanego rozwiązania ze światem zewnętrznym. | |
I_1A_O4/09_U03 Student potrafi wykorzystywać i stosować wiedzę teroretyczną dotyczącą programowania bliskosprzętowego i rozwiązywać postawione przed nim zadania inżynierskie, potrafi ocenić otrzymane wyniki badań laboratoryjnych, sporządzać sprawozdaia z wykonanych zadań. | 2,0 | Student nie przedstawia do oceny sprawozdań z przebiegu zajęć lub nie realizuje postawionych zadań w toku zajęć. |
3,0 | Wykonanie każdego zadanie laboratoryjnego potwierdzone jest sprawozdaniem, które powinno zostać przedstawione w terminie do 2 tygodni od dnia odbycia się zajęć. Student zna podstawowe reprezentacje liczb i potrafi wykonywać na nich operacje matematyczne. Zna i potrafi zaprezentować pojęcie nadmiaru. | |
3,5 | Wykonanie każdego zadanie laboratoryjnego potwierdzone jest sprawozdaniem, które powinno zostać przedstawione w terminie do 2 tygodni od dnia odbycia się zajęć. Student zna podstawowe reprezentacje liczb i potrafi wykonywać na nich operacje matematyczne. Zna i potrafi zaprezentować pojęcie nadmiaru. Zna i potrafi wykazać w programie zjawisko zakresu dla danej reprezentacji liczb. Potrafi aplikować obliczenia w reprezentacji stałoprzecinkowej. | |
4,0 | Wykonanie każdego zadanie laboratoryjnego potwierdzone jest sprawozdaniem, które powinno zostać przedstawione w terminie do 2 tygodni od dnia odbycia się zajęć. Student zna podstawowe reprezentacje liczb i potrafi wykonywać na nich operacje matematyczne. Zna i potrafi zaprezentować pojęcie nadmiaru i zakresu. Potrafi aplikować operacje matematyczne w formacie 16.16 i 32.32. | |
4,5 | Wykonanie każdego zadanie laboratoryjnego potwierdzone jest sprawozdaniem, które powinno zostać przedstawione w terminie do 2 tygodni od dnia odbycia się zajęć. Student zna podstawowe reprezentacje liczb i potrafi wykonywać na nich operacje matematyczne. Zna i potrafi zaprezentować pojęcie nadmiaru i zakresu. Potrafi aplikować operacje matematyczne w formacie 16.16 i 32.32. Potrafi stosować struktury upakowane. | |
5,0 | Wykonanie każdego zadanie laboratoryjnego potwierdzone jest sprawozdaniem, które powinno zostać przedstawione w terminie do 2 tygodni od dnia odbycia się zajęć. Student zna podstawowe reprezentacje liczb i potrafi wykonywać na nich operacje matematyczne. Zna i potrafi zaprezentować pojęcie nadmiaru i zakresu. Potrafi aplikować operacje matematyczne w formacie 16.16 i 32.32. Potrafi stosować struktury upakowane i dostęp wariantowy. |
Kryterium oceny - inne kompetencje społeczne i personalne
Efekt kształcenia | Ocena | Kryterium oceny |
---|---|---|
I_1A_O4/09_K01 Student realizując zadanie projektowe w zespole uzyskuje świadomość odpowiedzialności za wspólnie realizowane zadanie. | 2,0 | Student, nie dzieli się swoją wiedzą i umiejętnościami z pozostałymi członkami zespołu, nie wspiera pracy zespołu. |
3,0 | Student, pracując w zespole, wspiera pracę zespołu. | |
3,5 | Student, pracując w zespole, dzieli się swoją wiedzą i umiejętnościami z pozostałymi członkami zespołu, wspiera pracę zespołu. | |
4,0 | Student, pracując w zespole, dzieli się swoją wiedzą i umiejętnościami z pozostałymi członkami zespołu, aktywnie wspiera pracę zespołu. | |
4,5 | Student, pracując w zespole, dzieli się swoją wiedzą i umiejętnościami z pozostałymi członkami zespołu, aktywnie wspiera pracę zespołu. Powierzone zadanie realizuje w sposób odpowiedzialny. | |
5,0 | Student, pracując w zespole, dzieli się swoją wiedzą i umiejętnościami z pozostałymi członkami zespołu, aktywnie wspiera pracę zespołu. Powierzone zadanie realizuje w sposób odpowiedzialny i zgodnie z ustaleniami zespołu. | |
I_1A_O4/09_K02 Student realizując zadania laboratoryjne oraz projektowe rozumie potrzeby dokształcania się i dzielenia się wiedzą w dynamicznie rozwijającym się obszarze nauki, jaką jest informatyka. | 2,0 | Student, w trakcie realizacji zadania, nie sięga po literaturę podstawową przedmiotu, nie poszukuje dodatkowych źródeł informacji. |
3,0 | Student, w trakcie realizacji zadania, sięga po literaturę podstawową przedmiotu. | |
3,5 | Student, w trakcie realizacji zadania, poszukuje dodatkowych źródeł informacji dotyczących zadania. | |
4,0 | Student, w trakcie realizacji zadania, poszukuje dodatkowych źródeł informacji dotyczących zadania, wskazuje takie źródła informacji pozostałym członkom zespołu. | |
4,5 | Student, w trakcie realizacji zadania, poszukuje dodatkowych źródeł informacji dotyczących zadania, wskazuje takie źródła informacji pozostałym członkom zespołu oraz innym zespołom lub studentom. | |
5,0 | Student, w trakcie realizacji zadania, poszukuje dodatkowych źródeł informacji dotyczących zadania, wskazuje takie źródła informacji pozostałym członkom zespołu oraz innym zespołom lub studentom. Chętnie sięga po literaturę podstawową przedmiotu. |
Literatura podstawowa
- D. W. Lewis, Między asemblerem a językiem C. Podstawy oprogramowania wbudowanego., Read Me Eremis, Warszawa, 2004
- R. Love, Linux. Programowanie systemowe., Helion, Gliwice, 2008
- R. Hyde, Asembler. Sztuka programowania., Helion, Gliwice, 2010
Literatura dodatkowa
- V. Pirogow, Asembler. Podręcznik programisty., Helion, Gliwice, 2005
- K. Kaspersky, Optymalizacja kodu. Efektywne wykorzystanie pamięci., Read Me Eremis, Warszawa, 2003
- D. Bovet, Understanding the Linux Kernel., O’Reilly Media, San Francisco, 2005
- J. Corbet, A. Rubini, G. Kroah-Hartman, Linux Device Drivers., O'Reilly Media, San Francisco, 2005