Uspelo jim je zagnati Linux na emulatorju RISC-V na VRChatu

Pred nekaj dnevi so bili objavljeni rezultati poskusa organizacija, ki temelji na uvedbi Jedro Linuxa v 3D navideznem prostoru spletne igre za več igralcev.

Ta poskus To je bilo storjeno na VRChatu, ki omogoča nalaganje 3D modelov z lastnimi senčili. Za uresničitev zamišljene zamisli je bil ustvarjen emulator, ki temelji na arhitekturi RISC-V, ki se izvaja na strani grafičnega procesorja v obliki senčnika pikslov.

O projektu

Emulator temelji na izvedbi v jeziku C, pri ustvarjanju pa je bil uporabljen razvoj minimalističnega emulatorja riscv-rja, ki je nato razvit v jeziku Rust. Pripravljena koda C je prevedena v senčilo pikslov v jeziku HLSL, primerno za nalaganje v VRChat.

Emulator zagotavlja popolno podporo za arhitekturo nabora ukazov rv32imasu, pomnilniško krmilno enoto SV32 in minimalni nabor zunanjih naprav (UART in časovnik). Pripravljene zmogljivosti zadostujejo za nalaganje jedra Linuxa 5.13.5 in osnovnega okolja ukazne vrstice BusyBox, s katerim lahko komunicirate neposredno iz navideznega sveta VRChat.

Približno marca 2021 sem se odločil napisati emulator, ki bi lahko v VRChatu izvajal polno jedro Linuxa. Zaradi lastnih omejitev te platforme je moralo biti izbrano orodje senčnik. Po nekaj mesecih dela sem s ponosom predstavil prvi emulator CPU / SoC na svetu RISC-V (ki ga poznam) v senčniku slikovnih pik HLSL, ki lahko deluje do 250 kHz (na 2080 Ti) in zaženite Linux 5.13.5 s podporo MMU.

Emulator je implementiran v senčniku v obliki lastne dinamične teksture (Unity Custom Render Texture), ki jo dopolnjujejo skripti Udon za VRChat, ki se uporabljajo za nadzor emulatorja med izvajanjem.

Vsebina glavnega pomnilnika in stanje procesorja emuliranega sistema se shranita kot tekstura velikosti 2048 × 2048 slikovnih pik, s čimer deluje emulirani procesor pri 250 kHz. Poleg Linuxa lahko Micropython zaženete tudi v emulatorju.

Za zagon Linuxa sem mislil, da potrebujemo vsaj 32 MiB glavnega pomnilnika (RAM), vendar bodimo varni in naredimo 64 - razlika v zmogljivostih ne bo velika in mora biti dovolj VRAM -a.

Sprva je bila glavna težava pri delovanju takta. To pomeni, koliko ciklov procesorja je mogoče izvesti v enem okvirju.

Za organizacijo shranjevanja podatkov vztrajen s podporo pri branju in pisanju, uporabljen je trik, povezan z uporabo predmeta Camera, ki je povezan s pravokotnim območjem ustvari senčnik in usmeri izhod upodobljene teksture na vhod senčnika. Zato Vsak piksel, zapisan med izvajanjem senčila pikslov, je mogoče prebrati z obdelavo naslednjega okvirja.

Ko se uporabljajo senčniki slikovnih pik, se vzporedno sproži ločen primerek senčnika za vsako slikovno piko v teksturi.

Ta funkcija močno otežuje izvajanje in zahteva ločeno usklajevanje stanja celotnega emuliranega sistema in primerjavo položaja obdelane slikovne pike s stanjem CPU -ja ali RAM -a emuliranega sistema, kodiranega v njem (vsak piksel lahko kodira 128 bitov informacije).

V tem primeru koda senčnika zahteva vključitev velikega števila preverjanj, da se poenostavi izvedba katere je bil uporabljen predprocesor perl perlpp.

Za tiste, ki so zanimajo specifikacije omenjeno je, da:

  • koda je na GitHubu
  • 64 MiB RAM -a minus stanje procesorja je shranjeno v celoštevilčni teksturi velikosti 2048 × 2048 slikovnih pik (128 bpp)
  • Unity tekstura upodabljanja po meri z zamenjavo medpomnilnika omogoča kodiranje / dekodiranje stanja med okvirji
  • senzor pikslov se uporablja za emulacijo, saj računala in senčnikov UAV VRChat ne podpira

Končno če vas zanima več o tem, lahko preverite podrobnosti V naslednji povezavi.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.