Статьи

Пользовательские встраиваемые дистрибутивы Linux

  1. Зачем идти на заказ?
  2. Учебник для начинающих системы
  3. Начните с правильных инструментов
  4. Варианты загрузки
  5. Теперь принесите пингвина
  6. Легкие основные платформы
  7. Кросс-компиляция и скриптинг
  8. Что дальше

Распространение недорогих плат IoT означает, что пришло время получить контроль не только за приложениями, но и всей программной платформой. Итак, как создать собственный дистрибутив с кросс-скомпилированными приложениями, предназначенными для конкретной цели? Как объясняет Майкл Дж. Хаммель, это не так сложно, как вы думаете.

Зачем идти на заказ?

В прошлом многие встраиваемые проекты использовали готовые дистрибутивы и сокращали их до самых необходимых по ряду причин. Во-первых, удаление неиспользуемых пакетов снижает требования к хранилищу. Встраиваемые системы обычно не используют большие объемы памяти во время загрузки, и доступное хранилище в энергонезависимой памяти может потребовать копирования больших объемов ОС в память для запуска. Во-вторых, удаление неиспользуемых пакетов уменьшило возможные векторы атаки. Нет смысла цепляться за потенциально уязвимые пакеты, если они вам не нужны. Наконец, удаление неиспользуемых пакетов уменьшило накладные расходы на управление распространением. Наличие зависимостей между пакетами означает синхронизацию их, если какой-либо один пакет требует обновления из вышестоящего дистрибутива. Это может быть кошмаром проверки.

Однако начать с существующего дистрибутива и удалить пакеты не так просто, как кажется. Удаление одного пакета может привести к нарушению зависимостей, содержащихся во множестве других пакетов, и зависимости могут измениться в управлении рассылкой в ​​восходящем направлении. Кроме того, некоторые пакеты просто не могут быть удалены без особой боли из-за их интегрированной природы в процессе загрузки или выполнения. Все это берет на себя управление платформой вне проекта и может привести к неожиданным задержкам в разработке.

Популярной альтернативой является создание собственного дистрибутива с использованием инструментов сборки, доступных у вышестоящего поставщика распространения. И Gentoo, и Debian предоставляют опции для этого типа сборки снизу вверх. Наиболее популярной из них, вероятно, является утилита Debian Debootstrap. Он извлекает предварительно собранные основные компоненты и позволяет пользователям выбирать пакеты, представляющие интерес при создании своих платформ. Но debootstrap изначально был только для платформ x86. Хотя теперь есть опции ARM (и, возможно, другие), debootstrap и катализатор Gentoo по-прежнему отвлекают управление зависимостями от локального проекта.

Некоторые люди утверждают, что позволить кому-то другому управлять программным обеспечением платформы (например, Android) намного проще, чем делать это самостоятельно. Но эти дистрибутивы универсальны, и когда вы сидите на легком IoT-устройстве с ограниченными ресурсами, вы можете дважды подумать о любом преимуществе, которое может быть взято из ваших рук.

Учебник для начинающих системы

Для пользовательского дистрибутива Linux требуется ряд программных компонентов. Первый - это набор инструментов. Цепочка инструментов - это набор инструментов для компиляции программного обеспечения, включая (но не ограничиваясь этим) компилятор, компоновщик, инструменты для бинарных манипуляций и стандартную библиотеку C. Наборы инструментов созданы специально для целевого аппаратного устройства. Набор инструментов, созданный на основе системы x86, предназначенной для использования с Raspberry Pi, называется перекрестным набором инструментов. При работе с небольшими встроенными устройствами с ограниченной памятью и хранилищем всегда лучше использовать кросс-цепочку инструментов. Обратите внимание, что даже приложения, написанные для определенной цели на языке сценариев, таких как JavaScript, должны будут работать на программной платформе, которая должна быть скомпилирована с использованием кросс-цепочки инструментов.

Обратите внимание, что даже приложения, написанные для определенной цели на языке сценариев, таких как JavaScript, должны будут работать на программной платформе, которая должна быть скомпилирована с использованием кросс-цепочки инструментов

Рисунок 1. Зависимости компиляции и порядок загрузки

Кросс-инструментарий используется для создания программных компонентов для целевого оборудования. Первый необходимый компонент - загрузчик. Когда на плату подается питание, процессор (в зависимости от конструкции) пытается перейти в определенную область памяти, чтобы запустить программное обеспечение. Это место в памяти, где хранится загрузчик. Аппаратное обеспечение может иметь встроенный загрузчик, который может быть запущен непосредственно из своего хранилища, или оно может быть скопировано в память перед запуском. Также может быть несколько загрузчиков. Например, начальный загрузчик должен располагаться на оборудовании во флэш-памяти NAND или NOR. Его единственной целью было бы настроить аппаратное обеспечение таким образом, чтобы загрузчик и загрузчик второго уровня, например, хранящийся на SD-карте, мог быть загружен и запущен.

