Raspberry Pi 3 dan 64-bit kernel, perbedaan antara armv7 dan armv8

11

Apakah ada kernel 64-bit untuk Raspberry Pi 3? Saya melihat-lihat dan dari sumber saya memeriksa halaman resmi dan kernel berikut tercantum di sana:

  1. NOOBS - ini adalah pemasang, tanpa OS dengan sendirinya, bukan?
  2. Rapsbian - hanya satu unduhan, jadi saya menganggap 32 bit kompatibel dengan semua versi Pi
  3. Ubuntu MATE - aarch32 (ARMv7)
  4. Ubuntu Ubuntu Core - sepertinya hanya 32bit
  5. OSMC - unduhan yang sama untuk "Raspberry Pi 2/3", jadi 32 bit
  6. LibreELEC - build gabungan untuk 2 & 3, jadi hanya 32 bit
  7. PiNet - tidak tahu apa ini, tapi ragu 64 bit
  8. RISC OS - sepertinya bukan linux
  9. Stasiun Cuaca - ya, tidak

Jadi sepertinya tidak ada kernel 64bit resmi yang tersedia? Apakah ada yang tidak resmi? Bisakah saya mengkompilasi dan mengharapkannya bekerja (saya kira tidak tapi tidak ada salahnya untuk bertanya ..)? Adakah yang setidaknya bekerja di sana? Saya akan senang memiliki akses ke nomor 64-bit asli.

Pada catatan lain, seberapa besar perbedaan antara armv7 dan armv8? Gentoo menawarkan tarbal stage 3 untuk armv7. Apakah itu akan bekerja pada Pi 3 yang armv8?

Serigala abu-abu
sumber
"Gentoo menawarkan tarbal stage 3 untuk armv7. Apakah itu akan berhasil pada Pi 3 yang armv8?" Sekali lagi, tidak, bukan tanpa banyak peretasan, tetapi karena kernel pi tidak stok, bukan karena ARMv7 tidak bekerja pada ARMv8 (saat ini Pi 2 dan 3 menggunakan kernel yang sama).
goldilocks
1
Panduan gentoo melanjutkan dengan mengompilasi kode sumber kernel Pi dari github, jadi saya akan menganggap mereka bertanggung jawab untuk ini. Saya hanya tertarik jika saya bisa menggunakan versi ARMv7 di papan ARMv8, sepertinya ya
graywolf

Jawaban:

7

Dari sedikit yang saya temukan tidak ada yang stabil dan resmi. Beberapa sudah mendapatkan satu untuk dikompilasi, tetapi kemudian ada masalah dengan driver / modul.

Tautan ini mungkin menarik minat Anda tentang topik ini.

Memasuki status eksekusi aarch64

Raspbian Jessie (64bit) untuk RPi3?

Dan V
sumber
+1. Akan sangat suka bereksperimen dengan OS 64-bit. Saya mungkin mencoba untuk menambal dan mengkompilasi OS yang sangat ringan untuk Pi (ringan untuk membuat segalanya lebih mudah)
PNDA
@ PandaLion98 Saya akan sangat tertarik dengan ini
Dan V
11

Konsensus umum adalah bahwa kernel 64bit tidak akan meningkatkan kinerja pada Pi, karena hanya 2 manfaat nyata dari kernel 64bit adalah:

  1. nilai int yang lebih besar, yang dapat Anda tentukan secara manual di kernel 32-bit
  2. kemungkinan memiliki lebih dari 4 Gb RAM, yang tidak berguna pada Pi karena RAM adalah built-in dan tidak dapat diperluas.

Selain itu, 64bit vs 32bit pada chip ARM bukan lompatan kinerja besar pada chip x86, karena chip x86 memiliki upgrade arsitektur yang signifikan ketika mereka pergi ke 64bit, sedangkan chip ARM sudah cukup solid dalam versi 32bit.

Jangan ragu untuk bereksperimen! :)

tlhIngan
sumber
2
OP tidak bertanya tentang kinerja, tetapi tentang ketersediaan. Secara pribadi, saya ingin distro 64bit untuk Pi karena MongoDB terbaru menurunkan dukungan 32bit.
Andrejs Cainikovs
Selain itu, build aarch64 cenderung kurang bergantung pada 'perpustakaan vendor sumber tertutup' , dan membuka potensi v8 alih-alih membuat Anda tetap terkunci pada kemampuan v7.
earthmeLon
7

Satu manfaat 64 bit yang tampaknya dilupakan semua orang adalah ARMv8 memiliki register yang jauh lebih banyak daripada ARMv7. Ia juga memiliki kinerja floating point yang jauh lebih baik.

Ini bukan hanya add-on untuk ARMv7, ini adalah arsitektur yang sama sekali baru.

