Uploaded by Илья Бенисович

Embeded linux my 1

advertisement
План:
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
17)
18)
19)
20)
21)
Обзор средств разработки предоставляемых Somlabs, Gateworks
Что есть линукс?
cross-tools (компилятор, библиотека С)
Производитель CPU, версия ядра от производителя, community, последняя версия ядра для
cpu.
Загрузчики. SPL. TPL.
U-boot. От производителя. Собрать самому. Скрипты.
U-boot. Драйвера для загрузчика? Адреса загрузки kernel, device tree, rootfs.
Параметры запуска ядра: video, console, rdinit, root.
Деревья устройств. Язык описания узлов чипа.
Образы систем от производителей плат. Image. Rootfs. BSP.
Образ линукс собранный самим (для этого Чипа). Как это сделать?
Загрузка в память (Nand, EMMC, SD) образов системы.
Rootfs. Набор программ/утилит. BusyBox.
Монтирование файловых систем. Proc. Sysfs.
Ramdisk
Системы сборки Yocto, Bildroot.
Драйверы устройств.
Модули ядра.
Qemu. Тестирование в эмуляторе.
Дисплей. Framebuffer. X11. Xorg.conf
Конфигурирование сети. Glibc – сетевые компоненты.
После погружения в мир embedded – линукс, мне потребовалось некоторые моменты описать
для лучшего собственного понимания и усвоения знаний. Это и стало первым этапом к написанию
этой статьи. Получится ли дать в ней конкретные рекомендации по сборке и адаптированию OC
линукс под нужды любого embedded – программиста или программиста, я не уверен, ноя
постараюсь изложить все доступно и описать практическую часть работы с теми платами, которые
у меня имеются в наличии. А это плата VisionCB-STD компании SoMLabs c установленным на нее
процессорным модулем VisionSOM-6ULL, и плата GW-5404 от кампании Gateworks.
Обзор средств разработки предоставляемых Somlabs, Gateworks.
Плата от SoMLabs появилась у меня после посещения семинара «Семинар – Процессоры
компании NXP серии I.MX6», который был очень интересный, но на многие вопросы касающиеся
embedded –линукс ответов не дал, но указал мне направления для самостоятельных исследований
за что им большое спасибо. И так, что бы начать работать с платой требуется совсем не много: сама
плата , sd-карта с образом системы линукс, компьютер и патч-корд RJ45-RJ45 для подключения
платы к сети Ethernet. Имея все это, что можно сделать: развернуть на плате debian-линукс,
подключить плату к Ethernet-u, зайти на нее с компьютера по ssh-протоколу, писать программы на
С/Python/JavaScript компилируя их (если это требуется) средствами gcc компилятора,
установленного в debian-линукс. По умолчанию на плате не установлен дисплей и линукс собран
без поддержки X11-сервера, но графические приложения можно запустить, используя удаленный
дисплей. Еще Somlabs на их сайте предоставляют архив somlabs-visionsom-6ull-debian-rootfsqemu.tar.xz в котором образ файловой системы устройства с настроенным пакетом qemu-user-
static. Нужно распаковать этот архив в линукс систему на основе debian установленную на
компьютере. Например, Ubuntu 16.04. Потом, надо зайти в каталог и выполнить скрипт chtoolchain,
который средствами chroot установит корневой каталог в существующий каталог и запустит
терминал, эмулирующий работу arm-системы на компьютере с архитектурой x86.
Что же за преимущества нам это дает: у нас есть эмулятор работы нашего embedded-линукс на
компьютере, в этом эмуляторе установлен компилятор и все библиотеки, мы можем писать
программы и запускать их, можем пересобрать ядро линукс для нашей платы.
Как это работает и как этого добились вкратце я расскажу здесь, а подробнее разверну в
главе про qemu. Вкратце, системный вызов chroot устанавливает текущий каталог как root, скрипты
chtoolchain и somlabs-toolchain-chroot монтируют и настраивают файловую систему, аналогичную
файловой системе на плате, а qemu-user-static транслирует системные вызовы ядра
скомпилированного под arm в системные вызовы ядра x86.
Вторая плата которая у меня есть это GW-5404 от кампании Gateworks. На ней железо
посерьезнее: процессор тоже i.mx6 (как и в плате от SomLabs) но уже 4-ядерный, есть HDMI
интерфейс, PCIexpress, Jtag-адаптер для записывания системы в NAND-flash установленную на
плате.
На сайте производителя так же можно скачать готовые образы линукс (с поддержкой
графики и без) пригодные к установке на плату. Так же можно с сайта скачать архив с toolchain-ом
(компилятор и необходимые библиотеки и утилиты) используя который можно компилировать
свои программы на x86 компьютере для arm архитектуры, или пересобрать ядро линукс, включив
поддержку нужных драйверов.
Так же хочу обметить что на сайте компании Gateworks есть раздел wiki в котором можно
найти массу полезной информации по работе с платой, сборке и настройке линкус, включения
драйверов ….
Казалось бы, не очень хорошо, что в Gateworks не дает образа (и даже инструкции) как
сделать виртуальную arm-машину, но, во-первых, железо GW-5404 достаточно мощное, и можно
вести разработку подключившись ssh прямо к плате, а во-вторых по hdmi-интерфейсу легко
подключить любой монитор, затем установить линукс с поддержкой GUI и можно сразу на экране
устройства видеть результаты работы своих программ и это мало чем отличится от
программирования для обычных ПК. И язык программирования тоже можно выбрать абсолютно
любой.
Плата VisionSOM-6ULL основные технические характеристики:











