- Разница между ARM64, ARMel и ARMhf
- 3 ответа 3
- Что такое linux armhf
- 2.1.1. Поддерживаемые архитектуры
- 2.1.2. Three different ARM ports
- 2.1.3. Variations in ARM CPU designs and support complexity
- 2.1.4. Платформы, поддерживаемые Debian/armhf
- 2.1.5. Платформы, больше не поддерживаемые Debian/armhf
- 2.1.6. Несколько процессоров
- 2.1.7. Поддержка видеокарт
- 2.1.8. Аппаратура для подключения к сети
- 2.1.9. Периферия и другое оборудование
- Заводим GNU/Linux на ARM-плате с нуля (на примере Kali и iMX.6)
- Сборка корневой файловой системы
- Сборка Linux
- Das U-Boot
- Вместо заключения
Разница между ARM64, ARMel и ARMhf
Я пытаюсь загрузить образ Debian для процессора ARM Cortex-A7, но не могу понять, какой образ загрузить. Я заглянул на сайт Debian и увидел три разных варианта загрузки для процессора ARM. Какая разница между ними и какую мне скачать?
3 ответа 3
Порт ARM EABI (armel) предназначен для ряда более старых 32-разрядных устройств ARM, особенно тех, которые используются в аппаратном обеспечении NAS и различных * подключаемых компьютерах.
Более новый порт ARM Hard-Float (armhf) поддерживает новые, более мощные 32-разрядные устройства, использующие версию 7 спецификации архитектуры ARM.
64-битный порт ARM (arm64) поддерживает новейшие 64-битные устройства на платформе ARM.
Хотя этот вопрос относится к концу 15 года, его все же полезно знать.
Итак, объяснение предложения Debian требует некоторой предыстории.
То, о чем вы говорите, это названия его официальных портов ARM. Как видите, они соответствуют определенной тройке опций ISA, OS и ABI. Они, в свою очередь, являются наименьшим распространенным множителем, который может гарантировать программную совместимость скомпилированных пакетов.
Оставляя в стороне самоочевидную сборку Arm64 (использующую 64-битный режим некоторых процессоров ARMv8), я думаю, что большинство недоразумений возникает из других, начиная с arm-linux-.
Когда-то давно на самом деле была только одна «рука» цель, но по ряду причин, начиная от порядка байтов и заканчивая поддержкой с плавающей запятой и производительностью, она устарела. EmbeddedABI (довольно пустой псевдоним, если вы спросите меня технически, но так называет ARM), с тех пор заменил его безупречно.
Armel — это не что иное, как новое имя, чтобы различать как старую версию, так и руку с прямым порядком байтов (тогда неофициальную, а теперь и вовсе заброшенную). Следует учитывать , самое основное, и он должен работать практически на любом оборудовании под солнцем.
Однако, с другой стороны, если ваш процессор имеет FPU, который не будет использоваться. Учитывая, что до ARMv8 не было никакой гарантии, что это будет поддерживаться (большинство ядер v7-A делали это, но ситуация намного сложнее, чем раньше), «максимальная совместимость» влечет за собой то, что любая связанная инструкция ссылается на glibc soft -fp библиотека (не путать с флагом softfp float-abi ), а не VFP.
И именно поэтому, в конечном итоге, Армф был создан. Пользовательское пространство снова не совместимо с ссылками, но вы получаете максимально возможную скорость.
Источник
Что такое linux armhf
Для Debian не требуется от оборудования сверх того, что требуют ядро Linux или kFreeBSD и утилиты GNU. Таким образом, любая архитектура или платформа, на которую были перенесены ядро Linux или kFreeBSD, libc, gcc и т.д. и на которую перенесён Debian, может работать под Debian. Сверьтесь со страницами переносов http://www.debian.org/ports/arm/, какие системы на архитектуре 32-bit hard-float ARMv7 были протестированы с Debian GNU/Linux.
Вместо того, чтобы пытаться описать всё разнообразие аппаратных конфигураций, которое существует на 32-bit hard-float ARMv7 , эта глава содержит общую информацию и указания, где можно найти дополнительную информацию.
2.1.1. Поддерживаемые архитектуры
Debian GNU/Linux 8 поддерживает восемь основных архитектур и несколько вариаций каждой архитектуры, известных как « варианты (flavors) » .
Архитектура | Обозначение в Debian | Субархитектура | Вариант |
---|---|---|---|
основанные на Intel x86 | i386 | ||
AMD64 & Intel 64 | amd64 | ||
ARM | armel | Intel IXP4xx | ixp4xx |
Marvell Kirkwood | kirkwood | ||
Marvell Orion | orion5x | ||
Versatile | versatile | ||
ARM с аппаратным FPU | armhf | multiplatform | armmp |
multiplatform для систем с поддержкой LPAE | armmp-lpae | ||
64-битные ARM | arm64 | ||
MIPS (с прямым порядком байтов) | mips | SGI IP22 (Indy/Indigo 2) | r4k-ip22 |
SGI IP32 (O2) | r5k-ip32 | ||
MIPS Malta (32-битная) | 4kc-malta | ||
MIPS Malta (64-битная) | 5kc-malta | ||
MIPS (с обратным порядком байтов) | mipsel | MIPS Malta (32-битная) | 4kc-malta |
MIPS Malta (64-битная) | 5kc-malta | ||
IBM/Motorola PowerPC | powerpc | PowerMac | pmac |
PReP | prep | ||
Power Systems | ppc64el | IBM POWER8 or newer machines | |
64-битный IBM S/390 | s390x | IPL с VM-reader и DASD | generic |
Этот документ содержит описание установки на архитектуру 32-bit hard-float ARMv7 . Если вы ищете информацию по любой другой архитектуре, поддерживаемой Debian, посмотрите на странице переносов Debian.
2.1.2. Three different ARM ports
The ARM architecture has evolved over time and modern ARM processors provide features which are not available in older models. Debian therefore provides three ARM ports to give the best support for a very wide range of different machines:
Debian/armel targets older 32-bit ARM processors without support for a hardware floating point unit (FPU),
Debian/armhf works only on newer 32-bit ARM processors which implement at least the ARMv7 architecture with version 3 of the ARM vector floating point specification (VFPv3). It makes use of the extended features and performance enhancements available on these models.
Debian/arm64 works on 64-bit ARM processors which implement at least the ARMv8 architecture.
Технически, некоторые процессоры ARM могут работать с любым порядком адресации памяти (прямым или обратным). Однако, почти каждая современная реализация системы использует режим little-endian. Архитектуры Debian/armhf и Debian/armel поддерживают только адресацию little-endian.
2.1.3. Variations in ARM CPU designs and support complexity
ARM systems are much more heterogeneous than those based on the i386/amd64-based PC architecture, so the support situation can be much more complicated.
Системы ARM намного разнообразнее, чем архитектура ПК на основе i386/amd64, в которой все машины имеют однообразную системную микропрограмму (BIOS или/и UEFI), инициализирующую основные аппаратные компоненты стандартным образом. В архитектуре ARM используется так называемая « система на кристалле » (SOC). Эти SOC, разрабатываемые многими разными компаниями, содержат сильно отличающиеся компоненты, используемые даже для основных задач, которые нужны для запуска системы. Машины, использующие их, не содержат основной системной микропрограммы и в результате в системах ARM ядро Linux выполняет множество системо-зависимых низкоуровневых задач, которые выполняются BIOS материнской платы в мире ПК PC.
В начале поддержки ARM требовалось отдельное ядро Linux для каждой системы, а не « одно для всех » ядро для систем PC. Так как такое решение не подходит для большого числа разных систем, начата работа над единым ядром ARM, которое может работать на разных системах ARM. Для новых систем ARM такая поддержка реализована в мультиплатформенном ядре, но для некоторых старых систем по прежнему требуются отдельные ядра. В следствии этого, стандартный дистрибутив Debian поддерживает установку только на несколько старых систем, в дополнении к новым системам, которые поддерживаются мультиплатформенным ядром ARM (armmp).
2.1.4. Платформы, поддерживаемые Debian/armhf
Следующие системы работают с Debian/armhf на мультиплатформенном (armmp) ядре:
Плата разработчика IMX53QSB на процессоре i.MX53.
Versatile Express — серия плат разработчика производства ARM, содержит основную плату, на которую можно устанавливать дочерние платы с различными ЦП.
Встраиваемые системы и некоторые платы разработчика на основе Allwinner sunXi
Ядро armmp поддерживает несколько плат разработчика и встроенных систем на основе Allwinner A10 (имя архитектуры « sun4i » ) и A20 (имя архитектуры « sun7i » ) SOC. В настоящее время полная поддержка программы установки доступна для следующих систем на основе sunXi:
Cubietech Cubieboard 1 + 2 / Cubietruck
LeMaker Banana Pi
Olimex A10-Olinuxino-LIME / A10s-Olinuxino Micro / A13-Olinuxino / A13-Olinuxino Micro / A20-Olinuxino-LIME / A20-Olinuxino Micro
PineRiver Mini X-Plus
В системах на основе Allwinner sunXi поддерживаются только устройства, для которых есть драйверы и информация в дереве устройств в основной ветви ядра Linux. Ядра версий 3.4 на основе android с linux-sunxi.org не поддерживаются Debian.
Для Allwinner A10 и A20 SOC основная ветвь ядра Linux поддерживает последовательную консоль, ethernet, SATA, USB и карты MMC/SD, и не поддерживает локальный дисплей (HDMI/VGA/LVDS) и звук. Флеш-память NAND, встроенная в некоторые системы на основе sunXi-based, также не поддерживается.
Using a local display is technically possible without native display drivers via the « simplefb » infrastructure in the mainline kernel, which relies on the « U-Boot » bootloader for initialising the display hardware, but this is not supported by the U-Boot version in Debian 8.
SolidRun Cubox-i2eX / Cubox-i4Pro
Модели Cubox-i — системы в виде маленького куба на основе семейства SOC Freescale i.MX6. В системах на основе Cubox-i поддерживаются только устройства, для которых есть драйверы и информация в дереве устройств в основной ветви ядра Linux; ядра серии Freescale 3.0 для Cubox-i не поддерживаются Debian. Доступные драйверы из основная ветвь ядра: последовательная консоль, ethernet, USB, карта MMC/SD и дисплей HDMI (консоль и X11). Кроме этого на Cubox-i4Pro поддерживается порт eSATA.
Wandboard Quad — плата разработчика на основе четырёх ядерного SoC Freescale i.MX6. В системе поддерживаются только устройства, для которых есть драйверы и информация в дереве устройств в основной ветви ядра Linux; ядра серии wandboard-specific 3.0 и 3.10 с wandboard.org не поддерживаются Debian. Доступные драйверы из основная ветвь ядра: последовательная консоль, дисплей HDMI (консоль и X11), ethernet, USB, MMC/SD и SATA. Набортное аудио (аналоговый разъём, S/PDIF, HDMI-Audio) и модуль WLAN/Bluetooth недоступны в Debian 8.
В основном, мультиплатформенная поддержка ARM в ядре Linux позволяет запускать debian-installer на системах armhf, не описанных выше, если в ядре, используемом debian-installer есть поддержка аппаратных частей и файла дерева устройств для целевой машины. В этих случаях программа установки, обычно, способна предоставить работающую пользовательскую установку, но, вероятно, не сможет автоматически сделать систему загрузочной, так как для этого часто требуется информация об устройстве.
При использовании debian-installer на таких системах вам придётся вручную сделать систему загрузочной в конце установки, например запустив необходимые команды и оболочки , запущенной из debian-installer .
2.1.5. Платформы, больше не поддерживаемые Debian/armhf
Платформа EfikaMX (Genesi Efika Smartbook и Genesi EfikaMX nettop) поддерживалась в Debian 7 с отдельным ядром, но больше не поддерживается, начиная с Debian 8. Необходимый для сборки код ранее использовавшегося отдельного ядра платформы, был удалён из исходного кода ядра Linux в 2012 году, поэтому Debian не может предоставлять новых сборки.
2.1.6. Несколько процессоров
На этой архитектуре поддерживается нескольких процессоров — так называемая « симметричная многопроцессорная обработка (symmetric multi-processing) » или SMP. Стандартное ядро Debian 8 собрано с поддержкой SMP-alternatives. Это означает, что ядро определит число процессоров (или процессорных ядер) и автоматически выключит SMP в однопроцессорных системах.
Раньше, несколько процессоров имелось только в высокопроизводительных серверных системах, но в настоящее время так называемые « многоядерные » процессоры встраивают почти по всё. В них содержится один ЦП с двумя и более вычислительными блоками, называемыми « ядрами » .
2.1.7. Поддержка видеокарт
Поддержка графического интерфейса в Debian полностью зависит от поддержки этого интерфейса системой X.Org X11. Графические карты современных ПК, обычно, работают без дополнительной настройки. Поддержка аппаратного ускорения 3D-графики или проигрывания видео зависит от самой карты, установленной в системе, и, иногда, требует установки дополнительных образов « микропрограмм » (см. Раздел 2.2, «Устройства, которым требуются микропрограммы»). Были единичные сообщения об ошибках по картам о том, что установка дополнительных микропрограмм требовалась даже для поддержки основных графических функций, но это скорее исключение.
Nearly all ARM machines have the graphics hardware built-in, rather than being on a plug-in card. Some machines do have expansion slots which will take graphics cards, but that is a rarity. Hardware designed to be headless with no graphics at all is quite common. Whilst basic framebuffer video provided by the kernel should work on all devices that have graphics, fast 3D graphics invariably needs binary drivers to work. The situation is changing quickly but at the time of the jessie release free drivers for nouveau (Nvidia Tegra K1 SoC) and freedreno (Qualcomm Snapdragon SoCs) are available in the release. Other hardware needs non-free drivers from 3rd parties.
Список поддерживаемых графических шин, карт, мониторов и устройств ввода можно найти на http://xorg.freedesktop.org/. Debian 8 поставляется с X.Org версии 7.7.
2.1.8. Аппаратура для подключения к сети
Почти любая сетевая плата (NIC), поддерживаемая ядром Linux, должна поддерживаться системой установки; драйверы модулей должны загрузиться автоматически.
На 32-bit hard-float ARMv7 поддерживается большинство встроенных устройств Ethernet и предоставляются модули для дополнительных устройств PCI и USB.
2.1.9. Периферия и другое оборудование
Linux поддерживает много разных устройств, таких как мыши, принтеры, сканеры, PCMCIA/CardBus/ExpressCard и USB устройства. Однако, большинство этих устройств не требуется для установки системы.
Источник
Заводим GNU/Linux на ARM-плате с нуля (на примере Kali и iMX.6)
tl;dr: собираю образ Kali Linux для ARM-компьютера, в программе debootstrap , linux и u-boot .
Если вы покупали какой-нибудь не очень популярный одноплатник, то могли столкнуться с отсутствием для него образа любимого дистрибутива. Приблизительно то же самое случилось с планируемым Flipper One. Kali Linux под IMX6 просто нету (я готовлю), поэтому собирать приходится самостоятельно.
Процесс загрузки достаточно простой:
- Инициализируется железо.
- Из некоторой области на запоминающем устройства (SD-карта/eMMC/etc) считывается и выполняется загрузчик.
- Загрузчик ищет ядро операционной системы и загружает его в некоторую область памяти и выполняет.
- Ядро загружает всю остальную ОС.
Для моей задачи хватает такого уровня детализации, подробности можете прочесть в другой статье. Упомянутые выше «некоторые» области отличаются от платы к плате, что и создаёт некоторые сложности с установкой. Загрузку серверных ARM-платформ пытаются стандартизовать с помощью UEFI, но покуда это доступно не для всех, придётся собирать всё по отдельности.
Сборка корневой файловой системы
Для начала нужно подготовить разделы. Das U-Boot поддерживает разные ФС, я выбрал FAT32 для /boot и ext3 для корня, это стандартная разметка образов для Kali под ARM. Я воспользуюсь GNU Parted, но вы можете сделать то же самое более привычным fdisk . Также понадобятся dosfstools и e2fsprogs для создания ФС: apt install parted dosfstools e2fsprogs .
- Отмечаем SD-карту как использующую MBR-разметку: parted -s /dev/mmcblk0 mklabel msdos
- Создаём раздел под /boot на 128 мегабайт: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB . Первый пропущенный мегабайт необходимо оставить под саму разметку и под загрузчик.
- Создаём корневую ФС на всю оставшуюся ёмкость: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Если вдруг у вас не создались или не изменились файлы разделов, надо выполнить `partprobe`, тогда таблица разделов будет перечитана.
- Создаём файловую систему загрузочного раздела с меткой BOOT : mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Создаём корневую ФС с меткой ROOTFS : mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Отлично, теперь можно её заполнять. Для этого дополнительно потребуется debootstrap , утилита для создания корневых ФС Debian-подобных операционных систем: apt install debootstrap .
- Монтируем раздел в /mnt/ (используйте более удобную для себя точку монтирования): mount /dev/mmcblk0p2 /mnt
- Собственно заполняем файловую систему: debootstrap —foreign —include=qemu-user-static —arch armhf kali-rolling /mnt/ http://http.kali.org/kali . Параметр —include указывает дополнительно установить некоторые пакеты, я указал статически собранный эмулятор QEMU. Он позволяет выполнять chroot в ARM-окружение. Смысл остальных опций можно посмотреть в man debootstrap . Не забудьте, что не любая ARM-плата поддерживает архитектуру armhf .
- Из-за разницы архитектур debootstrap выполняется в два этапа, второй выполняется так: chroot /mnt/ /debootstrap/debootstrap —second-stage
- Теперь нужно зачрутиться: chroot /mnt /bin/bash
- Заполняем /etc/hosts и /etc/hostname целевой ФС. Заполните по аналогии с содержимым на вашем локальном компьютере, не забудьте только заменить имя хоста.
- Можно донастроить всё остальное. В частности я доустанавливаю locales (ключи репозитория), перенастраиваю локали и часовой пояс ( dpkg-reconfigure locales tzdata ). Не забудьте задать пароль командой passwd .
- Задаём пароль для root командой passwd .
- Приготовления образа для меня завершаются заполнением /etc/fstab внутри /mnt/ .
Загружать буду в соответствии с созданными ранее метками, поэтому содержимое будет таким:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Наконец, можно примонтировать загрузочный раздел, он нам понадобится для ядра: `mount /dev/mmcblk0p1 /mnt/boot/`
Сборка Linux
Для сборки ядра (и загрузчика потом) на Debian Testing надо установить стандартный набор из GCC, GNU Make и заголовочных файлов GNU C Library для целевой архитектуры (у меня armhf ), а также заголовки OpenSSL, консольный калькулятор bc , bison и flex : apt install crossbuild-essential-armhf bison flex libssl-dev bc . Так как загрузчик по умолчанию ищет файл zImage на файловой системе загрузочного раздела, пора разбивать флешку.
- Клонировать ядро слишком долго, поэтому просто скачаю: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz . Распакуем и перейдём в директорию с исходниками: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Конфигурируем перед компиляцией: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig . Конфиг находится в директории arch/arm/configs/ . Если такового нет, вы можете попробовать найти и скачать готовый и передать название файла в этой директории в параметр KBUILD_DEFCONFIG . В крайнем случае сразу переходите к следующему пункту.
- Опционально можно докрутить настройки: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- И кроскомпилируем образ: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Теперь можно скопировать файлик с ядром: cp arch/arm/boot/zImage /mnt/boot/
- И файлы с DeviceTree (описание имеющегося на плате железа): cp arch/arm/boot/dts/*.dtb /mnt/boot/
- И доустановить собранные в виде отдельных файлов модули: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Ядро готово. Можно всё отмонтировать: umount /mnt/boot/ /mnt/
Das U-Boot
Так как загрузчик интерактивный, для проверки его работы достаточно самой платы, запоминающего устройства и опционально устройства USB-to-UART. То есть, можно ядро и ОС отложить на потом.
Абсолютное большинство производителей предлагают использовать Das U-Boot для первичной загрузки. Полноценная поддержка обычно обеспечивается в собственном форке, но и в апстрим контрибьютить не забывают. В моём случае плата поддерживается в мейнлайне, поэтому форк я проигнорировал.
Cобираем сам загрузчик:
- Клонируем стабильную ветку репозитория: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Переходим в саму директорию: cd u-boot
- Готовим конфигурацию сборки: make mx6ull_14x14_evk_defconfig . Это работает только если конфигурация есть в самом Das U-Boot, в ином случае вам потребуется найти конфиг производителя и положить его в корень репозитория в файл .config , или собрать иным рекомендованным производителем образом.
- Собираем сам образ загрузчика кросс-компилятором armhf : make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
В результате мы получаем файл u-boot.imx , это готовый образ, который можно записывать на флешку. Записываем на SD-карту, пропустив первые 1024 байта. Почему я выбрал таргет u-boot.imx ? Почему пропустил именно 1024 байта? Так предлагают сделать в документации. Для других плат процесс сборки образа и записи может немного отличаться.
Готово, можно загрузиться. Загрузчик должен сообщить собственную версию, некоторую информацию о плате и попытаться найти образ ядра на разделе. В случае неудачи будет пытаться загрузиться по сети. В целом вывод довольно подробный, можно найти ошибку в случае проблемы.
Вместо заключения
А вы знали, что лоб у дельфина не костистый? Это буквально третий глаз, жировая линза для эхолокации!
Источник