Raspberry Pi 3 та 64-бітове ядро, відмінності між armv7 та armv8


11

Чи є 64-бітове ядро ​​для Raspberry Pi 3? Я озирнувся і з джерел перевіряю офіційну сторінку, і там перелічені наступні ядра:

  1. NOOBS - це інсталятор, жодна ОС сама по собі, правда?
  2. Rapsbian - лише одне завантаження, тому я вважаю, що 32-бітна сумісна з усіма версіями Pi
  3. Ubuntu MATE - aarch32 (ARMv7)
  4. Ubuntu Ubuntu Core - схоже на 32-бітний
  5. OSMC - те саме завантаження для "Raspberry Pi 2/3", тобто 32 біт
  6. LibreELEC - комбінована збірка для 2 та 3, тому лише 32 біт
  7. PiNet - не знаю, що це, але сумнівайтеся, 64 біт
  8. RISC OS - не схоже на Linux
  9. Метеостанція - так, просто ні

Тож не здається, що є офіційне 64-бітове ядро? Чи є якийсь неофіційний? Чи можу я просто скомпілювати його і очікувати, що він спрацює (я думаю, що не, але не завадить запитати ..)? Хтось принаймні працює над цим? Я хотів би мати доступ до рідних 64-бітних номерів.

З іншого боку, наскільки велика різниця між armv7 та armv8? Gentoo пропонує таргетки 3 етапу для armv7. Чи буде це працювати на Pi 3, який є armv8?


"Gentoo пропонує таргетки 3 етапу для armv7. Чи буде це працювати на Pi 3, який є armv8?" Знову ж таки, nope, не без багатьох злому, а тому, що ядро ​​pi не є на складі, не тому, що ARMv7 не працює на ARMv8 (в даний час Pi 2 і 3 використовують одне ядро).
золотинки

1
Посібник gentoo продовжує компілювати вихідний код ядра Pi від github, тому я б припустив, що вони враховують це. Мене просто цікавило, чи можу я використовувати версію ARMv7 на дошці ARMv8, здається, що так
сірий вовк

Відповіді:


7

З того, що мало я знайшов, немає нічого стабільного та офіційного. Деякі отримали один для компіляції, але тоді виникають проблеми з драйверами / модулями.

Ці посилання можуть зацікавити вас щодо цієї теми.

Перехід у стан виконання aarch64

Raspbian Jessie (64bit) для RPi3?


+1. Дуже хотів би експериментувати з 64-бітовою ОС. Я можу спробувати зафіксувати і скласти дуже легку ОС для Pi (легкий, щоб полегшити справи)
PNDA

@ PandaLion98 Я був би дуже зацікавлений у цьому
Dan V

11

Загальний коннесус полягає в тому, що 64-бітове ядро ​​не підвищить продуктивність на Pi, оскільки єдиними двома реальними перевагами 64-бітового ядра є:

  1. більші значення int, які ви можете будь-коли вказати вручну в 32-бітовому ядрі
  2. можливість мати більше 4 Гб оперативної пам’яті, що марно в Pi, оскільки оперативна пам’ять є вбудованою та нерозширюваною.

Крім того, 64-бітовий проти 32-бітовий на ARM-чіпах не є великим стрибком продуктивності, який був на чіпах x86, тому що чіпи x86 мали значні покращення архітектури, коли вони перейшли на 64-бітну, тоді як чіпи ARM вже були досить надійними у 32-бітових версіях.

Не соромтеся експериментувати! :)


2
ОП запитували не про продуктивність, а про доступність. Особисто я дивлюсь на 64-бітовий дистрибутив для Pi - це тому, що остання MongoDB знизила 32-бітну підтримку.
Андрейс Кайніков

Крім того, збірки aarch64, як правило, менше залежать від "бібліотек постачальників із закритим вихідним кодом" та розблоковує потенціал v8, а не тримає вас в замкнених можливостях v7.
земляLon

У 64-бітових систем немає проблеми
закінчення

7

Однією з переваг 64-бітових, які всі забувають, це те, що ARMv8 має значно більше регістрів, ніж ARMv7.

Це не просто доповнення до ARMv7, це абсолютно нова архітектура.



4

