Emulator konsoli NES w systemie Linux na komputerze SoMLabs VisonSOM

Środowisko kompilacji jądra Linux oraz Device Tree

Wraz z obrazem systemu Debian, firma SoMLabs dostarcza użytkownikowi wygodne środowisko konfiguracji i kompilacji jądra systemu oraz plików Device Tree. Środowisko to zostało zbudowane w oparciu o narzędzia Qemu oraz chroot, co pozwala na uruchomienie na komputerze PC (np. x86) nienatywnych plików wykonywalnych (np. dla architektury ARM) w standardowy dla plików natywnych sposób, tj. ./program. Do poprawnego działania środowiska w dystrybucji Ubuntu, niezbędna jest uprzednia instalacja pakietów qemu, binfmt-support oraz qemu-user-static:

Pobranie, rozpakowanie i uruchomienie (w tym wykonanie operacji chroot zmieniającej katalog główny) kompletnego środowiska:

Po uruchomieniu skryptu chtoolchain, źródła systemu Linux są dostępne w katalogu /home/developer/source/kernel/linux-rel_imx_4.1.15_2.1.0_ga. Dla uproszczenia dalszego opisu, przejdźmy zatem do katalogu z kodem źródłowym:

W kolejnym kroku, do katalogu arch/arm/configs należy skopiować domyślną konfigurację jądra (plik visionsom-6ull-linux_defconfig) udostępnioną przez producenta płytki VisionSOM:

W chwili tworzenia niniejszego artykułu, opis Device Tree (w postaci pliku arch/arm/boot/dts/somlabs-visionsom-6ull.dts) nie zawierał pełnego wsparcia dla ekranu LCD-TFT. Aby poprawnie uruchomić wyświetlacz, niezbędne jest pobranie i zaaplikowanie dodatkowej łatki:

W tak przygotowanym środowisku, konfiguracja i kompilacja jądra oraz opisu Device Tree może zostać zrealizowana za pomocą następujących poleceń:

Pliki wynikowe powyższych kompilacji, tj.:

  • arch/arm/boot/zImage
  • arch/arm/boot/dts/somlabs-visionsom-6ull.dtb

powinny zostać skopiowane do katalogu /boot na karcie SD z obrazem systemu.

Instalacja środowiska Xfce oraz emulatora Fceux

W domyślnej konfiguracji, dostarczony przez producenta modułu obraz z dystrybucją Debian nie posiada zainstalowanego środowiska graficznego. Dzięki wykorzystaniu wbudowanego w system menadżera pakietów, instalacja wybranego środowiska ogranicza się do dwóch prostych poleceń w konsoli systemu (w odróżnieniu od np. Buildroota, gdzie wymagana byłaby rekonfiguracja i ponowne przebudowanie obrazu systemu). Instalacja lekkiego środowiska graficznego Xfce:

Po podłączeniu klawiatury i myszki do portów USB (urządzenia te przydadzą się do pierwszych testów emulatora – zanim w kolejnych podpunktach przystąpimy do konfiguracji dedykowanych kontrolerów) oraz ponownym uruchomieniu komputera, urządzenie jest gotowe do pracy. Uruchomione środowisko Xfce (przy rozdzielczości ekranu 800×480) przedstawiono na rysunku 2.

Rys. 2. Środowisko graficzne Xfce uruchomione na module VisionSOM

Również z wykorzystaniem narzędzia apt-get, zainstalujmy w systemie jeden z dostępnych emulatorów konsoli NES – oprogramowanie Fceux (nie jest to oczywiście jedyny dostępny w repozytoriach dystrybucji Ubuntu, emulator konsoli Famicon/NES):

Po zakończonym etapie instalacji pakietu, w sekcji Games środowiska Xfce, zostanie dodany nowy wpis pozwalający na uruchomienie emulatora bezpośrednio z interfejsu graficznego – rysunek 3.

Rys. 3. Zainstalowany emulator konsoli Famicon/NES – pakiet Fceux

Po uruchomieniu emulatora należy skonfigurować dołączoną klawiaturę, wybierając z górnej belki programu opcję Fceux→Options→Gamepad Config. Wczytanie gry jest realizowane poprzez wybranie opcji Fceux→File→Open ROM i wskazanie pliku *.rom. Ze względu na aspekty prawne (emulacja sprzętu jest w pełni legalna – wątpliwości prawne może budzić wykorzystywanie plików ROM, nawet jeśli jesteśmy w posiadaniu oryginalnego kartridża z grą), autor nie umieścił w tekście bezpośrednich odnośników do źródeł.

O autorze

Łukasz Skalski
Łukasz Skalski - absolwent Politechniki Gdańskiej, miłośnik FLOSS, autor książki "Linux. Podstawy i aplikacje dla systemów embedded" oraz szeregu artykułów dotyczących programowania systemów wbudowanych. Zawodowo związany z firmą Samsung. Wszystkie wolne chwile poświęca projektowaniu i programowaniu urządzeń wyposażonych w mikroprocesory 8-/16- i 32-bitowe. Szczególnym zainteresowaniem obejmuje tematykę systemu Linux w aplikacjach na urządzenia embedded.