Raspberry Pi 3 i 64-bitowe jądro, różnice między armv7 i armv8

11

Czy jest jakieś 64-bitowe jądro dla Raspberry Pi 3? Rozejrzałem się i ze źródeł sprawdzam oficjalną stronę i tam wymienione są następujące jądra:

  1. NOOBS - to jest instalator, sam system operacyjny nie ma, prawda?
  2. Rapsbian - tylko jedno pobranie, więc zakładam 32-bitowy kompatybilny ze wszystkimi wersjami Pi
  3. Ubuntu MATE - aarch32 (ARMv7)
  4. Ubuntu Core Ubuntu - wydaje się tylko 32-bitowy
  5. OSMC - te same pliki do pobrania dla „Raspberry Pi 2/3”, więc 32-bitowe
  6. LibreELEC - kombinowana wersja dla 2 i 3, więc tylko wersja 32-bitowa
  7. PiNet - nie wiem co to jest, ale wątpię w 64-bit
  8. RISC OS - nie wygląda jak Linux
  9. Stacja pogodowa - tak, po prostu nie

Więc nie wydaje się, że dostępne jest oficjalne 64-bitowe jądro? Czy jest jakiś nieoficjalny? Czy mogę po prostu skompilować jeden i oczekiwać, że zadziała (chyba nie, ale nie zaszkodzi zapytać ...)? Czy ktoś przynajmniej nad tym pracuje? Chciałbym mieć dostęp do natywnych liczb 64-bitowych.

Z drugiej strony, jak duża jest różnica między armv7 a armv8? Gentoo oferuje pakiety archiwalne trzeciego poziomu dla armv7. Czy to zadziała na Pi 3, który jest armv8?

szary Wilk
źródło
„Gentoo oferuje pakiety archiwalne trzeciego poziomu dla armv7. Czy to zadziała na Pi 3, który jest armv8?” Znowu nie, nie bez hakowania, ale ponieważ jądro pi nie jest dostępne, nie dlatego, że ARMv7 nie działa na ARMv8 (obecnie Pi 2 i 3 używają tego samego jądra).
goldilocks
1
Przewodnik po Gentoo kontynuuje kompilowanie kodu źródłowego jądra Pi z github, więc zakładam, że to wyjaśniają. Byłem tylko zainteresowany, czy mogę użyć wersji ARMv7 na płycie ARMv8, wydaje się, że tak
graywolf

Odpowiedzi:

7

Z tego, co niewiele znalazłem, nie ma nic stabilnego i oficjalnego. Niektórym udało się je skompilować, ale występują problemy ze sterownikami / modułami.

Te linki mogą Cię zainteresować w tym temacie.

Wejście w stan wykonania aarch64

Raspbian Jessie (64-bitowy) dla RPi3?

Dan V.
źródło
+1. Bardzo chciałbym eksperymentować z 64-bitowym systemem operacyjnym. Mógłbym spróbować załatać i skompilować bardzo lekki system operacyjny dla Pi (lekki, aby ułatwić)
PNDA
@ PandaLion98 Byłbym bardzo zainteresowany tym
Dan V
11

Ogólny konsensus jest taki, że 64-bitowe jądro nie zwiększy wydajności Pi, ponieważ jedynymi 2 rzeczywistymi zaletami 64-bitowego jądra są:

  1. większe wartości int, które i tak można ręcznie określić w 32-bitowym jądrze
  2. możliwość posiadania więcej niż 4 Gb pamięci RAM, co jest bezużyteczne w przypadku Pi, ponieważ pamięć RAM jest wbudowana i nie można jej rozszerzać.

Ponadto 64-bitowe vs 32-bitowe na układach ARM nie jest dużym skokiem wydajności w porównaniu z układami x86, ponieważ układy x86 miały znaczące ulepszenia architektury, gdy przeszły do ​​64-bitowych, podczas gdy układy ARM były już dość solidne w wersjach 32-bitowych.

Zapraszamy do eksperymentowania! :)