Я виявив значне підвищення продуктивності 64-бітових компіляцій проти 32-х бітних під час роботи моїх Android-орієнтирів на планшеті з використанням 1,3 ГГц ARM Cortex-A53. Останні складаються за допомогою Eclipse і під час виконання роботи виявляють, чи є процесор ARM, Intel чи MIPS, а потім 32-бітова або 64-бітна архітектура.

У попередніх компіляціях Windows для процесорів Intel 64-бітна робота може бути набагато швидшою, ніж 32-бітна завдяки використанню інструкцій SIMD типу SSE. Однак пізніший 32-розрядний компілятор із зворотною несумісністю створює практично той самий код і схожу швидкість.

Детальна інформація про Android-орієнтири наведена нижче, показуючи 32-бітні та 64-бітні результати від A53 та за допомогою 1.2 GHz Cortex-A9. Наприкінці наведено декілька списків кодів збірки, які визначають різні інструкції, що використовуються. Нижче наведено підсумок результатів.

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

Whetstone Benchmark - аналогічні показники (крихітні петлі), на загальний рейтинг впливає складання тесту з використанням функцій EXP.

Dhrystone Benchmark - останні MIPS / MHz 1,09 32 біт, 1,96 64 біт, 1,10 A9 - можливо, 64 біт над оптимізованим.

Linpack Benchmark - (N = 100) 64-бітний DP 1.97 x швидше, SP 2.67 x - див. Код складання.

Livermore Loops - (24 ядра) в середньому в 1,5 рази швидше, діапазон від 0,8 до 7,9 разів

Тести кеш-пам'яті L1 / L2 та оперативної пам’яті

MemSpeed ​​- обчислення з плаваючими і цілими числами - отримує кеші 2,2 х, оперативна пам'ять 1,5 х.

BusSpeed ​​- ціла потокова передача даних і зчитування розривів - потокова передача 2,0 х L1, 1,5 х L2, 1,25 х оперативної пам’яті - обриви 2,6 х L1, подібні L2 та оперативної пам’яті.

RandMem - послідовне та випадкове читання та читання / запис із тієї ж складної структури індексації - як правило, трохи швидше при читанні, але схоже / повільніше читання / запис.

Потім є версії MP вищезазначених та намагаються виміряти максимальний SP MFLOPS (MP-MFLOPS) з 4-х основним максимумом 2,7 GFLOPS 32 біт і 5,5 GFLOPS 64 біт. Існує також версія, що використовує NEON intrinsics, де 64-розрядний компілятор генерує альтернативні вказівки до 10,8 GFLOPS проти 5,7 на 32 біта - див. Список складання. У мене також є версії цих орієнтирів для планшетів на базі Windows 10 та Android Intel Atom - 64-бітний і 32-бітний Windows, 32-розрядний Android - повний 64-бітний не повністю реалізований - 64-бітове ядро ​​Linux, але 32-бітний Android.

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

Крім того, у мене є 32-бітна та 64-бітна версії Linux / Intel.

Рой Лонгботтом


3

Ось як я компілюю ядро ​​RPI3 Aarch64:

Спочатку вам знадобиться 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

Декомпресуйте, покладіть його десь, наприклад: /opt/toolchains/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu

Ось мій сценарій для завантаження прошивки, VC, джерела ядра та компіляції ядра з модулями, я використовую цей скрипт для свого сервера Jenkins, тому вибирає те, що вам потрібно:

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

Тепер просто зніміть BOOT.tar.gz і покладіть його на свою sdcard.

ВАЖЛИВО : Ви повинні поставити arm_control = 0x200 для config.txt для завантаження ядра AARCH64

Або ви можете просто скористатися моїм попередньо побудованим моїм дженкінсом: https://jenkins.sandpox.org/job/RPI3_KERNEL_AARCH64/


3

На сьогоднішній день, схоже, Fedora та Archlinux добре підтримуються.

Якщо ви підете Arch шляхом, це допоможе вам створити зображення (для мене на Linux / rpi3 це було make linux), і це допоможе вам запустити wifi.

Якщо вам потрібно бути впевненим, яку малину ви маєте, скористайтеся цим посібником .

Також arm_control=0x200є застарілим і його arm_64bitслід використовувати замість у /boot/config.txt.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.