2011-12-23 23 views
6

Chcę przesłać jądro xnu do architektury ARM, z ostatecznym celem jest możliwość uruchomienia pełnego jądra wewnątrz Qemu. Chociaż zdaję sobie sprawę, że jest to bardzo trudne zadanie, nadal chcę to zrobić.Przenoszenie jądra do innej architektury?

O ile wiem, masz za zadanie napisać punkt wejścia do jądra (osfmk/arm/start.s) gdzie można zrobić ogólny inicjalizacji (MMU i PlatformExpert), po którym podsystemy kext/IOKit mogą być uruchamiane i obciążenie CPU konkretnych rozszerzeń (pułapki, GPIO, zegar), które są albo prelinkowane do pliku binarnego, albo ładowane przez bootloader (, ponieważ jądro nie może wchodzić w interakcje z systemem plików, ponieważ rozszerzenia NAND nie są jeszcze dostępne).

Chociaż mam ogólne pojęcie o tym, jak pracy procesorów ARM, ja nawet nie wiem od czego zacząć z portu w xnu, ponieważ nie jestem do końca pewien, jak:

  • Czy niska debugowanie poziomu (ponieważ funkcje debugowania jądra są niedostępne na początku uruchamiania).
  • Zintegruj gałąź ARM z resztą drzewa źródłowego jądra (np. Upewniając się, że działa w trybie osfmk/kern).
  • Utwórz rozsądne środowisko do uruchamiania jądra niezależnego od platformy (machine_startup());
  • Napraw kod specyficzny dla platformy wewnątrz głównego kodu jądra (większość kodu platformy jest ograniczona do osfmk/platform_name, ale część z nich musi być zintegrowana z osfmk/kern i innymi).

Czy są jakieś przyzwoite prowadnice nad przeniesieniem xnu (lub przynajmniej Mach) jądra na różnych platformach, podobnie jak istnieją prowadnice Linux?

+1

+1 Cieszę się z Twojej odwagi. Ktoś musi ciężko pracować.Nie wiem nic na ten temat, ale przypuszczam, że jeśli to uruchomisz, to prawdopodobnie będziesz pisał przewodnik debugowania! Kai Kaha bracie. –

Odpowiedz

2

nie może dać odpowiedź, ale kilka wskazówek:

„wielki człowiek” robić tego rodzaju pracy w systemie z dołączonym specjalnym sprzętem, który umożliwia procesorowi być jedno-cykliczna, rejestry zbadane itd. Mogą wykonywać wiele pracy na emulatorze, który ma te same udogodnienia. Konfiguracja sprzętu jest prawdopodobnie poza twoimi możliwościami do zbudowania (i nieco droga do kupienia), ale emulator jest całkowicie wykonalny (i jak Gates i Allen zaczęli na Altair BASIC - gdyby Allen nie napisał emulatora Gatesa nadal gra w gry wideo na Harvardzie).

Po pełnym debuggera, jeśli masz dołączony dowolny rodzaj znaku, możesz osadzić instrukcje w debugowanym kodzie, aby pisać znaki na wyświetlaczu w miarę postępu kodu. Ścieżka A może napisać "A" w następnej lokalizacji (indeks trzymany gdzieś w zarezerwowanym słowie pamięci), podczas gdy ścieżka B będzie pisać "B" itp. Bardzo prymitywna, ale czasami wystarcza, aby przejść przez małe projekty.

Sądzę, że zaleciłbym najpierw napisać emulator. To dobry sposób na poznanie procesora.

(chodzi o zintegrowanie rzeczy, zawsze po prostu powiedzieć: „Hej, Jeremy! Integracja to dla mnie, dobrze?”)

1

Napotkacie trochę wyzwanie nie cały kod źródłowy jest dostępny . Część kodu źródłowego eksperta Platformy jest dostępna jako część źródeł xnu, jednak plik com.apple.driver.AppleACPIPlatform.kext nie jest dostępny.

Powiązane problemy