tlhIngan
źródło
2
OP nie pytało o wydajność, ale o dostępność. Osobiście szukam 64-bitowej dystrybucji dla Pi, ponieważ najnowsza MongoDB zrzuciła obsługę 32-bitową.
Andrejs Cainikovs,
Ponadto kompilacje aarch64 zwykle mniej zależą od „bibliotek dostawców zamkniętego źródła” i odblokowują potencjał wersji 8, zamiast utrzymywać cię w możliwościach wersji 7.
earthmeLon
Systemy 64-bitowe nie mają problemu
od
7

Jedną z zalet 64-bitowej pamięci, o której wszyscy zapominają, jest to, że ARMv8 ma znacznie więcej rejestrów niż ARMv7. Ma także znacznie lepszą wydajność zmiennoprzecinkową.

To nie tylko dodatek do ARMv7, to zupełnie nowa architektura.

Chris
źródło
4

Znalazłem znaczący wzrost wydajności kompilacji 64-bitowych w porównaniu z 32-bitowymi po uruchomieniu testów porównawczych Androida na tablecie przy użyciu ARM Cortex-A53 1,3 GHz. Najnowsze są kompilowane za pomocą Eclipse i w czasie wykonywania wykrywają, czy procesor to ARM, Intel czy MIPS, a następnie architektura 32- lub 64-bitowa.

W poprzednich kompilacjach Windows dla procesorów Intel, 64-bitowa praca może być znacznie szybsza niż 32-bitowa dzięki zastosowaniu instrukcji SIMD typu SSE. Jednak późniejszy 32-bitowy kompilator z wsteczną niekompatybilnością wytwarza praktycznie ten sam kod i podobną prędkość.

Szczegóły testów porównawczych dla Androida przedstawiono poniżej, pokazując 32-bitowe i 64-bitowe wyniki z A53 i przez 1,2 GHz Cortex-A9. Na końcu jest kilka list kodów asemblera, które identyfikują różne używane instrukcje. Poniżej znajduje się podsumowanie wyników.

http://www.roylongbottom.org.uk/android%2064%20bit%20benchmarks.htm#anchorStart

Whetstone Benchmark - (małe pętle) podobna wydajność, na ogólną ocenę wpływ miała kompilacja testu z wykorzystaniem funkcji EXP.

Dhrystone Benchmark - najnowsze MIPS / MHz 1,09 32 bity, 1,96 64 bity, 1,10 A9 - może 64 bity ponad zoptymalizowane.

Linpack Benchmark - (N = 100) 64-bitowy DP 1,97 x szybszy, SP 2,67 x - patrz kod zestawu.

Pętle Livermore - (24 jądra) średnio 1,5 raza szybciej, zakres 0,8 do 7,9 razy

Testy pamięci podręcznej i pamięci RAM L1 / L2

MemSpeed ​​- obliczenia zmiennoprzecinkowe i całkowite - zyskuje pamięci podręczne 2,2 x, RAM 1,5 x.

BusSpeed ​​- całkowite przesyłanie danych i odczyt impulsowy - przesyłanie strumieniowe 2,0 x L1, 1,5 x L2, 1,25 x RAM - impulsy 2,6 x L1, podobne L2 i RAM.

RandMem - szeregowy i losowy odczyt i odczyt / zapis z tej samej złożonej struktury indeksowania - generalnie trochę szybszy podczas odczytu, ale podobny / wolniejszy odczyt / zapis.

Następnie istnieją wersje MP powyższej wersji i próby zmierzenia maksymalnego SP MFLOPS (MP-MFLOPS) z maksymalnie 4 rdzeniami 2,7 GFLOPS w wersji 32-bitowej i 5,5 GFLOPS w wersji 64-bitowej. Istnieje również wersja wykorzystująca elementy wewnętrzne NEON, w której 64-bitowy kompilator generuje alternatywne instrukcje przy maksymalnie 10,8 GFLOPS vs 5,7 przy 32 bitach - patrz zestawienie. Mam również wersje tych testów wydajności dla tabletów z systemem Windows 10 i Android Intel Atom - 64-bitowy i 32-bitowy system Windows, 32-bitowy system Android - pełny 64-bitowy brak pełnej implementacji - 64-bitowe jądro Linuksa, ale 32-bitowe Android.

