Статьи

Пользовательские встраиваемые дистрибутивы 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 не мог бы существовать без долгосрочной преданности команд разработчиков для этих проектов, которые сделали создание пользовательских дистрибутивов задачей для масс.

Похожие

Почта Zoho теперь оптимизирована для iPad
Помимо запуска собственных приложений для Android а также iPhone Мы продолжаем совершенствовать наши веб-приложения, оптимизированные для мобильных устройств. Наше мобильное веб-приложение http://m.zoho.com был оптимизирован для работы
Кровать в гостевую комнату - что выбрать и почему? - Meblobranie.pl совет
Не обманывайте себя, неиспользованная повседневная гостевая комната обычно превращается в гардеробную, сушильную комнату, гладильную комнату,
Joomla 3.9 и Joomla 3.10
Детали созданы: 08 мая 2018 Как вы, скорее всего, знаете, Общее положение о защите данных (GDPR) вступит в силу 25 мая 2018 года. Joomla, прислушиваясь к своим пользователям, намеревается интегрировать Privacy Tool Suite в Joomla CMS, чтобы обеспечить соответствие
Категории - чаевые Удастся ли тебе насладиться необычным подарком? Хорошо и редко делается, поэтому я и...
Категории - чаевые Удастся ли тебе насладиться необычным подарком? Хорошо и редко делается, поэтому я ищу что-то особенное. У нас есть несколько предложений для вас, которые позволят вам убить в глазах цуккини
Торговля криптовалютами - лучшие платформы 2019 года в 3 этапа
Если вы хотите торговать криптом в валютах, вам нужен только правильный брокер для торговли. Криптовалюта - это цифровой способ оплаты всех видов онлайн-продуктов и услуг. Их основой является сложная система, основанная на разных серверах и техническом шифровании. Пока есть только
Выпущена стабильная версия Wine 4.0 - устанавливается на Debian, Ubuntu и Linux Mint
Wine - это бесплатная и простая в использовании программа с открытым исходным кодом, которая позволяет пользователям Linux запускать некоторые приложения на базе Windows в Unix-подобных операционных системах. Wine - это слой совместимости для установки практически всех версий программ Windows. Читайте также : Установите Wine 4.0 в RedHat / CentOS
Эксперименты: как превратить «динозавров» газетной эры в современные онлайн-медиа
общественный Пространство Что будет, если некоторым локальным интернет-изданием с дизайном «вырви глаз» и текстами в стиле «советский союз бессмертный» дать современный сайт, научить делать качественные материалы, привлечь мотивированных людей и обеспечить длительной менторской поддержкой? Именно такой эксперимент год назад начала команда общественной организации «Дирижабль», запустив проект, направленный на развитие локальных
Мы объясняем, что такое спам
Что такое спам, как он работает и как с ним бороться. Об этом мы говорим с нашими пользователями практически каждый день. Вот почему я решил описать, как все работает. В самом начале мы должны определить определение спама, которое имеет много форм и вариаций. В нашей отрасли спам - это в основном электронные письма, рассылаемые массово пользователям, которые не заказывали и не принимали такую ​​корреспонденцию. Спам также возникает в других каналах связи, таких как веб-сайты, SMS и
Монокристаллические солнечные панели против поликристаллических солнечных батарей
Когда вы оцениваете солнечные панели для вашей фотоэлектрической (PV) системы, вы столкнетесь с двумя основными категориями вариантов панелей: монокристаллические солнечные панели (моно) и поликристаллические солнечные панели (поли). Оба типа панелей производят энергию солнца, но есть некоторые ключевые различия, о которых следует помнить. Монокристаллические солнечные панели и поликристаллические солнечные панели: все о клетках Как монокристаллические,
Инструкции по настройке управления компьютером в Windows 8 на компьютере Dell
Следующая статья содержит информацию об утилите «Управление компьютером» и о том, как вы будете делать это на своем компьютере Dell с Windows 8. Содержание: Что такое утилита управления компьютером Windows 8? Чтобы открыть и использовать программу управления компьютером Использование оснастки Использование инструментов
Возможно, впервые с момента появления Macintosh, мы можем порадоваться использованию системных шрифтов пользовательского ...
Возможно, впервые с момента появления Macintosh, мы можем порадоваться использованию системных шрифтов пользовательского интерфейса. Это интересная, свежая альтернатива веб-типографике , которая не требует службы доставки веб-шрифтов или файлов шрифтов, хранящихся на вашем сервере. Как мы используем системные шрифты пользовательского интерфейса на веб-сайте, и каковы предостережения? Системные пользовательские интерфейсы были просто удивительными. Google с большим успехом

Комментарии