У загрузчиков достаточно знаний, чтобы довести оборудование до такой степени, что оно может загружать Linux в память и переходить к нему, эффективно передавая управление Linux. Linux - это операционная система. Это означает, что по замыслу он на самом деле не делает ничего, кроме мониторинга оборудования и предоставления услуг программам более высокого уровня - приложениям. Ядро Linux часто сопровождается различными прошивками. Это предварительно скомпилированные программные объекты, часто содержащие проприетарный IP (интеллектуальную собственность) для устройств, используемых с аппаратной платформой. При создании пользовательского дистрибутива может потребоваться приобрести любые двоичные объекты микропрограммного обеспечения, не предоставленные в дереве исходного кода ядра Linux, перед началом компиляции ядра.

Приложения хранятся в корневой файловой системе. Корневая файловая система создается путем компиляции и сбора различных программных библиотек, инструментов, сценариев и файлов конфигурации. В совокупности все они предоставляют такие услуги, как настройка сети и подключение USB-устройства, необходимые для приложений, запускаемых проектом.

Таким образом, полная сборка системы требует следующих компонентов:

  1. Кросс-цепочка.

  2. Один или несколько загрузчиков.

  3. Ядро Linux и связанные с ним прошивки.

  4. Корневая файловая система, заполненная библиотеками, инструментами и утилитами.

  5. Пользовательские приложения.

Начните с правильных инструментов

Компоненты кросс-цепочки могут быть собраны вручную, но это сложный процесс. К счастью, существуют инструменты, которые облегчают этот процесс. Лучший из них, вероятно, Crosstool-NG , Этот проект использует ту же систему меню kconfig, которая используется ядром Linux для конфигурирования кусочков набора инструментов. Ключом к использованию этого инструмента является поиск правильных элементов конфигурации для целевой платформы. Обычно это включает в себя следующие пункты:

  1. Целевая архитектура, такая как ARM или x86.

  2. Порядковый номер: маленький (обычно Intel) или большой (обычно ARM или другие).

  3. Тип процессора, который известен компилятору, например, использование GCC -mcpu или --with-cpu.

  4. Тип с плавающей запятой, поддерживаемый процессором, если таковой имеется, например, использование GCC -mfpu или --with-fpu.

  5. Конкретная информация о версии для пакета binutils, библиотеки C и компилятора C.

Рисунок 2. Меню конфигурации Crosstool-NG

Первые четыре обычно доступны из документации производителя процессора. Это может быть трудно найти для относительно новых процессоров, но для Raspberry Pi или BeagleBoards (и их потомков и отростков) вы можете найти информацию в Интернете в таких местах, как Встроенный Linux Wiki ,

Версии binutils, библиотеки C и компилятора C - это то, что отделит цепочку инструментов от любых других, которые могут быть предоставлены третьими лицами. Во-первых, есть несколько поставщиков каждой из этих вещей. Linaro предоставляет передовые версии для более новых типов процессоров, одновременно работая над объединением поддержки в исходные проекты, такие как библиотека GNU C. Хотя вы можете использовать множество провайдеров, вы можете придерживаться стандартной цепочки инструментов GNU или ее версий Linaro.

Еще одним важным выбором в Crosstool-NG является версия ядра Linux. Этот выбор получает заголовки для использования с различными компонентами набора инструментов, но он не обязательно должен совпадать с ядром Linux, которое вы загрузите на целевом оборудовании. Важно выбрать ядро, которое не новее ядра целевого оборудования. По возможности выбирайте ядро ​​долгосрочной поддержки, которое старше, чем ядро, которое будет использоваться на целевом оборудовании.

Для большинства разработчиков, впервые знакомых с пользовательскими сборками дистрибутивов, сборка инструментария является наиболее сложным процессом. К счастью, бинарные наборы инструментов доступны для многих целевых аппаратных платформ. Если создание пользовательского набора инструментов становится проблематичным, ищите онлайн в таких местах, как Встроенный Linux Wiki для ссылок на готовые наборы инструментов.

Варианты загрузки

Следующий компонент, на котором следует сосредоточиться после набора инструментов, - загрузчик. Загрузчик устанавливает аппаратное обеспечение, чтобы его можно было использовать с более сложным программным обеспечением. Первоначальный загрузчик часто предоставляется производителем целевой платформы и записывается в аппаратное хранилище, такое как флэш-память EEPROM или NOR. Загрузчик первого этапа позволит загружаться, например, с SD-карты. Raspberry Pi имеет такой загрузчик, который делает ненужным создание собственного загрузчика.