i.MX6-ull NXP 792 MГЦ ARM® Согtех—А7; (1 ядро)
ОЗУ 512 МиБ DDR3;
разъем для карты micrоSD, которую можно использовать как загрузочное
устройство;
порт хоста/устройства mini-USB OTG, который можно использовать для
подачи питания плате и для разработки и отладки;
порт хоста mini-USB;
порт Ethernet 10/100;
разъем RGB24 для подключения дисплея;
разъем Raspberry PI для подключения датчиков;
разъем Arduino Shields для подключения датчиков;
4 кнопки;
4 светодиода;
Плата GW5404 основные технические характеристики:
























i.MX6 Quad Core CPU @ 1GHz ARM® Согtех—А9; (4 ядра);
2Gbyte DDR3-1066 DRAM;
2Gbytes System Flash;
5 Mini-PCIe Sockets;
разъем для карты micrоSD, которую можно использовать как загрузочное
устройство;
разъем для SIM-карты;
2-портa Ethernet 10/100;
порт хоста/устройства mini-USB OTG;
полноразмерный порт хоста USB 2.0;
micro-HDMI выход;
micro-HDMI вход;
разъем подключения LVDS дисплея;
GPS модуль установленный на плату, разъем для подключения антенны;
разъем выход аналогового видео сигнала;
разъем вход аналогового видео сигнала;
разъем выход аналогового аудио сигнала;
разъем вход аналогового аудио сигнала;
разъем CAN/RS485;
разъем двух интерфейсов RS232;
разъем интерфейсов DIO/I2C;
разъем подключения вентилятора;
разъем подключения JTAG-адаптера;
4 кнопки;
1 светодиод;
Что есть линукс?
Linux — семейство Unix-подобных операционных систем на базе ядра Linux, включающих
тот или иной набор утилит и программ проекта GNU, и, возможно, другие компоненты.
С точки зрения пользователя операционная система состоит из двух частей - ядро и
окружение. Ядро понятное дело, это системные вызовы, работа с аппаратурой и процессами.
Окружение - это то, с чем взаимодействует пользователь, набор утилит, программ и системы
запуска. Как можно догадаться, на разные ядра можно прикручивать разное окружение. Состав
ядра и окружения задает дистрибутив - набор из ядра и окружения.
Так вот, версии Unix-подобных операционных систем и отличаются именно этими
наборами, есть дистрибутивы классических юникс-систем, типа BSD (openbsd, freebsd, solaris ...).
Есть дистрибутивы Linux, отличающиеся в основном окружением, имея одно и тоже ядро linux.
Теперь поговорим про окружение. В состав практически каждого окружения входит такая
вещь, как пакетный менеджер., через который происходит установка и развертывание самого
Окружения. Вот по типу пакетных менеджеров и отличаются обычно дистрибутивы linux. Есть
debian-подобные подобные дистрибутивы (dpkg), есть redhat-подобные (rpm), есть
альтернативные (pacman, yast, make world).
В-общем, все линуксы имеют в своем составе ядро linux + какой-то из пакетных
менеджеров + систему запуска типа init/systemd/upstart + набор программ на выбор основателей
дистрибутива. Все юниксы имеют одно из ядер unix + все остальное тоже самое, но своё! Ну и вся
история юникс красиво описана в https://ru.wikipedia.org/wiki/UNIX
Теперь поговорим про о встраиваемой операционной системе Linux с точки зрения
embedded-программиста. Любой проект начинается с получения, модификации под свои нужды и
развертывания пяти элементов: набора инструментов, начального загрузчика, ядра, корневой
файловой системы, набор программ составляющих встраиваемое приложение.
 Набор инструментов: состоит из компилятора и прочих инструментальных средств,