Зачем вам нужен еще один пропущенный подарок, который вы с сожалением убрали на полку и думаете, что снова не получили то, что хотели?
Зачем вам нужен еще один пропущенный подарок, который вы с сожалением убрали на полку и думаете, что снова не получили то, что хотели? Ни один мужчина не выберет для тебя что-то лучшее, чем ты сам. Время перемен 8 марта - хорошая возможность для перемен. С приходом весны стоит больше сосредоточиться на себе. На свои ожидания, планы и мечты. Женский день должен стать движущей силой перемен, границей, отделяющей зимнюю версию вас - этой ленивой, а иногда даже
Что по плану?
Что по плану? Своим проектом Агентство локальных медиа «Или» мы не создаем редакции - мы ищем уже существующие редакции, смогут с нами немного лучше существовать. На этот раз мы получили 78 заявок. В сентябре-октябре планируем запустить еще 10 новых редакций. Заявки проходят несколько этапов отбора.
Что будет включать этот набор инструментов конфиденциальности?
Что будет включать этот набор инструментов конфиденциальности? У нас есть план! Мы намерены добавить следующие инструменты конфиденциальности в Joomla 3.9: Предоставьте API для разработчиков расширений, чтобы они могли сообщать о собранных данных, и эта информация может отображаться в новом расширении com_privacy (Core API Project Board) Получите согласие зарегистрированных
Что это такое и какие функции он может предложить?
Что это такое и какие функции он может предложить? фото Indiegogo FELIX - это компьютер, который управляет нашим аквариумом. Благодаря этому мы можем управлять аквариумом современным способом - с помощью приложения для смартфона. FELIX также поддерживает голосовые команды - он совместим со
Что такое предварительный просмотр OneDrive?
Что такое предварительный просмотр OneDrive? Это связано с проектом неограниченного дискового пространства, о котором уже Некоторое время назад мы написали. Вы можете получить еще одно дополнительное место, зайдя в эта ссылка тем не менее, вы должны иметь учетную запись на сайте Dropbox. Дополнительное свободное место в этом случае
1. Что такое утилита управления компьютером Windows Vista?
1. Что такое утилита управления компьютером Windows Vista? Управление компьютером - это утилита Microsoft Windows, которая позволяет вам получить доступ к Системным средствам и позволяет более непосредственно управлять вашим компьютером. В Windows 8 консоль управления Microsoft ( MMC ) принимает и отображает инструменты управления для вашего ПК. Эти инструменты называются оснастками и используются для управления аппаратными, программными
Что может удивить и по-настоящему взволновать людей, которые выжили и так много видели?
Что может удивить и по-настоящему взволновать людей, которые выжили и так много видели? Мы знаем, что в сегодняшнем сообщении мы хотели бы поделиться с вами нашими проверенными идеями подарков на День бабушки и дедушки! Фотокалендарь с вашими фотографиями
Что будет весело и удовлетворительно с точки зрения развития персонажа?
Что будет весело и удовлетворительно с точки зрения развития персонажа? Означает ли «не выбрасывать добычу, которую вы не можете использовать», я не найду добычу для других своих персонажей или для странных спецификаций, которые я хочу сыграть? (Нет, это не значит, что мы объясним позже) Макс упомянул, что мы не собираемся торговать игроками с дропами. Торговля может быть положительной для разных игроков по разным причинам. Обмениваясь предметом, выпадающим с членами группы,
Что относится к существующим клиентам по новым тарифам congstar Homespot?
Что относится к существующим клиентам по новым тарифам congstar Homespot? Как существующий клиент с тарифом congstar Homespot M и L вы автоматически переключаетесь на пересмотренные варианты congstar Homespot 30 или 100! Пауза Congstar Homespot Приостановка домашнего спота контракта до макс. Возможно 180 дней (время обработки: 48 часов). Плата за паузу составляет один раз 20 €. Необязательные опции исключаются из перерыва и продолжают рассчитываться. В перерыве
Ну так что ты делаешь?
Ну так что ты делаешь? Почему логотип важен для вашего бренда Логотипы действуют как лицо вашего бизнеса , Они представляют собой наглядное представление о том, что означает ваша компания, и могут быть использованы для продвижения вашего бренда как в Интернете, так и в автономном режиме. Хотя Shopify автоматически генерирует для вас текстовые логотипы, все равно важно иметь собственный логотип,
Но что, если видео не воспроизводится вообще и в конечном итоге отображается черный экран при доступе к нему с помощью iPhone?
Но что, если видео не воспроизводится вообще и в конечном итоге отображается черный экран при доступе к нему с помощью iPhone? Вам нужно правильное решение таких проблем. Итак, давайте посмотрим, что мы можем сделать, чтобы исправить проблемы, когда встроенные видео YouTube не работают. Обновите используемый вами браузер до последней

Зачем идти на заказ?
Итак, как создать собственный дистрибутив с кросс-скомпилированными приложениями, предназначенными для конкретной цели?
Зачем идти на заказ?
Категории - чаевые Удастся ли тебе насладиться необычным подарком?
8. Содержание: Что такое утилита управления компьютером Windows 8?
Как мы используем системные шрифты пользовательского интерфейса на веб-сайте, и каковы предостережения?
Зачем вам нужен еще один пропущенный подарок, который вы с сожалением убрали на полку и думаете, что снова не получили то, что хотели?
Что по плану?
Что будет включать этот набор инструментов конфиденциальности?
Что будет включать этот набор инструментов конфиденциальности?

Новости

Карта