Uczenie się kernel hacking i embedded development w domu? [zamknięte]

Zawsze pociągał mnie świat hakowania jądra i systemów wbudowanych.
Ma ktoś może dobre tutoriale (+łatwo dostępny sprzęt) na temat tego, jak zacząć się bawić z takimi rzeczami?
Coś w rodzaju zestawów do pisania sterowników itp, które pochodzą z dobrą dokumentacją i są niedrogie?

Dzięki!

Author: Pascal Thivent, 2008-09-13

6 answers

Jeśli jesteś zupełnie nowy w rozwoju jądra, sugerowałbym, aby nie zaczynać od rozwoju sprzętu i nie przechodzić do "tylko programowych" modułów jądra, takich jak pliki proc / sysfs lub dla bardziej złożonych przykładów rozwoju systemu plików / sieci, rozwijając się na uml/vmware/virtualbox/... maszyna więc rozbicie maszyny nie zaszkodzi tak bardzo :) do embedded development Kit możesz wybrać mały zestaw rozwojowy ARM lub małą maszynę Via C3/C4, lub dowolny stary komputer, który możesz spalić ze swoim homebrew USB / PCI / dowolne urządzenie.

Dobrym miejscem na początek jest prawdopodobnie Kernelnewbies.org - który zawiera wiele linków i przydatnych informacji dla programistów jądra, a także zawiera listę łatwych do wdrożenia zadań dla początkujących.

Niektóre książki do przeczytania:

Zrozumienie jądra Linuksa - Bardzo dobra Referencja opisująca budowę podsystemów jądra

Linux Device Drivers - jest napisany bardziej jak samouczek z dużą ilością przykładowy kod, skupiający się na uruchomieniu i wyjaśnieniu kluczowych aspektów jądra Linuksa. Wprowadza proces budowania i podstawy modułów jądra.

Linux Kernel Module Programming Guide - kilka materiałów wprowadzających

Jak sugerowano wcześniej, patrzenie na kod Linuksa jest zawsze dobrym pomysłem, zwłaszcza, że API jądra Linuksa często się zmienia ... LXR bardzo pomaga z bardzo ładnym interfejsem przeglądania - lxr.linux.no

To zrozumieć proces budowania Jądra, ten link może być pomocny:

Linux Kernel Makefiles (kbuild)

Na koniec przejrzyj Katalog dokumentacji dystrybucji źródłowej Jądra!

Oto kilka ciekawych ćwiczeń z klasy programistycznej jądra:

  • napisz moduł jądra, który tworzy plik / proc / jiffies raportujący bieżący czas w jiffies przy każdym dostępie do odczytu.
  • napisz moduł jądra podanie pliku proc /proc / sleep. Gdy aplikacja zapisuje kilka sekund jako tekst ASCII do tego pliku ("echo 3 > / proc / sleep"), powinna zablokować się na określoną ilość sekund. Dostęp do zapisu nie powinien mieć żadnego wpływu na zawartość pliku, tzn. przy dostępie do odczytu plik powinien wyglądać na pusty (patrz LDD3, ch. 6/7)
  • napisz plik proc, w którym możesz tymczasowo przechowywać tekst (używając echo "blah" > /proc/pipe) i pobrać go ponownie (cat /proc/pipe), wyczyszczając akta. Uważaj na problemy z synchronizacją.
  • zmodyfikuj przykładowy moduł pipe, aby zarejestrować się jako urządzenie znakowe / dev / pipe, dodaj dynamiczną alokację pamięci dla żądań zapisu.
  • napisz naprawdę prosty system plików.
 33
Author: VolkA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 14:38:26

Absolutem musi jestTa książka Rubiniego. (dostępne zarówno w wersji papierowej, jak i darmowej)

On daje implementacje kilku fałszywych sterowników, które nie wymagają, że masz inny sprzęt niż komputer. Tak więc dla rozpoczęcia prac nad jądrem jest to najprostszy sposób.

Jeśli chodzi o pracę embedded, polecam zakup jednego z wielu dostępnych komputerów SBC (single board computers). Istnieje wiele z nich, które są oparte na procesorach x86, zwykle z interfejsami PC/104 (elektrycznie PC/104 jest identyczny ze standardem magistrali ISA, ale oparty na złączach, które można układać w stosy, a nie na złączach krawędziowych - bardzo łatwy do interfejsu Niestandardowy sprzęt) {]}