Несмотря на это, многие проекты добавляют дополнительный загрузчик для выполнения различных задач. Одной из таких задач может быть обеспечение анимации всплеска без использования ядра Linux или инструментов пользовательского пространства, таких как Plymouth. Более распространенная задача вторичного загрузчика - сделать доступными сетевые загрузочные или подключенные по PCI диски. В этих случаях третичный загрузчик, такой как GRUB, может быть необходим для запуска системы.

Самое главное, загрузчики загружают ядро ​​Linux и запускают его. Если загрузчик первого уровня не предоставляет механизм для передачи аргументов ядра во время загрузки, может потребоваться загрузчик второго уровня.

Доступен ряд загрузчиков с открытым исходным кодом. U-Boot проект часто используется для платформ ARM, таких как Raspberry Pi. CoreBoot обычно используется для платформы x86, такой как Chromebook. Загрузчики могут быть очень специфичными для целевого оборудования. Выбор загрузчика будет зависеть от общих требований проекта и целевого оборудования (поиск списков загрузчиков с открытым исходным кодом осуществляется в режиме онлайн).

Теперь принесите пингвина

Загрузчик загрузит ядро ​​Linux в память и запустит его. Linux похож на расширенный загрузчик: он продолжает настройку оборудования и готовится к загрузке программного обеспечения более высокого уровня. Ядро ядра настроит и подготовит память для совместного использования между приложениями и оборудованием, подготовит управление задачами для одновременной работы нескольких приложений, инициализирует компоненты оборудования, которые не были настроены загрузчиком или были настроены не полностью, и начнет интерфейсы для человеческое взаимодействие. Однако ядро ​​может быть не настроено на это самостоятельно. Он может включать встроенную облегченную файловую систему, известную как initramfs или initrd, которая может быть создана отдельно от ядра для помощи в настройке оборудования.

Еще одна вещь, которую обрабатывает ядро ​​- загрузка двоичных двоичных объектов, обычно называемых прошивками, на аппаратные устройства. Микропрограмма - это предварительно скомпилированные объектные файлы в форматах, характерных для конкретного устройства, которые используются для инициализации оборудования в местах, к которым загрузчик и ядро ​​не могут получить доступ. Многие такие объекты прошивки доступны из репозиториев ядра Linux, но многие другие доступны только от конкретных поставщиков оборудования. Примеры устройств, которые часто предоставляют свои собственные прошивки, включают цифровые ТВ-тюнеры или сетевые карты WiFi.

Встроенное ПО может быть загружено из initramfs или может быть загружено после того, как ядро ​​запустит процесс init из корневой файловой системы. Тем не менее, создание ядра часто будет процессом, при котором получение прошивки будет происходить при создании пользовательского дистрибутива Linux.

Легкие основные платформы

Последнее, что делает ядро ​​Linux, - это пытается запустить определенную программу, называемую процессом init. Это может быть имя init или linuxrc, или имя программы может быть передано ядру загрузчиком. Процесс init хранится в файловой системе, к которой может обращаться ядро. В случае initramfs файловая система хранится в памяти (либо самим ядром, либо загрузчиком, помещающим ее туда). Но initramfs, как правило, не достаточно завершен, чтобы запускать более сложные приложения. Поэтому требуется другая файловая система, известная как корневая файловая система.

Поэтому требуется другая файловая система, известная как корневая файловая система

Рисунок 3. Меню конфигурации Buildroot

Файловая система initramfs может быть собрана с использованием самого ядра Linux, но чаще всего она создается с помощью проекта под названием BusyBox , BusyBox объединяет набор утилит GNU, таких как grep или awk, в один двоичный файл, чтобы уменьшить размер самой файловой системы. BusyBox часто используется для быстрого запуска создания корневой файловой системы.

Но BusyBox намеренно легкий. Он не предназначен для предоставления каждого инструмента, который понадобится целевой платформе, и даже те, которые он предоставляет, могут быть уменьшены. У BusyBox есть родственный проект, известный как Buildroot , который может быть использован для получения полной корневой файловой системы, предоставляя различные библиотеки, утилиты и языки сценариев. Как и Crosstool-NG и ядро ​​Linux, BusyBox и Buildroot позволяют настраивать пользовательские параметры с помощью системы меню kconfig. Что еще более важно, система Buildroot автоматически обрабатывает зависимости, поэтому выбор данной утилиты гарантирует, что любое требуемое программное обеспечение будет также собрано и установлено в корневой файловой системе.

Buildroot может генерировать архив корневой файловой системы в различных форматах. Однако важно отметить, что только файловая система заархивирована. Отдельные утилиты и библиотеки не упакованы ни в форматы Debian, ни в RPM. Использование Buildroot создаст образ корневой файловой системы, но его содержимое не является управляемым пакетом. Несмотря на это, Buildroot предоставляет поддержку как для менеджеров пакетов opkg, так и для rpm. Это означает, что пользовательские приложения, которые будут установлены в корневой файловой системе, могут управляться пакетами, даже если сама корневая файловая система не установлена.