Chris
sumber
4

Saya telah menemukan beberapa keuntungan kinerja yang signifikan dari kompilasi 64 bit vs 32 bit dalam menjalankan benchmark Android saya pada tablet menggunakan ARM Cortex-A53 1,3 GHz. Yang terbaru dikompilasi melalui Eclipse dan, pada saat dijalankan, mendeteksi apakah CPU adalah ARM, Intel atau MIPS, kemudian arsitektur 32 bit atau 64 bit.

Pada kompilasi Windows sebelumnya untuk CPU Intel, 64 bit yang bekerja bisa lebih cepat dari 32 bit karena menggunakan instruksi SIMD tipe SSE. Namun, kompiler 32 bit kemudian, dengan ketidakcocokan mundur, menghasilkan kode yang hampir sama dan kecepatan yang sama.

Rincian tolok ukur Android adalah sebagai berikut, menampilkan hasil 32 bit dan 64 bit dari A53 dan melalui Cortex-A9 1,2 GHz. Pada akhirnya adalah beberapa daftar kode rakitan yang mengidentifikasi berbagai instruksi yang digunakan. Di bawah ini adalah ringkasan hasil.

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

Whetstone Benchmark - (loop kecil) kinerja yang sama, dengan peringkat keseluruhan dipengaruhi oleh kompilasi tes menggunakan fungsi EXP.

Benchmark Dhrystone - MIPS / MHz terbaru 1,09 32 bit, 1,96 64 bit, 1,10 A9 - mungkin 64 bit lebih optimal.

Benchmark Linpack - (N = 100) 64 bit DP 1,97 x lebih cepat, SP 2,67 x - lihat kode perakitan.

Livermore Loops - (24 kernel) rata-rata 1,5 kali lebih cepat, kisaran 0,8 hingga 7,9 kali

Tes Cache dan RAM L1 / L2

MemSpeed ​​- perhitungan float dan integer - mendapatkan cache 2,2 x, RAM 1,5 x.

BusSpeed ​​- integer streaming data dan pembacaan burst - streaming 2,0 x L1, 1,5 x L2, 1,25 x RAM - burst 2,6 x L1, L2 dan RAM serupa.

RandMem - membaca dan membaca / menulis serial dan acak dari struktur pengindeksan yang sama kompleks - umumnya sedikit lebih cepat membaca tetapi serupa / lebih lambat baca / tulis.

Lalu ada versi MP di atas dan upaya untuk mengukur MFLOPS SP maksimum (MP-MFLOPS) dengan maksimum 4 inti 2,7 GFLOPS 32 bit dan 5,5 GFLOPS 64 bit. Ada juga versi menggunakan intrinsik NEON di mana kompiler 64 bit menghasilkan instruksi alternatif hingga 10,8 GFLOPS vs 5,7 pada 32 bit - lihat daftar perakitan. Saya juga memiliki versi benchmark ini untuk tablet berbasis Windows 10 dan Android Intel Atom - 64 bit dan 32 bit Windows, 32 bit Android - 64 bit penuh tidak sepenuhnya diimplementasikan - 64 bit Linux kernel tetapi 32 bit Android.

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

Plus, saya memiliki versi 32 bit dan 64 bit Linux / Intel.

Roy Longbottom

Roy Longbottom
sumber
3

Inilah cara saya mengompilasi kernel RPI3 Aarch64:

Pertama, Anda membutuhkan 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

Dekompres, letakkan di suatu tempat, contoh: /opt/toolchains/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu

Berikut ini skrip saya untuk mengunduh firmware, VC, sumber kernel dan kompilasi kernel dengan modul, saya menggunakan skrip ini untuk server Jenkins saya jadi pilih yang Anda butuhkan:

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

Sekarang hapus untung BOOT.tar.gz dan letakkan di sdcard Anda.

PENTING : Anda harus meletakkan arm_control = 0x200 ke config.txt untuk mem-boot kernel AARCH64

Atau Anda bisa menggunakan prebuilt saya di Jenkins saya: https://jenkins.sandpox.org/job/RPI3_KERNEL_AARCH64/

Cacar Air
sumber
3

Sampai hari ini, tampaknya Fedora dan Archlinux didukung dengan baik.

Jika Anda pergi dengan cara Arch, ini akan membantu Anda membangun gambar (bagi saya di linux / rpi3 dulu make linux) dan ini akan membantu Anda memulai wifi.

Jika Anda perlu memastikan raspberry yang Anda miliki, gunakan panduan ini .

Juga arm_control=0x200sudah usang dan arm_64bitharus digunakan sebagai gantinya /boot/config.txt.

Pierre-Alexis Ciavaldini
sumber