Можно ли запустить Raspberry Pi 3 с 64-битным ядром и 32-битным пользовательским пространством?

8

Я только что получил Raspberry Pi 3 и хотел бы начать с ним экспериментировать, особенно в отношении 64-битного набора команд.

Я хорошо осведомлен о плюсах и минусах 32-битного и 64-битного набора команд, поэтому, пожалуйста, придерживайтесь первоначального вопроса: возможно ли запустить 64-битное ядро ​​с использованием современных 32-битных приложений пользовательского пространства ?

Достаточно скомпилировать ядро ​​с 64-битным компилятором и загрузить изображение в RasPi или есть какие-то другие шаги, о которых мне следует знать? Не могли бы вы дать мне обзор высокого уровня того, что я должен рассматривать в качестве дорожной карты? Мол, модули / драйверы, которые могут / сломаются, если я установлю 64-битное ядро. Нужно ли перекомпилировать все?

Просматривая Интернет, я знаю, что это возможно для некоторых других классов устройств, и что обычно запуск этой «гибридной» конфигурации нарушает работу менеджеров пакетов, но в данный момент меня не беспокоит управляемость. Поэтому, даже если это нарушит работу менеджеров пакетов и это адское обслуживание, я бы хотел понять, как это делается.

Помните, что я все еще учусь компилировать ядро, но у меня есть опыт разработки приложений на C / C ++ в течение длительного времени. Это мой любимый проект для глубокого понимания архитектуры Linux и внутренних компонентов ядра.

Даниэла Петрузалек
источник
Dragonboard 410c использует тот же процессор arm64 bit и настроил Ubuntu под Linaro.

Ответы:

3

Можно ли запустить Raspberry Pi 3 с 64-битным ядром и 32-битным пользовательским пространством?

Да. Некоторые готовые изображения уже готовы к работе:

Обычно запуск этой «гибридной» конфигурации нарушает работу менеджеров пакетов, но в данный момент меня не беспокоит управляемость. Так что даже если это сломает менеджеров пакетов и это ад, чтобы поддерживать

Использование multiarch с Raspbian нецелесообразно, так как у него нет 64-битных исходных пакетов, а ближайший 64-битный родственник (Debian arm64) имеет несовместимые версии пакетов. Для запуска 64-битных программ под Raspbian вы можете использовать статические двоичные файлы, контейнеры (LXC, systemd-nspawn) или chroot [1] . Такая изоляция позволяет избежать типичных конфликтов пакетов, присущих mutiarch.

Вам не нужно ничего перекомпилировать, потому что двоичные файлы для всего вышеперечисленного (32-битный пользовательский Raspbian, 64-битное ядро, пакеты пользовательского интерфейса Debian arm64) легко доступны.

Мол, модули / драйверы, которые могут / сломаются, если я установлю 64-битное ядро.

Известно, что на момент написания камеры SoC ускоренное декодирование видео с помощью MMAL и высокоскоростная поддержка USB (через FIQ) были нарушены в 64-битных ядрах Raspberry Pi.

[1] См. 64-битную ОС на Raspberry Pi 4 для получения инструкций о том, как создать такой chroot.

jdonald
источник
2

Конечно, это возможно. 64-битные операционные системы делают это постоянно *. Это происходит, когда вы работаете в 64-битной ОС и открываете 32-битное приложение (32-битное приложение пользовательского пространства).

Но иногда могут возникнуть проблемы с библиотеками / зависимостями. Однажды я столкнулся с ошибкой на ПК , что-то около wrong ELF class. Решается установкой соответствующей 32-битной библиотеки ia32-libs.

Я не совсем уверен, как это будет вести себя на компьютере ARM, так как нет официального 64-битного ядра для Pi, с которым я могу играть (пока).

Кроме того, нельзя просто скомпилировать ядро ​​с помощью 64-битного компилятора и загрузить его на Pi. Если бы это было так просто, мы бы уже работали с Pi 3 с 64-битным ядром.

PNDA
источник
+1 Windows делает это очень очевидным с разделением программных файлов. 64-битные приложения хранятся в C:\Program Files, а 32-битные приложения хранятся в C:\Program Files (x86).
Jacobm001
1
@ Jacobm001 Есть более тонкая разница с Windows. В Linux вам просто нужны были соответствующие 32-битные библиотеки. Для Windows технически на вашем компьютере установлены две версии Windows: 32-разрядная версия, которая хранится в SysWOW64, и 64-разрядная версия, которая хранится в system32. Windows идентифицирует исполняемый файл и делает его таким, чтобы 32-разрядное приложение видело SysWOW64как system32. То же самое происходит Program Filesи с реестром. 32-битные приложения выглядят C:\Program Files (x86)просто, C:\Program Filesно любые изменения в них идут C:\Program Files (x86).
PNDA
1
@ Jacobm001 Мне весело на вечеринках.
PNDA
2

Вам нужны оба набора библиотек и обе архитектуры, скомпилированные для правильных библиотек, поэтому 2 среды сборки. Посмотрите на несколько арок и ваш любимый bsse, чтобы получить указатели. подобно

https://wiki.debian.org/MultiarchCrossToolchainBuild

Таким образом, вам нужно сделать что-то подобное, но в расбианском пространстве. Так что создание ядра arm64 и пользователя armhf и оба набора библиотек правильно связаны для каждого.

Здесь вы можете увидеть, как кто-то делает это на другой доске:

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

И увидеть их опыт.

EMSmith
источник