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?» Опять же, нет, не без большого взлома, а потому, что ядро ​​pi не стандартное, а не потому, что ARMv7 не работает на ARMv8 (в настоящее время Pi 2 и 3 используют одно и то же ядро).
Златовласка
1
Руководство gentoo продолжает компиляцию исходного кода ядра Pi из github, так что я бы предположил, что они объясняют это. Мне было просто интересно, могу ли я использовать версию ARMv7 на плате ARMv8, кажется, что да
Graywolf

Ответы:

7

Из того, что я нашел, нет ничего стабильного и официального. Некоторые получили один для компиляции, но есть проблемы с драйверами / модулями.

Эти ссылки могут заинтересовать вас по этой теме.

Вход в состояние выполнения aarch64

Распбиан Джесси (64 бит) для RPi3?

Дан V
источник
+1. Очень хотелось бы поэкспериментировать с 64-битной ОС. Я мог бы попытаться исправить и скомпилировать очень легкую ОС для Pi (облегченную, чтобы упростить задачу)
PNDA
@ PandaLion98 Мне было бы очень интересно это
Dan V
11

Общее мнение состоит в том, что 64-битное ядро ​​не увеличит производительность на Pi, поскольку единственные 2 реальных преимущества 64-битного ядра:

  1. большие значения int, которые вы в любом случае можете указать вручную в 32-битном ядре
  2. возможность иметь более 4 ГБ ОЗУ, что бесполезно для Pi, поскольку ОЗУ является встроенным и не расширяемым.

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

Не стесняйтесь экспериментировать, хотя! :)

tlhIngan
источник
2
ОП спрашивал не о производительности, а о доступности. Лично я смотрю на наличие 64-битного дистрибутива для Pi, потому что последняя MongoDB отказалась от 32-битной поддержки.
Андрейс Каиников
Кроме того, сборки aarch64, как правило, в меньшей степени зависят от «библиотек поставщиков с закрытыми исходными кодами» и открывают потенциал v8 вместо того, чтобы держать вас заблокированными в возможностях v7.
earthmeLon
64 - битные системы не имеют Год 2038 проблем
ceving
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 и Cortex-A9 с частотой 1,2 ГГц. В конце приведены некоторые списки ассемблерных кодов, которые идентифицируют различные используемые инструкции. Ниже приведена сводка результатов.

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 DP 1.97 x быстрее, SP 2.67 x - см. Код сборки.

Петли Ливермора - (24 ядра) в среднем в 1,5 раза быстрее, в диапазоне от 0,8 до 7,9 раза

Тесты кэш-памяти и оперативной памяти L1 / L2

MemSpeed ​​- вычисления с плавающей запятой и целочисленные вычисления - получает кэш 2,2, оперативная память 1,5.

BusSpeed ​​- целочисленная потоковая передача данных и пакетное чтение - потоковая передача 2.0 x L1, 1.5 x L2, 1.25 x RAM - пакеты 2,6 x L1, аналогичные L2 и RAM.

RandMem - последовательное и случайное чтение и чтение / запись из одной и той же сложной структуры индексации - обычно немного быстрее при чтении, но аналогично / медленнее чтения / записи.

Кроме того, существуют версии MP, описанные выше, и делается попытка измерить максимальный SP MFLOPS (MP-MFLOPS) с максимумом 4 ядра: 2,7 GFLOPS 32 бит и 5,5 GFLOPS 64 бит. Существует также версия, использующая встроенные функции NEON, где 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

Или вы можете просто использовать мой предустановленный на моем Jenkins: https://jenkins.sandpox.org/job/RPI3_KERNEL_AARCH64/

SandPox
источник
3

На сегодняшний день кажется, что Fedora и Archlinux хорошо поддерживаются.

Если вы пойдете по пути Arch, это поможет вам создать образ (для меня это было в linux / rpi3 make linux), и это поможет вам запустить Wi-Fi.

Если вы хотите быть уверены, какая у вас малина, используйте это руководство .

Также arm_control=0x200не рекомендуется и arm_64bitдолжен использоваться вместо этого в /boot/config.txt.

Пьер-Алексис Чавалдини
источник