необходимых для написания программы. От набора инструментов зависит все остальное.
 Начальный загрузчик: необходим для инициализации платы, загрузки ядра Linux в
оперативную память.
 Ядро: это сердце системы, оно управляет всеми ресурсами и осуществляет
взаимодействие с оборудованием
 Корневая файловая система содержит библиотеки и программы, исполняемые после
завершения инициализации ядра.
 Набор программ составляющих встраиваемое приложение. Благодаря ему устройство
выполняет свои функции. будь то взвешивание получения показаний с датчиков, показ
фильмов, управление роботом ил полет дрона.
Как правило, все или некоторые из этих элементов предлагаются в виде пакета
при покупке нужной вам SoC-системы или платы. Но это не всегда оптимальный выбор. Ниже в
этой статье я опишу как получить набора инструментов и с его помощью собрать начальный
загрузчик, ядро, корневую файловую систему. Я также опишу с два инструментами автоматизации
этого процесса: Buildroot н Yocto Project.
На что обращать внимание при проектировании или выборе оборудования для
проекта встраиваемой Linux-стемы?
Прежде всего на архитектуру процессора, поддерживаемую ядром. В исходном коде Linux
4.1 есть 30 архитектур, представленных отдельными подкаталогами каталога arch/. Среди них 32и 64-разрядные архитектуры по большей части с блоком управления памятью (MMU), хотя это не
обязательно. Во встраиваемых устройствах чаще всего встречаются архитектуры ARM, MIPS,
PowerPC н Х86, каждая из которых существует в 32- и 64-разрядпых вариантах, и все они включают
блок управления памятью.
Во-вторых, нужно иметь достаточный объем оперативной памяти (ОЗУ): 16 Мб -неплохой
минимум, хотя, в принципе, для работы Linux достаточно и половины. Можно запустить Linux
даже в 4 Мб если вы готовы потратить усилия на оптимизацию каждой части системы. Можно
пойти и дальше, но рано или поздно наступает момент, когда систему уже нельзя назвать Linux.
В-третьих, встает вопрос об энергонезависимой памяти, обычно флэш—памяти. 8 МБ
достаточно для простого устройства типа веб-камеры или простенького маршрутизатора. Чем
меньше памяти, тем труднее становиться задача по установки Linux на плату. Linux прекрасно
поддерживает флэш—память: в том числе приборы, выполненные по технологиям NOR п NAND, и
управляемую флэш-память в форме SD-карт, микросхем eMMC, флэш-памяти с интерфейсом
USB и т. д.
В-четвертых, очень полезен порт для отладки, обычно это порт последовательного
интерфейса RS-232. Оснащать им готовое изделие не обязательно, но на этапе подготовки платы к
производству он заметно ускоряет разработку и отладку.
В-пятых, если вы начинаете с чистого листа, то понадобятся какие-то средства загрузки
программы. Иногда для этой цели используется интерфейс JTAG, но современные системы на
кристалле умеют читать код начальной загрузки прямо со съемного запоминающего устройства, в
частности карты SD или из последовательного интерфейса типа RS-232 или USB.
Наконец, предстоит написать драйверы для уникальных интерфейсов разрабатываемого
устройства или подрядить кого-то для выполнения этой работы. 
Для платы VisionSOM-6ULL у нас есть возможность записывать прошивку для процессора
только на карту microSD b и потом запускать линукс из загрузчика U-boot, взаимодействуя с платой
через usb как через терминал.
Для платы GW5404 у нас есть возможность записать прошивку (просто программу или
загрузчик или линукс) через JTAG-интерфейс прямо в nand-Flash. Так же JTAG обеспечивает нам
терминал для взаимодействия с платой. Можно так же записать образ линукс на карту microSD
или на USB накопитель и загрузить линукс оттуда через загрузчик U-boot.
cross-tools (компилятор, библиотека С)
Cross-tools, он же “набор инструментов” - предназначен для компиляции исходного
кода в исполняемый файл, который можно выполнить на целевом устройстве. Он включает
компилятор, компоновщик и библиотеки времени выполнения. Прежде всего набор
инструментов нужен, чтобы собрать остальные три элемента встраиваемой Linux-системы
начальный загрузчик, ядро и корневую файловую систему. Обычно наборы инструментов для
Linux основаны на компонентах из проекта GNU (http://www.gnu.org).
Стандартный кросс-платформенный набор инструментов GNU состоит из трех
основных компонентов:
 Утилиты (binutils): утилиты представляют собой набор программ, необходимых для
компиляции/компоновки/ассемблирования и других операций отладки.
 Компилятор GNU языка Си (GNU C compiler): основной компилятор языка Си,
используемый для генерации объектного кода (и ядра, и приложений).
 Библиотека GNU языка Си (GNU C library): эта библиотека реализует интерфейсы
системных вызовов, таких как open, read, и других, а также других вспомогательных
функций. Все разрабатываемые приложения должны быть скомпонованы с этой базовой
библиотекой.
Кроме того, понадобятся заголовочные файлы ядра Linux, содержащие определения, и
константы необходимые для прямого доступа к ядру. Прямо сейчас они потребуются для
компиляции библиотеки С, а впоследствии — при разработке программ и компиляции библиотек.
обращающихся к конкретным устройствам Linux: например для вывода графики с помощью
драйвера буфера кадра. Для этого нужно сгенерировать набор заголовков ядра предназначенных
для взаимодействия с библиотекой С. (Как это сделать будет показано ниже)
Выбор правильной комбинации версий - это самая сложная часть из всех шагов и, скорее
всего, причина всех проблем. Необходимо проделать некоторые исследования и принять
решение о правильном сочетании версий, которое будет работать на вашей целевой платформе.
Для этого прочитайте наиболее активные архивы списков рассылки. Например, в качестве
хорошей комбинации для ARM-Linux известны ARM/Kernel 2.6/GCC 2.95.1, GCC 3.3/BINUTILS 2.10.x
или ARM/Kernel 2.4/GCC 2.95.1/BINUTILS 2.9.5. (Мы в своих проектах будем использовать такую
комбинацию …)
Типы наборов инструментов – платформенные и перекрестные
 Платформенный. Работает в системе того же типа (иногда просто той же самой), что и
система, для которой компилируются программы. Это типично настольных ПК, но для
имеющихся у меня плат от GATEWORKS и SomLabs тоже есть собственные платформенные
компиляторы.
 Перекрестный. Работает в системе. отличной от целевой платформы, т. е. позволяет,
например, вести разработку на быстром настольном ПК и загружать сгенерированный код
во встраиваемое устройство для тестирования.
Если проект не очень большой, то его можно собирать и отлаживать прямо на
целевой платформе. А если проект достаточно велик, то компиляция на целевой
платформе будет затруднительна из-за временных издержек. К примеру, попробуйте
собрать Boost на NXP i.mx6. Думаю, ожидание сборки будет продолжительным, а если
ещё и ошибки какие всплывут, то это может занять ох как много времени. Поэтому лучше
собирать на хосте.
Набор инструментов должен быть создан с учетом возможностей целевого процессора, в
том числе:


Архитектура процессора: arm, mips. x86764 и т. д.
Порядок байтов в слове: некоторые процессоры могут работать в обоих
режимах (little-endian и big-endian) но машинный код будет различаться.
 Поддержка арифметики с плавающей точкой: не во всех встраиваемых
процессорах имеется аппаратный блок для операций с плавающей точкой,
и в таком случае набор инструментов нужно сконфигурировать для вызова
програмной библиотеки.
 Двоичный интерфейс приложений (ABI): соглашение о передаче параметров
при вызове функций.
Для многих архитектур ABI один и тот же для всего семейства процессоров.
Заметное исключение составляет архитектура АRM, для которой в конце 2000-х годов
произошел переход на расширенный двоичный интерфейс приложений (ЕАВI),
а прежний ABI стал называться старым двоичным интерфейсом приложений
(OABI). Хотя OABI теперь считается устаревшим до сих пор можно встретить
упоминания EABI. C той поры EABI разделился на два интерфейса в зависимости от
метода передачи параметров с плавающей точкой. В оригинальном EABI
используются регистры общего назначения (целочисленные)‚ а в более позднем
EABIHF — регистры с плавающей точкой. Интерфейс EABIHF показывает гораздо
более высокое быстродействие на операциях с плавающей точкой поскольку
устраняет необходимость копирования между целыми и плавающими регистрами. однако
он несовместим с процессорами не оснащенными блоком операций с плавающей точкой.
Следовательно, приходится выбирать между двумя несовместимыми ABI: использовать в
одной программе оба нельзя, и решение нужно принимать на этом этапе.
В проекте GNU в названиях инструментов используется префикс, описывающий
допустимые комбинации генерируемого кода. Префикс состоит из трех или
четырех частей, разделенных дефисами:




Процессор: архитектура процессора, например arm, mips bkb х86_64.
Если процессор поддерживает оба порядка байтов, то для их различия можно
добавить суффикс el или eb (mipsel, armeb).
Поставщик: производитель набора инструментов. например: buildroot, poky или просто
unknown, часто эта часть вообще опускается.
Ядро: для наших целей всегда linux
Операционная система: имя компонента в пользовательском адресном
пространстве: gnu, uclibcgnu. В конце может быть также указан АВI. Tак что
наборы инструментов для ARM могут включать строки gnueabi, gnueabihf,
uclibcgnueabi, uclibcgnueabihf.
Какая четверка была использована при сборке набора инструментов можно узнать,
выполнив команду с флагом -dumpmachine.
Так для VisionSom:
root@ilya_ubuntu_64:/# gcc –dumpmachine
arm-linux-gnueabihf
Для GW5404:
root@ilya_ubuntu_64:$ arm-openwrt-linux-gcc –dumpmachine
arm-openwrt-linux-muslgnueabi
Как видим, в наборе инструментов для GW5404 упоминается musl. Это новая библиотека
С предназначенная для встраиваемых систем. Давайте поговорим о библиотеках С.
Библиотека С
Программный интерфейс обращения к операционной системе Unix определен в
языке С и закреплен в стандартах POSIX. Библиотека С представляет собой реализацию
этого интерфейса – шлюз к ядру Linux (как одной из разновидности unix-систем) из
программ. Даже если программа написана на другом языке: Java, Python,
сопровождающие его библиотеки времени выполнения в конечном итоге должны будут
обратится к библиотеке С, и только через нее к ядру. Библиотека С производит
системный вызов для перехода из пользовательского пространства в пространство ядра
и так осуществляет доступ к сервисам ядра.
Перечислю основные библиотеки С:
 glibc. Это стандартная библиотека GNU C. Она очень большая и до недавнего
времени не допускала особой настройки, по содержит самую полную реализацию
POSIX API.
 uClibc. Разрабатывалась как библиотека С для микроконтроллеров. Изначально
разрабатывалась для работы в uClinux (Linux для процессоров без блока
управления памятью). Но затем была адаптирована для работы с полной версией
Linux. Существует утилита конфигурирования. позволяющая точно настроить
функциональность библиотеки для конкретных нужд. Даже в полной конфигурации
эта библиотека меньше glibc, но уступает в полноте реализации стандартов
POSIX.
 musl libc. Новая библиотека С предназначенная для встраиваемых систем.
Заявлена совместимость со спецификацией POSIX 2008 и стандартом языка C11.
Также в musl реализованы многие нестандартные наборы библиотечных функций,
используемые в Линукс, BSD и реализованные в glibc.
Хорошее сравнение этих библиотек между собой сделано здесь:
http://www.etalabs.net/compare_libcs.html
Я рекомендую использовать uCIibc, только если вы работаете с uCIinux или очень ограничены
в объеме ОЗУ либо внешней памяти (<32 Mb), тогда небольшой размер является
преимуществом. В противном случае следует использовать glibc или musl.
Но вот с точки зрения сборки, безглючности результата (userspace) я бы ранжировал так (1)
glibc, (2) uclibc, (3) musl. В самой прошивке немного userspace и оно допилено для всех
библиотек. Если же речь о сборке тысяч пакетов, то musl явно проигрывает. Посмотрите
число патчей для musl в исходниках пакетов openwrt - оно огромно!
Получение набора инструментов
Есть три варианта получить набор инструментов: найти уже собранный набор отвечающий
вашим потребностям: взять тот что сгенерирован инструментом сборки встраиваемой
системы (Yocto, Buildroot), или собрать самостоятельно как описано ниже в этой главе.
Готовый набор инструментов привлекателен тем, что вам остается только скачать и
установить его, но при этом вы ограничены заданной кем-то конфигурацией
и зависите от поставщика. Скорее всего. в роли поставщика будет выступать:






Производитель SoC-системы или платы. Большинство производителей предоставляют
набор инструментов для Linux.
Консорциум, организованный для системной поддержки определенной архитектуры.
Например, некоммерческая организация Linaro (https://www.linaro.org) распространяет
готовые наборы инструментов для архитектуры ARM.
Сторонние поставщиком инструментов для Linux. например: Mentor Graphics. TimeSys
или MontaVista.
Пакеты перекрестных инструментов, входящие в дистрибутив Linux для настольных
ПК. Например, в дистрибутивах. производных от Debian есть пакеты кросс-компиляции
для платформ ARM, MIPS, PowerPC.
Двоичный SDK, сгенерированиый одним из интегрированных инструментов сборки
встраиваемых систем. В проекте Уосго Project есть примеры на странице
http://autobuilderyoctoproject.org/pub/releases/CURRENT/toolchain, a по адресу
ftp://ftp.denx.de/pub/eldk/ выложен комплект средств разработки Denix
Embedded Linux Development Kit.
Опубликованная на каком-то форуме ссылка. которую вы больше не може—
те найти
В любом случае предстоит решить, отвечает ли готовый набор инструментов
вашим требованиям. Используется ли в нем предпочтительная для вас библиотека С?
Публикует ли поставщик обновления для исправления ошибок и устранения уязвимостей.
Если ответ хотя бы на один вопрос отрицательный, то стоит подумать о самостоятельном
построении набора инструментов
Увы, собрать набор инструментов не так-то просто. Если вы твердо решили
пройти этот путь до конца, зайдите на сайт Cross Linux From Scratch. Там приведены
пошаговые инструкции по созданию каждого компонента
Есть и более простой способ — воспользоваться средством crosstool-NG, которое
инкапсулирует весь процесс в набор скриптов управляемый меню.
Проще прибегнуть к системе сборки типа Buildroot или Уосtо Project. поскольку генерация
набора инструментов в этом случае является составной частью процесса сборки.
Сборка набора инструментов c помощью crosstool-NG
Я начну с использования crosstool-NG, потому что это позволит нам увидеть весь
процесс создания набора инструментов и создать несколько таких наборов разного типа
Прежде всего понадобится работоспособный кросс-платформенный набор инструментов и
средства сборки на вашем исходном ПК. Для работы с crosstool-NG в системе Ubuntu нужно
установить следующие пакеты:
$ sudo apt-get install automake bison chrpath g++ git gpref gawk
libexpat1-dev libncurces5-dev libsdl1.2-dev libtool python2.7-dev texinfo
Затем скачайте текущую версию croostool-NG со страницы
http://crosstooI-ng.org/download/crosstool-ng
Распакуйте архив и скомпилируйте программу ct-ng:
$ tar xf crosstool-ng-1.24.0.tar.bz2
$ cd crosstool-ng-1.24.0
$ ./configure –-enable-local
$ make
$ make install
Флаг --enable-local означает, что программа будет установлена в текущий каталог. Это
позволяет обойтись без превилегий root, которые понадобились бы для
установки в каталог по умолчанию usr/local/bin. Для запуска меню наберите
./ct-ng, находясь в текущем каталоге.
Программа Crosstool-NG умеет строить различные комбинации наборов
инструментов. Для упрощения начальной настройки в ее состав входит ряд примеров,
покрывающих многие типичные случаи. Чтобы получить их список: выполните команду :
$ ./ct-ng list-samples
В данном случае для нас целевой платформой будет являться одна из плат с процессорным
ядром ARM Согtех-А9 с раздельными NEON и FPU сопроцессорами и мы хотим использовать
текущую версию glibc. Этой комбинации соответствует конфигурация
arm-cortexa9-neon-linux-gnueabihf. Чтобы узнать его текущую
конфигурацию добавим в начало имени префикс show- :
$ ./ct-ng show-arm-cortexa9-neon-linux-gnueabihf
[L..X]
arm-cortexa9_neon-linux-gnueabihf
Languages
: C,C++
OS
: linux-4.20.8
Binutils
: binutils-2.32
Compiler
: gcc-8.3.0
C library
: glibc-2.29
Debug tools
: gdb-8.2.1
Companion libs : expat-2.2.6 gettext-0.19.8.1 gmp-6.1.2 isl-0.20
libiconv-1.15 mpc-1.1.0 mpfr-4.0.2 ncurses-6.1 zlib-1.2.11
Companion tools : automake-1.16.1
Чтобы выбрать именно эту целевую конфигурацию. выполните команду:
$ ./ct-ng arm-cortexa9-neon-linux-gnueabihf
Download