Rularea aplicației x86 Windows pe un Raspberry Pi 3B (Raspberry Pi, Kernel, Windows, Memorie, Qemu)

hjf a intrebat.
a intrebat.

Am urmat acest ghid pentru a instala QEMU într-un chroot și pot să execut binare Linux x86: https://stackoverflow.com/questions/51895452/qemu-debian-x86-on-raspberrypi

În continuare, am încercat să instalez WINE și Xvfb. Cu toate acestea, rularea Xvfb dă o singură eroare:

Bus error

Verificând dmesg, găsesc următoarea eroare de fiecare dată când apare eroarea Bus error:

[  374.559845] Unhandled prefetch abort: unknown 1 (0x001) at 0x604e15a6

Suspectez că această eroare se datorează unui fel de setare de memorie pe kernelul gazdă. Mai este ceva ce trebuie să activez?

În ceea ce privește contextul suplimentar: aplicația în sine este o aplicație Windows construită cu Delphi. Aceasta ia mai multe imagini, le procesează și scrie niște fișiere. Poate fi rulată în modul batch, dar tot are nevoie de o fereastră în care să se deseneze, iar eu trebuie să o configurez manual la prima instalare, așa că voi avea nevoie de ceva de genul x11vnc pentru a accesa aplicația prima dată.

EDIT: Eroarea se întâmplă și atunci când rulează Wine fără server X – m-am gândit că aș putea rula X pe „gazdă” și aplicația să scrie pe un socket X.

2 răspunsuri
Dmitri Grigoriev

Am rulat câteva aplicații Delphi Win32 pe un Pi folosind Exagear Desktop și Wine. În unele dintre ele nu am reușit să fac sunetul să funcționeze (AFAIK depinde de componentele de sunet VCL/CLX exacte pe care le-au folosit autorii). Problema este că Exagear Desktop este întrerupt și nu se mai vinde, așa că dacă nu îl aveți nu îl veți mai avea acum.

AFAIK cea mai proeminentă opțiune acum este de a utiliza qemu-static+winelib, , din păcate, nu știu prea multe despre ea. Imaginea de precompilare pare să fie și ea întreruptă, dar abordarea în sine s-a dovedit a funcționa.

Vyacheslav

Raspberry Pi utilizează procesoare de tip ARM și, în general, ar trebui să înțelegeți că instrucțiunile x86 și arm sunt au multe diferențe de arhitectură. ARM este o arhitectură RISC, iar x86 este o arhitectură CISC, astfel încât ar putea exista unele condiții de cursă din cauza unui alt mod de paralelizare a instrucțiunilor, precum și a protecției și gestionării memoriei. Din informațiile dvs., aplicația este construită cu Delphi, așa că ar fi mai bine să căutați o modalitate de a o compila într-o aplicație de consolă bazată pe ARM pentru Linux (poate platforma Android) sau ceva similar, apoi să încercați să o rulați.