- Как собрать ядро linux под arm
- Исходный код
- Компилятор
- Конфигурирование ядра linux
- Компиляция ядра linux
- Сброка модулей ядра linux
- Очистка проекта
- Установка Linux на ARM. Подробная пошаговая инструкция и советы
- Какие операционные системы подходят для ARM?
- Установка Linux на ARM — устройство
- Советы при установки Linux на ARM — устройство
- Какой дистрибутив лучше использовать для вашей embedded системы?
- Готовые дистрибутивы
- Системы сборки
- Сборка Embedded Linux от Yocto для QEMU x86 и первое приложение к нему
- Сборка образа Linux
- Средства разработки
- Eclipse, Cross GCC
- Сборка в ADT
- Подготовка сборки
- Настройка Yocto ADT в Eclipse
- Проект Hello, World! в Eclipse c Yocto ADT
- Запуск и отладка из IDE Eclipse
Как собрать ядро linux под arm
Операционная система linux часто используется для встраиваемых (они же embedded) устройств, которые в свою очередь часто построены на основе контроллеров с архитектурой ARM.
Исходный код
Скачать исходный код ядра linux можно с http://git.kernel.org
Например, если использовать код из проекта project:
После того как исходники будут скачаны, заходим в директорию с исходным кодом ядра linux.
Для того что бы отделить результат компиляции от исходного кода, создаем директорию build
Компилятор
Распаковываем ( например в /home/user ):
И устанавливаем переменную PATH:
Задаем переменные окружения для компиляции:
Конфигурирование ядра linux
Если нужная конфигурация уже существует ( например arch/arm/configs/colibri_pxa320_defconfig ), то выполняем:
Если необходимо создать свою конфигурацию ядра linux, или изменить существующую то запускаем:
и выбираем необходимые опции. Опции могут быть вкомпилированны в ядро или подгружаться как модули. В первом случае перед соответствующим пунктом меню отображается [*] , во втором [M].
Компиляция ядра linux
Что бы скомпилировать ядро надо выполнить команду:
Когда сборка ядра linux будет закончена, оно будет лежать в ../build/arch/arm/boot/uImage
Сброка модулей ядра linux
Если какие-то опции ядра были включены как модули, то их тоже надо скомпилировать
Что бы изменить директорию (папку) в которую modules_install установит модули, указываем путь, используя переменную INSTALL_MOD_PATH.
В дальнейшем, что бы положить модули ядра на устройство, надо просто скопировать, все что лежит в директории /home/user/tmp/modules в корень файловой системы устройства. При этом важно сохранить структуру каталогов, самый просто способ — упаковать папку, а затем разархивировать ее на приборе.
Очистка проекта
Что бы удалить все файлы, созданные при компиляции:
Если же необходимо удалить файлы, полученные при конфигурации ядра linux, нам поможет Мистер Пропер 🙂
Источник
Установка Linux на ARM. Подробная пошаговая инструкция и советы
Установка Linux на ARM — это довольно интересная тема. Даже принимая только то, что это довольно-таки необычно. Почему необычно? П отому что в ARM-процессорах совсем другая архитектура, чем у тех, для которых рассчитано большинство дистрибутивов Линукс.
Для тех , кто не знает, ARM — архитектура маленьких микр оп роцессоров. Если простым языком, то это архитектура процессора у маленьких компьютеров или мобильных телефонов. Поэтому вопрос : вы часто видели Linux на смартфоне (процессоре ARM)?
Основная масса больших и привычных ПК имеют архитектуру х86 или AMD64. Данные процессоры рассчитаны на трудо- и ресурсоемкие задачи:
- редактирование фотографий;
- редактирование музыки или видео;
- работа с базой данных;
- программирование и т.д .
Но в т о ж е время ARMка имеет более низкое энергопотребление при должной производительности, а это как раз очень важно для небольших устройств. И поэтому она распространена в «маленьких» устройствах.
Какие операционные системы подходят для ARM?
В принципе на ARM — устройствах можно запустить любую операционную систему, которая была скомпилирована под данную архитектуру. Поэтому обычные Линукс версии, которые мы уже привыкли наблюдать на своих ПК , просто не подойдут , д аже если они легковесны и подходят по другим параметрам. Но в т о ж е время в сети можно найти приличное количество уже «готовых» дистрибутивов Linux для ARM — процессоров. Ярким представителем является известный всем Android, из менее известных, но популярных — Kali Linux.
Кстати, а вы знали, что популярный Android мегакорпорации Google — это всего лишь «операционка» на основе ядра Linux ? Пр ит ом, что Андроид является самой популярной операционной системой для мобильных телефонов — этот факт, как видите, малоизвестен. Но вообще нужно понимать, что Linux здесь является всего лишь «ядром». А ядро — это всего лишь основной функционал, предполагающий использование устройствами опций аппаратной системы, драйверов, управления, утилиты для командной строки и др. Семейство Linux подразумевает совокупность всех операционных систем, использующих его ядро, но это не есть самостоятельное ядро. Различие всем системам «семейства» придает графическая оболочка, но это совсем другая история. Однако возможность использовать эти ОС без графической оболочки, а только через текстовую командную строку, расширяют сферу их применения. Именно поэтому их можно «заметить» в необычных местах:
- в сетевом оборудовании;
- в производственных станках;
- в начинке самолета или автомобиля;
- даже в современных стиральных машинах.
Итак, из семейства Linux для ARM можно подобрать конфигурации у следующих дистрибутивов:
- Debian. Это одна из самых старых версии Линукса, большое сообщество, много программ , написанных для этой системы, стабильность работы и мн.др. Его можно «найти» практически везде, также и в ARM — процессорах.
- Ubuntu. Кто не слышал о б Убунту, тот не слышал о Линукс. С читается , что у него бо л ее продвинутое интерфейсное оформление, чем у Дебиан, да и вообще он сам более продвинутый. Встречается в ARM — процессорах, но совсем недавно анонсирована Ubuntu Phone — специальная ОС для смартфонов, которая будет призвана конкурировать с Android. Проект анонсирован, но пока должного «движения» не замечено.
- Kali, Arch, Gentoo и др. , и каждый со своей отличительной особенностью , и каждый используется в ARM — системах.
На самом деле , этот список можно продолжать очень долго, потому что прогресс не стоит на месте, а земля наша слави тся умельцами. И многие разработчики «подтачивают» тот или иной дистрибутив Linux под ARM — процессор.
Установка Linux на ARM — устройство
Как правило, приобретая какое-либо устройство на ARM — процессоре, вы его получаете уже с предустановленной ОС. Чаще всего на таких устройствах идет Android. Допустим, вы все равно хотите установить Linux на это ARM — устройство. Тогда у вас есть 2 пути:
- Полноценная «перепрошивка» на «чистое железо» ;
- Установка «внутри» или «рядом» с Android (или другой системы, суть от этого не меняется).
При полной «перепрошивке» вы потеряете весь предустановленный производителем функционал. Вряд ли это будет то, чего вы добиваетесь. Поэтому тут можно воспользоваться вторым способом и установить Linux, не удаляя основную операционную систему вашего устройства. Для этого нужно будет настроить запуск chroot-окружения внутри Андроид. Но зато на выходе вы получите 2 параллельно установленные операционные системы и сможете использовать то одну, то другую. С т ак им подход ом можно поэкспериментировать на смартфонах или планшетах, где есть экран. А на простых безэкранных устройствах с таким способом могут возникнуть трудности.
Советы при установки Linux на ARM — устройство
На самом деле , совет будет один. Подумайте , прежде чем устанавливать Linux на свое ARM — устройство, тем более если на нем уже предустановлена производителем ОС. Потому что это не что иное , как хакинг — то есть преднамеренно е вмешательство в работу операционной системы. И никто , кроме вас , разделять риски работы устройства не будет.
Сама технология установки Linux на ARM еще в довольно «сырой» форме. Да, есть какие-то наработки и отдельные дистрибутивы. Есть умельцы, которые делают это и говорят, что это круто. Но в целом материала и стабильности в этом мало. Это не касается тех устройств, в которых Linux предустановлен производителем!
Но в т о ж е время четко вырисовывается тенденция, что за ARM — процессорами будущее. Этому свидетельствует даже тот факт, что первое место в рейтинге суперкомпьютеров ТОП — 500 в 2021 году с большим отрывом по производительности от конкурентов занимает машина на ARM — процессорах!
У ARM — процессоров масса преимуществ , поэтому, скорее всего , в обозримом будущем они будут стоять на наших персональных компьютерах. А это значит, что Linux на ARM — устройстве не будет диковинкой! А нужно ли вам это сейчас — решать вам.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Источник
Какой дистрибутив лучше использовать для вашей embedded системы?
Какой дистрибутив лучше использовать для embedded систем. Этот вопрос является актуальным на сегодняшний день.
Существует три актуальных подхода для решения этой задачи:
- Использовать готовый дистрибутив для вашего одноплатного компьютера(Armbian, Openwrt и т.д.)
- Собрать и настроить свой дистрибутив с помощью систем сборок(Buildroot/Yocto и т.д.).
- Использовать свою связку bootloader (u-boot) + ядро(kernel) + rootfs (busybox).
Если кто знает еще, напишите пожалуйста в комментариях.
UPDATE.
Проект OpenWRT это и система сборки (это не buildroot), так и проект предоставляющий готовые собранные образы для вашей целевой платы.
Готовые дистрибутивы
Я считаю использовать готовый дистрибутив это самый простой и легкий путь. Вы можете скачать готовый образ или сбилдить свой. Сборка своего образа Armbain не всегда является гибкой, т.к вы не можете выбрать любую версия ядра Linux, а использовать только предоставленные.
Следует также ответить главное достоинство готовых дистрибутивов — это их стабильность.
Для начинающих, я бы рекомендовал данные дистрибутивы.
Armbian — это популярный дистрибутив Linux, доступный для самых разных устройств ARM: Orange Pi, Banana Pi, Odroid и т.д … Он основан на Ubuntu и/или Debian.
OpenWrt — встроенная операционная система, основанная на ядре Linux, и предназначенная, в первую очередь, для домашних маршрутизаторов. Основные компоненты включают в себя ядро Linux, util-linux, uClibc или musl и BusyBox. Размер всех компонентов оптимизирован в связи с тем, что в большинстве домашних маршрутизаторов сильно ограничен объём памяти.
От себя добавлю, хорошо подойдет для плат с wi-fi на борту (Например Orange Pi Zero).
Системы сборки
Гланым достоинством систем сборок является, то что вы можете собрать минимальный и гибкий Linux для встраиваемых (embedded) систем.
Buildroot — это система сборки дистрибутивов для встраиваемых систем. Она поддерживает кучу плат и результатом ее работы становятся собранные загрузчик, ядро и образ
файловой системы.
Что оно позволяет собрать buildroot для вашей системы:
- образ системы;
- данная система позволяет выбрать версию ядра — любую.
- можете добавить любые патчи и установить любые программы.
- гибкая конфигурация утилит ( например, busyBox, bash и т.д.)
Следует обратить внимание, что все дополнительные исходники подтягиваются из сети.
Отличая такой сборки, например, от сборки Armbian:
- собирается дистрибутив не на основе (Debian или Ubuntu), а пользовательский гибко настроенный Linux.
- минимального размер сборки.
- выбор любой версии ядра.
3. Использование свой связки:
Для этого нам нужен:
- Cross compiler (Например, Linaro);
- Bootloader (Например, U-boot);
- Kernel;
- RootFs (Например, Busybox).
Итак поехали.
Так мы будем собирать локально на своей машине нам нужен кросс компилятор, например linaro. Кросс компилятор поможет на архитектуре x86, собрать наш дистрибутив под целевую платформу ARM.
Далее необходимо собрать bootloader.
Bootloader (U-Boot) — самый популярный bootloader для ARM, является U-boot. Главной задачей bootloader является загрузка ядра Linux Kernel. Так же вы можете использовать, например barebox или другой.
RootFs — это корневая файловая система которую примонтирует Kernel после загрузки. Рекомендую использовать Busybox.
Источник
Сборка Embedded Linux от Yocto для QEMU x86 и первое приложение к нему
Эта статья — быстрый старт с картинками для тех, кому нужно собрать Embedded Linux с помощью Yocto.
Если вы собрались собирать Embedded Linux для специфичных аппаратных средств, например, для SoC на FPGA, то, наверное, как и я столкнётесь с проектом Yocto.
Yocto — проект, объединяющий
- инструментарий разработчика;
- систему сборки;
- набор программных интерфейсов;
- коллекцию мета-пакетов, расширяющих возможности платформы;
- плагины для Eclipse и Anjuta.
Я постарался описать процесс так, чтобы вам можно было меньше тратить времени на проблемы с настройкой и подготовкой и поскорее приступить к творчеству.
Сборка образа Linux
Основа для сборки — статья
«Yocto Project Quick Start».
Собирать буду в папке
Небольшое отступление:
Запустив терминал, все команды выполняйте в нём, потому что в ходе работы создаются и используются переменные среды. Если закрыли терминал и открыли новый, то заходите в
и придётся повторять некоторые команды. Например,
создаю репозиторий git
теперь текущая директория
теперь, согласно терминам Yocto, получилось
Source Directory — «poky»
local working area (local branch) — dizzy
Первым делом выполняется
Этой командой настраивается окружение оболочки, создается начальный изменяемый набор файлов конфигурации и осуществляется взаимодействие с окружением выполнения системы BitBake путем использования файла сценария, позволяющего Poky установить, выполняются ли минимальные системные требования. Результат выполнения команды сообщит или о проблемах, например, недостающих пакетах, или о возможности продолжить редактированием файла conf/local.conf.
Здесь следует указать число нитей, которое будет запускать средство сборки bitbake. Чтобы максимально использовать вычислительные возможности, число нитей должно соответствовать числу ядер процессора. Я указал на 1 меньше, чтобы компьютером во время сборки удобнее было пользоваться.
Так же я добавил дополнительные возможности, полезные для разработки.
Так как собираем для стандартной QEMU x86, то остальное можно не изменять.
Далее можно выбрать “рецепт” — вариант сборки со своим набором библиотек, утилит, создаваемых файлов, образов и т.п.
Список рецептов с их краткими описаниями можно посмотреть здесь:
рецепты openembedded-core
пролистайте до рецептов, начинающихся с core-…
Не советую собирать core-image-minimal для ознакомления. Там нет ssh и других удобных для отладки инструментов.
Я выбрал core-image-sato. Это сборка с GUI SATO
Будьте готовы, что ждать завершения сборки придётся, возможно, от 3 часов до 3 и более дней. В счастью, процесс можно приостановить и возобновить.
Чтобы приостановить, нажмите + один (!) раз и подождите, когда завершатся все начатые операции. Иначе, возможно, появятся ошибочки и придётся переделывать. Чтобы возобновить, повторите
Если закрыли терминал, то в новом терминале перед сборкой придётся повторить установку переменных среды:
По завершении сборки можно проверить, что получилось, запустив эмулятор QEMU
Появится окно терминала xterm, там надо будет ввести пароль root хоста для создания интерфейса tap. Там же можно увидеть IP host-машины на tap интерфейсе и IP эмулируемой машины. У меня 192.168.7.1 и 192.168.7.2 соответственно.
Затем, если собран SATO должно появится окно графического интерфейса:
Если запущенный эмулятор мешает, пока его можно закрыть. Полистайте стрелочками в верхней части GUI до появления соответствующей иконки выключения или введите poweroff через терминал SATO или по ssh. Про ssh будет позже.
Не закрывайте QEMU крестиком на главном окошке эмулятора. Закрывайте штатными средствами эмулируемой машины. Иначе у вас в системе от QEMU останутся интерфейсы ethX, tapX, virbrX, которые придётся будет ifconfig… ifdown, или как это делается на вашей ОС. Или каждый раз при запуске QEMU будут новые IP хоста и QEMU, что неудобно.
Средства разработки
Используется Eclipse IDE for C/C++ Developers, версия Luna. В этой сборке имеются плагины CDT, GNU ARM и некоторые другие полезные для кросс-компиляции и разработки встроенного ПО плагины.
Можно скачать отсюда:
Eclipse Luna SR2.
Будем собирать приложения Hello, world!
Eclipse, Cross GCC
Сначала простой путь, соберём обычными средствами Eclipse: CDT + GNU ARM
Если этих плагинов в вашем Eclipse ещё нет, то добавьте плагин CDT из стандартного репозитория Eclipse и отсюда GNU ARM Plugin for Eclipse GNU ARM C/C++ Cross Compiler и что ещё захочется.
Создаём новый проект C++:
Меню Eclipse File->New->Project…->C/C++->C++ Project
Нужно выбрать
Project type: Executable->Hello World C++ Project
Toolchains: Cross GCC
заполните поле Author
Теперь самое важное, что касается системы сборки:
Cross compiller prefix: i586-poky-linux-
Cross compiler path: /home/. /My_Designs/Poky/poky/build/tmp/sysroots/x86_64-linux/usr/bin/i586-poky-linux
Компилируем проект
Project->Build Project
Должен появиться исполняемый файл
Так как компилировали для QEMU x86 Linux, то должен запуститься и на вашей host машине, если, конечно, вы работаете на x86 Linux или совместимой с ней. У меня запустилось на IA64 Ubuntu.
Теперь, если успели закрыть QEMU, то запустите опять
Появится окно терминала xterm, надо будет ввести пароль root для создания tap интерфейса.
Как видно, у меня IP host-машины 192.168.7.1, IP qemu 192.168.7.2
Затем появится окно QEMU с графическим интерфейсом
Можно подсоединиться к QEMU через ssh и sftp. Первый полезен для запуска программы, второй — для отправки этой программы на эмулируемую машину.
Файл я отправлял с помощью файлового менеджера Krusader. В Windows можно использовать FileZilla или другими.
В Krusader я выбрал Tools->New Net Connection…, в диалоговом окне нужно выбрать sftp://, ввести IP и Username: root
В домашнюю папку на QEMU я скопировал исполняемый файл hello_cross_gcc_02 из папки Debug проекта
Далее можно открыть терминал в графическом интерфейсе QEMU и запустить программу на выполнение оттуда. Мне более удобным показалось соединиться через ssh. В окне терминала host-машины запускаем ssh
и запускаем недавно скопированный исполняемый файл:
Должно получиться
Hello World!
Сборка в ADT
Подготовка Eclipse
Делалось на основе этого: Yocto — Настройка Eclipse
В Eclipse нужны плагины из стандартной комплектации:
Linux Tools
- LTTng — Linux Tracing Toolkit
Mobile and Device Development
- C/C++ Remote Launch
- Remote System Explorer End-user Runtime
- Remote System Explorer User Actions
- Target Management Terminal
- TCF Remote System Explorer add-in
- TCF Target Explorer
Programming Languages
- Autotools Support for CDT
- C/C++ Development Tools
И нужно добавить плагин от Yocto. Скачать можно отсюда: Yocto Plugin for Eclipse
Подготовка сборки
Для организации взаимодействия с IDE и средствами разработки, предусмотрены скрипты:
для запуска QEMU плагином Yocto нужен rpcbind
нужно отредактировать файл /etc/default/rpcbind
нужно распаковать root filesystem в ту папку в sysroots, где лежит файловая система эмулируемой машины. В нашем случае qemux86:
Настройка Yocto ADT в Eclipse
В Eclipse меню Windows->Preferences, Yocto Project ADT
Cross Compiler Options
Build system derived toolchain
Toolchain Root Location:
/home/. /Poky/poky/build/
Sysroot Location:
/home/. /Poky/poky/build/tmp/sysroots/qemux86
Target Architecture: i586-poky-linux
Target Options:
QEMU
Kernel: /home/. /Poky/poky/build/tmp/deploy/images/qemux86/bzImage-qemux86.bin
Проект Hello, World! в Eclipse c Yocto ADT
Создаём новый проект
New Project->C++ Project
Project name: hello_qemu_cmake_04
Project type: Yocto Project ADT CMake Project->Hello World C++ CMake Project
Next, Next, Finish
Build project
В папке проекта -> Debug должен получиться hello_qemu_cmake_04
Теперь можно запустить приложение так же как это было с проектом, созданным через Cross GCC за исключением того, что QEMU запускается теперь в Eclipse через меню
Run->External Tools->qemu_i586-poky-linux
Запуск и отладка из IDE Eclipse
Теперь настроим Eclipse так, чтобы можно было запускать и отлаживать приложение прямо из IDE.
Инструкция взята отсюда:
Загрузка и отладка приложения средствами ADT в Eclipse
Для удобства перед настройкой удалённая машина должна быть запущена (Run->External Tools->qemu_i586-poky-linux, как в предыдущем разделе).
Для настройки отладки выбираем в меню Eclipse
Run -> Debug Configurations…
В списке слева нужно отыскать “C/C++ Remote Application”, там должен быть пункт с названием нашего проекта и виртуальной машины. У меня это “hello_qemu_cmake_04_gdb_i586-poky-linux”. Надо его выбрать.
В руководстве от Yocto предлагается указать Remote Absolute File Path for C/C++Application. Но сейчас не самое лучшее время для этого. Удобнее будет сначала настроить связь с удалённой машиной.
А пока в правой области выбираем вкладку Debugger, здесь надо в выпадающем списке Debugger выбрать remote gdb/mi. У меня это единственный элемент списка, но его всё равно нужно выбрать. При этом заполняться некоторые другие поля формы. Debug Configurations — Debugger» data-src=»https://habrastorage.org/files/578/799/303/5787993038a54954bb16b360004daac3.png»/>
Возвращаемся на вкладку Main и создаём соединение.
В разделе Connection выбираем New…. В окне New Connection выбираем TCF. У меня их два. Я не знаю, зачем второй, но выбор первого точно приводит к положительному результату.
Debug Configurations — Main->New Connection» data-src=»https://habrastorage.org/files/28f/05c/dea/28f05cdeade343ae876ee4beaede83be.png»/>
В поле Host name вписываем IP машины в QEMU. Поле Connection name можно оставить заполненным IP. , … Чтобы меньше было возни позже, здесь же можно указать login при соединении. В разделе Connection нажмите Edit… и заполните Default User ID. Логин root.
Debug Configurations — Main->Edit — Properties» data-src=»https://habrastorage.org/files/334/24c/4e6/33424c4e612d48fc95439282cf009346.png»/>
На вкладке Main выбираем только что созданное соединение.
Теперь указываем путь к файлу и имя файла, с которым Eclipse будет загружать отлаживаемое приложение на удалённую машину.
Если QEMU запущен, то можно нажать Browse… и, если с соединением всё в порядке, можно будет посмотреть файловую систему удалённой машины и выбрать место, куда загружать приложение. У вас не обязательно будет такая же картинка, как на скриншоте снизу. Но вот что важно: нужно указать файл. Если вы собираетесь указать папку, в которой нет файла с тем именем, с которым хотите загружать исполняемый файл, то в этим окном вы не ограничитесь. Нажмите и допишите имя файла в окне Debug Configurations.
Debug Configurations — Main->Select remote application file» data-src=»https://habrastorage.org/files/ffc/9c1/3cd/ffc9c13cd54a4f2aaa4a64c05469848e.png»/>
Итог должен получиться примерно такой:
Debug Configurations — Main» data-src=»https://habrastorage.org/files/5bb/ee6/a91/5bbee6a91d3849d7b2e250735bcd4bec.png»/>
Теперь можно нажать .
У меня в окне консоли Eclipse “Remote Shell” было так:
Затем приглашение переключиться в перспективу Debug. Есть смысл согласиться.
Отладчик остановился на строке
Жмём Step Over (F6)
В терминале
Теперь можно писать программу. Пока для QEMU x86.
Источник