Pracowałem we wbudowanym systemie operacyjnym, takim jak uCOS, ThreadX. Chociaż kodowałem aplikacje w systemie Linux, teraz planuję rozpocząć naukę jądra systemu Linux. Mam kilka pytań dotyczących środowiska.
Która z najlepszych dystrybucji zawiera łatwe w użyciu narzędzia do programowania jądra? (do tej pory korzystałem z RHEL i Fedory. Chociaż dobrze się z nimi czuję, wygląda na to, że Ubuntu ma wbudowane skrypty do łatwej kompilacji jądra
make_kpkg
, itp.)Czy możesz opisać najlepszą konfigurację do debugowania jądra? Podczas debugowania innych wbudowanych systemów operacyjnych użyłem portu szeregowego do zrzucenia postępu, JTAG itp. Z jakiego rodzaju konfiguracji korzystają deweloperzy jądra Linuksa? (Czy mój testowany komputer z portem szeregowym wystarczy na moje potrzeby? Jeśli tak, jak skonfigurować jądro, aby zrzut na port szeregowy?) Planuję przekierować komunikaty jądra do konsoli szeregowej, które zostaną odczytane na moim laptopie.
Jakie narzędzie jest najlepsze do debugowania i śledzenia kodu jądra? Jak wspomniano wcześniej, czy konsola szeregowa jest jedynym sposobem? Czy istnieje jakiś interfejs IDE / JTAG na PC?
źródło
Odpowiedzi:
Moim osobistym gustem w tworzeniu jądra Linux jest Debian. Teraz twoje punkty:
Jak zapewne się domyślacie, Ubuntu nie wprowadza niczego nowego do jądra, aby ułatwić rozwój, poza tym, co jest już dostępne w Debianie. Na przykład make_kpkg jest funkcją Debiana, a nie Ubuntu. Oto kilka linków ułatwiających rozpoczęcie typowych zadań programistycznych jądra Linux w Debianie:
Najłatwiejszym sposobem debugowania jądra jest użycie QEMU i GDB. Kilka linków na początek:
Należy jednak pamiętać, że ta metoda nie jest wykonalna w przypadku niektórych scenariuszy, takich jak debugowanie określonych problemów sprzętowych i takich, dla których lepiej byłoby użyć fizycznego debugowania szeregowego i prawdziwego sprzętu. W tym celu możesz użyć KGDB (działa również przy użyciu Ethernetu). KDB to również dobry wybór. A tak przy okazji, zarówno KGDB, jak i KDB zostały połączone w jądro Linuksa. Więcej o tych dwóch tutaj . Inną fajną metodą, która działa cudownie w przypadku problemów niezwiązanych ze sprzętem, jest użycie jądra Linux w trybie użytkownika . Uruchamianie jądra w trybie użytkownika, podobnie jak każdy inny proces, umożliwia debugowanie go tak jak każdego innego programu ( przykłady ). Więcej na temat Linuksa w trybie użytkownikaTutaj . UML jest częścią jądra Linuksa od wersji 2.6.0, więc możesz zbudować każdą oficjalną wersję jądra powyżej tej wersji w trybie UML, wykonując następujące kroki .
Patrz punkt 2. Niestety nie ma tutaj najlepszej najlepszej metody, ponieważ każde narzędzie / metoda ma swoje zalety i wady.
źródło
Jeśli tworzysz platformę wbudowaną, która nie jest oparta na sprzęcie i386, musisz dokonać kompilacji krzyżowej. Projekt Emdebian zapewnia łańcuchy narzędzi do opracowania wielu architektur (ARM, m68k, MIPS i więcej) na komputerach PC (i386 lub amd64). Oznacza to, że pod Debianem możesz po prostu dodać repozytoria i apt-get zainstalować łańcuch narzędzi dla wybranych celów.
źródło
Sondy JTAG istnieją, ale są one dość drogie (a firmy je budujące mają umowy na wyłączność). Najlepszym sposobem debugowania kodu jądra jest uruchomienie go w kvm lub qemu z gdbserver w emulacji.
źródło
Zasadniczo każda główna dystrybucja powinna do tego dobrze działać (używają własnej dystrybucji do hakowania). Używaj czegokolwiek wygodniejszego.
źródło