Кросс-компиляция и скриптинг

Одной из особенностей Buildroot является возможность создавать промежуточное дерево. Этот каталог содержит библиотеки и утилиты, которые можно использовать для кросс-компиляции других приложений. Благодаря промежуточному дереву и кросс-цепочке инструментов становится возможным компилировать дополнительные приложения вне Buildroot на хост-системе, а не на целевой платформе. Используя rpm или opkg, эти приложения затем можно установить в корневую файловую систему на цели во время выполнения с помощью программного обеспечения для управления пакетами.

Большинство пользовательских систем построены вокруг идеи создания приложений с использованием языков сценариев. Если на целевой платформе требуются сценарии, в Buildroot доступны различные варианты, включая Python, PHP, Lua и JavaScript через Node.js. Поддержка также существует для приложений, требующих шифрования с использованием OpenSSL.

Что дальше

Ядро Linux и загрузчики компилируются, как и большинство приложений. Их системы сборки предназначены для создания определенного программного обеспечения. Crosstool-NG и Buildroot являются метабилдами. Metabuild - это система сборки оболочки вокруг набора программного обеспечения, каждое из которых имеет свои собственные системы сборки. Альтернативы этим включают Yocto а также OpenEmbedded , Преимущество Buildroot заключается в том, что он может быть обернут мета-сборкой еще более высокого уровня для автоматизации специализированных сборок дистрибутива Linux. Это открывает возможность указывать Buildroot на репозитории кэша конкретного проекта. Использование кеш-репозиториев может ускорить разработку и позволяет создавать снимки, не беспокоясь об изменениях в вышестоящих репозиториях.

Примером реализации системы сборки более высокого уровня является PiBox , PiBox - это метабилд, охватывающий все инструменты, обсуждаемые в этой статье. Его цель состоит в том, чтобы добавить общую конструкцию цели GNU Make вокруг всех инструментов, чтобы создать базовую платформу, на которой можно создавать и распространять дополнительное программное обеспечение. PiBox Media Center и проекты киосков - это реализации программного обеспечения прикладного уровня, установленного поверх базовой платформы для создания специализированной платформы. Проект Железный Человек предназначен для расширения этих приложений для домашней автоматизации, интегрированных с голосовым управлением и управлением IoT.

Но PiBox - ничто без этих основных программных инструментов, и он никогда не сможет работать без глубокого понимания полного процесса сборки пользовательских дистрибутивов. И PiBox не мог бы существовать без долгосрочной преданности команд разработчиков для этих проектов, которые сделали создание пользовательских дистрибутивов задачей для масс.

Зачем идти на заказ?
Итак, как создать собственный дистрибутив с кросс-скомпилированными приложениями, предназначенными для конкретной цели?
Зачем идти на заказ?

Новости

Блог по SEO-продвижению
Всем доброго времени суток! С вами на связи Макс Метелев и порадую я вас сегодня свеженьким постом на тему — как раскрутить блог в интернете. Мало просто создать блог, для этого необходимо провести

Встраиваемые вытяжки
Современные кухни обустроены полным комплектом оборудования, чтоб хозяйка и домочадцы ощущали себя очень комфортабельно. Одним из нужных компонент современных кухонь является вытяжка. Тяжело представить,

Контроль герметичности
Течь - этo канал либо пористый участок издeлия либо егo частей, нарушающих их плотность. Кaк правило, малые соответствующие размeры течей исключают возможность иx зрительного наблюдения либо обнаружения

Кымдан 2 купить
Доныне Кымдан-2 Инъекция более 30 раз была представлена на муниципальных и интернациональных выставках и удостоена золотых медалей и премий, сначала золотой медали WIPO (Глобальная организация умственной

Анализ сайта школы
За последние несколько лет школьные сайты перешли из разряда инновационных технологий, доступных и используемых единичными лидерами информационного движения, в категорию массовой практики. Более того,

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

Доставка контейнера из китая
телефон: +86 13999179145 Гуанчжоу телефон: +86 18609000245 ТЕКУЩЕЕ ВРЕМЯ Новосибирск Китай USD/RUB63. 907410

Помощь в подборе автомобиля
Наша компания предлагает Вам помощь в подборе автомобиля. В ближайшее время число автомобилей на дорогах Рф постоянно возрастает, неограниченное количество машин продаётся и покупается. К огорчению не

Регистрация доменов
Обычно любая работа над созданием сайта начинается на компьютере, но после того, как сайт готов, его необходимо разместить во всемирной паутине интернет. Естественно, что у тех новичков, кто создал свой

Капитальный ремонт квартир
Ремонт — дело не только лишь не дешевое, да и долгое. Время от времени есть возможность переработать интерьер квартиры при помощи косметического ремонта, который обходится существенно дешевле, чем серьезный.

Карта