http://www.roylongbottom.org.uk/android%20benchmarks.htm

Dodatkowo mam 32-bitowe i 64-bitowe wersje Linux / Intel.

Roy Longbottom

Roy Longbottom
źródło
3

Oto jak kompiluję jądro Aarch64 RPI3:

Po pierwsze potrzebujesz Linaro aarch64: https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu.tar .xz

Rozpakuj, umieść gdzieś, przykład: /opt/toolchains/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu

Oto mój skrypt do pobierania oprogramowania układowego, VC, źródła jądra i kompilacji jądra z modułami. Używam tego skryptu dla mojego serwera Jenkins, więc wybieram to, czego potrzebujesz:

git clone https://github.com/raspberrypi/linux.git -b rpi-4.8.y --depth=1
cd linux
export CROSS_COMPILE=/opt/toolchains/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export ARCH=arm64
export INSTALL_MOD_PATH=MODULES/
export KERNEL=kernel8

rm -rf BOOT
rm -rf MODULES
rm -rf rpi-proprietary/

mkdir -p BOOT/overlays
mkdir MODULES

git clone https://github.com/Hexxeh/rpi-firmware.git --depth=1 rpi-proprietary/

cp ./rpi-proprietary/COPYING.linux ./BOOT/
cp ./rpi-proprietary/LICENCE.broadcom ./BOOT/
cp ./rpi-proprietary/bootcode.bin ./BOOT/
cp ./rpi-proprietary/fixup.dat ./BOOT/
cp ./rpi-proprietary/fixup_cd.dat ./BOOT/
cp ./rpi-proprietary/fixup_db.dat ./BOOT/
cp ./rpi-proprietary/fixup_x.dat ./BOOT/
cp ./rpi-proprietary/start.elf ./BOOT/
cp ./rpi-proprietary/start_cd.elf ./BOOT/
cp ./rpi-proprietary/start_db.elf ./BOOT/
cp ./rpi-proprietary/start_x.elf ./BOOT/

cd ./rpi-proprietary/vc/hardfp/opt/

tar -cvzf VC.tar.gz vc/

cd ../../../../
mv ./rpi-proprietary/vc/hardfp/opt/VC.tar.gz ./
rm -rf rpi-proprietary/

make bcmrpi3_defconfig
make modules
make module_install
make -j10

rm -rf MODULES/lib/modules/*v8*/build MODULES/lib/modules/*v8*/source

cp ./arch/arm64/boot/Image ./BOOT/kernel8.img
cp ./arch/arm64/boot/dts/broadcom/*.dtb ./BOOT/
cp ./arch/arm64/boot/dts/overlays/*.dtbo ./BOOT/overlays/
cp ./arch/arm64/boot/dts/overlays/README ./BOOT/overlays/

tar -cvzf MODULES.tar.gz MODULES/
tar -cvzf BOOT.tar.gz BOOT/

make mrproper

Teraz wystarczy rozpakować plik BOOT.tar.gz i umieścić go na karcie SD.

WAŻNE : Musisz ustawić arm_control = 0x200 w config.txt, aby uruchomił jądro AARCH64

Lub możesz po prostu użyć mojej wstępnie zbudowanej na moim Jenkins: https://jenkins.sandpox.org/job/RPI3_KERNEL_AARCH64/

SandPox
źródło
3

Na dzień dzisiejszy wydaje się, że Fedora i Archlinux są dobrze obsługiwane.

Jeśli przejdziesz drogę łuk, to pomoże zbudować obraz (dla mnie na Linux / rpi3 to było make linux), a to pomoże Ci zacząć wifi.

Jeśli chcesz się upewnić, którą masz malinę, skorzystaj z tego przewodnika .

arm_control=0x200Jest również przestarzałe i arm_64bitpowinno się go używać w /boot/config.txt.

Pierre-Alexis Ciavaldini
źródło