Zazwyczaj mają złącza vga, które ułatwiają debugowanie.

 5
Author: Andrew Edgecombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 08:06:17

Dla wbudowanego Linuksa, prosty Router Linksys WRT54G, który można kupić wszędzie, jest platformą programistyczną samą w sobie http://en.wikipedia.org/wiki/Linksys_WRT54G_series :

WRT54G jest pierwszym urządzeniem sieciowym na poziomie konsumenckim, którego kod źródłowy został wydany w celu spełnienia zobowiązań GNU GPL. Pozwala to programistom modyfikować oprogramowanie układowe, aby zmienić lub dodać funkcjonalność do urządzenia. Kilka projektów firm trzecich Udostępnij społeczeństwu ulepszone oprogramowanie układowe dla WRT54G.

Próbowałem zainstalować na nim firmware OpenWrt i DD-WRT. Możesz je sprawdzić jako punkt wyjścia do hakowania na taniej platformie.

 3
Author: Readonly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-13 20:04:50

Na początek, najlepszym sposobem jest odczytanie dużej ilości kodu. Ponieważ Linux jest Open Source, znajdziesz dziesiątki sterowników. Znajdź taki, który działa w jakiś sposób, jak to, co chcesz napisać. Znajdziesz tu jakiś przyzwoity i stosunkowo łatwy do zrozumienia kod (urządzenie loopback, ROM fs, itp.)

Możesz również użyć lxr.linux.no , czyli kod Linuksa. Jeśli musisz dowiedzieć się, jak coś działa i musisz zajrzeć do kodu, jest to dobre i łatwe sposób.

Jest też książka O ' Reilly (rozumiejąc jądro Linuksa, wydanie 3 dotyczy jąder 2.6) lub jeśli chcesz coś za darmo, możesz użyć Advanced Linux Programming book (http://www.advancedlinuxprogramming.com/). Istnieje również wiele specyficznych dokumentacji dotyczących systemów plików, sieci itp.

 3
Author: terminus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-23 21:01:59

Niektóre rzeczy do przygotowania:

  • będziesz zestawiał krzyżowo. Wbudowane urządzenie będzie używać procesora MIPS, PowerPC lub ARM, ale nie będzie miało wystarczającej mocy procesora, pamięci lub pamięci masowej, aby skompilować własne jądro w rozsądnym czasie.
  • [3]}wbudowany system często używa portu szeregowego jako konsoli, a w celu obniżenia kosztów zwykle nie ma złącza lutowanego na płytach produkcyjnych. Debugowanie jądra jest bardzo trudne, chyba że można lutować na złączu portu szeregowego, nie będziesz miał zbyt wielu informacji o tym, co poszło nie tak.

Linksys NSLU2 to tani sposób na pracę z prawdziwym wbudowanym systemem i posiada port USB do dodawania urządzeń peryferyjnych. Można również użyć dowolnego z wielu bezprzewodowych punktów dostępowych, zobacz stronę kompatybilności openwrt . Należy pamiętać, że obecne modele Linksys WRT54G, które znajdziesz w sklepach, nie mogą być już używane z Linuksem: mają mniej pamięci RAM i Flash, aby obniżyć koszty. Cisco / Linksys używa teraz vxWorks na WRT54G, z mniejszą pamięcią.

Jeśli naprawdę chcesz się do tego zabrać, zestawy ewaluacyjne dla Wbudowanych procesorów zaczynają się od kilkuset dolarów amerykańskich. Polecam nie wydawać na to pieniędzy, chyba że potrzebujesz go profesjonalnie do pracy lub umowy konsultingowej.

 1
Author: DGentry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-14 04:12:51

Jestem całkowicie początkujący w kernel hacking :) postanowiłem kupić dwie książki "Linux program Development: a guide with exercises" i "Writing Linux Device Drivers: a guide with exercises" są one bardzo jasno napisane i stanowią dobrą bazę do dalszej nauki.

 1
Author: ris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-31 10:31:56