È possibile eseguire Raspberry Pi 3 con un kernel a 64 bit e spazio utente a 32 bit?


8

Ho appena messo le mani su un Raspberry Pi 3 e vorrei iniziare a sperimentarlo, specialmente per quanto riguarda il set di istruzioni a 64 bit.

Sono a conoscenza dei pro e dei contro del set di istruzioni a 32 bit rispetto a 64 bit, quindi attenersi alla domanda originale: è possibile eseguire un kernel a 64 bit utilizzando le attuali applicazioni dello spazio utente a 32 bit ?

È sufficiente compilare il kernel con un compilatore a 64 bit e caricare l'immagine su RasPi o ci sono altri passaggi di cui dovrei essere a conoscenza? Potresti darmi una panoramica di alto livello di cosa dovrei guardare come roadmap? Ad esempio, i moduli / driver che potrebbero / si romperanno se installo il kernel a 64 bit. Devo ricompilare tutto?

Navigando in Internet so che è possibile per alcune altre classi di dispositivi, e che di solito eseguire questa configurazione "ibrida" romperebbe i gestori dei pacchetti, ma non sono preoccupato dalla gestibilità in questo momento. Quindi, anche se rompe i gestori di pacchetti ed è un inferno da mantenere, vorrei capire come è fatto.

Tieni presente che sto ancora imparando a compilare il kernel, ma ho ancora esperienza nello sviluppo di applicazioni C / C ++ da molto tempo. Questo è il mio progetto per animali domestici per avere una profonda conoscenza dell'architettura linux e degli interni del kernel.


La dragonboard 410c utilizza lo stesso processore arm64 bit e ha un ubuntu personalizzato da Linaro.

Risposte:


3

È possibile eseguire Raspberry Pi 3 con un kernel a 64 bit e spazio utente a 32 bit?

Sì. Alcune immagini predefinite hanno questo pronto per andare:

di solito eseguire questa configurazione "ibrida" romperebbe i gestori di pacchetti, ma non sono preoccupato dalla gestibilità in questo momento. Quindi, anche se rompe i gestori di pacchetti ed è un inferno da mantenere

Non è pratico usare multiarch con Raspbian poiché non ha pacchetti upstream a 64 bit e il parente a 64 bit più vicino (Debian arm64) ha versioni di pacchetto incompatibili. Per eseguire programmi a 64 bit in Raspbian è possibile utilizzare binari statici, container (LXC, systemd-nspawn) o chroot [1] . Tale isolamento evita i tipici conflitti di pacchetto inerenti a mutiarch.

Non è necessario ricompilare nulla perché sono immediatamente disponibili i file binari per tutto quanto sopra (userland Raspbian a 32 bit, kernel a 64 bit, pacchetti Debian arm64 userland).

Ad esempio, i moduli / driver che potrebbero / si romperanno se installo il kernel a 64 bit.

Al momento della stesura della fotocamera SoC, la decodifica video accelerata con MMAL e il supporto USB ad alta velocità (tramite FIQ) sono noti per essere rotti sotto i kernel Raspberry Pi a 64 bit.

[1] Vedere il sistema operativo a 64 bit su Raspberry Pi 4 per istruzioni su come creare un tale chroot.


2

Certo, è possibile. I sistemi operativi a 64 bit lo fanno sempre *. Succede quando si utilizza un sistema operativo a 64 bit e si apre un'app a 32 bit (ovvero un'applicazione per spazio utente a 32 bit).

Ma a volte, potrebbero esserci problemi con le librerie / dipendenze. Una volta ho riscontrato un errore su un PC , qualcosa in merito wrong ELF class. Risolto installando la libreria appropriata a 32 bit ia32-libs.

Non sono sicuro di come si comporterebbe su una macchina ARM poiché non esiste un kernel ufficiale a 64 bit per il Pi con cui posso giocare (ancora).

Inoltre, non si compila semplicemente il kernel con un compilatore a 64 bit per caricarlo sul Pi. Se fosse così semplice, avremmo già eseguito Pi 3 con un kernel a 64 bit.


+1 Windows lo rende molto evidente con la divisione dei file di programma. Le applicazioni a 64 bit vengono archiviate C:\Program Filese le applicazioni a 32 bit vengono archiviate C:\Program Files (x86).
Jacobm001

1
@ Jacobm001 C'è una differenza più sottile con Windows. In Linux, erano semplicemente necessarie le librerie a 32 bit appropriate. Per Windows, ci sono tecnicamente due versioni di Windows installate sul tuo PC: la versione a 32 bit, in cui è memorizzato SysWOW64, e quella a 64 bit, in cui è archiviato system32. Windows identifica l'eseguibile e fa in modo che l'applicazione a 32 bit vede SysWOW64come system32. Lo stesso succede con Program Filese il registro. Le app a 32 bit vengono visualizzate C:\Program Files (x86)come semplici, C:\Program Filesma tutte le modifiche vengono visualizzate C:\Program Files (x86).
PNDA

1
@ Jacobm001 Mi diverto alle feste.
PNDA

2

Sono necessari entrambi i set di librerie e entrambe le architetture compilate con le librerie giuste, quindi 2 ambienti di compilazione. Cerca multi arch e il tuo bsse preferito per ottenere i puntatori. Piace

https://wiki.debian.org/MultiarchCrossToolchainBuild

Quindi dovresti fare qualcosa del genere ma nello spazio Rasbian. Quindi costruendo un kernel arm64 e armhf user land ed entrambi i set di librerie correttamente collegati per ciascuno.

Qui puoi vedere qualcuno che lo fa su una scheda diversa:

https://groups.google.com/forum/#!topic/linux.debian.ports.arm/ankucgztcI8

E vedi le loro esperienze.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.