- Установка Linux на ARM. Подробная пошаговая инструкция и советы
- Какие операционные системы подходят для ARM?
- Установка Linux на ARM — устройство
- Советы при установки Linux на ARM — устройство
- Как собрать ядро linux под arm
- Исходный код
- Компилятор
- Конфигурирование ядра linux
- Компиляция ядра linux
- Сброка модулей ядра linux
- Очистка проекта
- Кросскомпиляция под ARM
- Вводная
- Инструменты
- Элементарная технология кросскомпиляции
- Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
- Re: Собрать ядро под ARM
Установка 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 — устройстве не будет диковинкой! А нужно ли вам это сейчас — решать вам.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Источник
Как собрать ядро 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, нам поможет Мистер Пропер 🙂
Источник
Кросскомпиляция под ARM
Достаточно давно хотел освоить сабж, но всё были другие более приоритетные дела. И вот настала очередь кросскомпиляции.
В данном посте будут описаны:
- Инструменты
- Элементарная технология кросскомпиляции
- И, собственно, HOW2
Кому это интересно, прошу под кат.
Вводная
Одно из развивающихся направлений в современном IT это IoT. Развивается это направление достаточно быстро, всё время выходят всякие крутые штуки (типа кроссовок со встроенным трекером или кроссовки, которые могут указывать направление, куда идти (специально для слепых людей)). Основная масса этих устройств представляют собой что-то типа «блютуз лампочки», но оставшаяся часть являет собой сложные процессорные системы, которые собирают данные и управляют этим огромным разнообразием всяких умных штучек. Эти сложные системы, как правило, представляют собой одноплатные компьютеры, такие как Raspberry Pi, Odroid, Orange Pi и т.п. На них запускается Linux и пишется прикладной софт. В основном, используют скриптовые языки и Java. Но бывают приложения, когда необходима высокая производительность, и здесь, естественно, требуются C и C++. К примеру, может потребоваться добавить что-то специфичное в ядро или, как можно быстрее, высчитать БПФ. Вот тут-то и нужна кросскомпиляция.
Если проект не очень большой, то его можно собирать и отлаживать прямо на целевой платформе. А если проект достаточно велик, то компиляция на целевой платформе будет затруднительна из-за временных издержек. К примеру, попробуйте собрать Boost на Raspberry Pi. Думаю, ожидание сборки будет продолжительным, а если ещё и ошибки какие всплывут, то это может занять ох как много времени.
Поэтому лучше собирать на хосте. В моём случае, это i5 с 4ГБ ОЗУ, Fedora 24.
Инструменты
Для кросскомпиляции под ARM требуются toolchain и эмулятор платформы либо реальная целевая платформа.
Т.к. меня интересует компиляция для ARM, то использоваться будет и соответствующий toolchain.
Toolchain’ы делятся на несколько типов или триплетов. Триплет обычно состоит из трёх частей: целевой процессор, vendor и OS, vendor зачастую опускается.
- *-none-eabi — это toolchain для компиляции проекта работающего в bare metal.
- *eabi — это toolchain для компиляции проекта работающего в какой-либо ОС. В моём случае, это Linux.
- *eabihf — это почти то же самое, что и eabi, с разницей в реализации ABI вызова функций с плавающей точкой. hf — расшифровывается как hard float.
Описанное выше справедливо для gcc и сделанных на его базе toolchain’ах.
Сперва я пытался использовать toolchain’ы, которые лежат в репах Fedora 24. Но был неприятно удивлён этим:
Поискав, наткнулся на toolchain от компании Linaro. И он меня вполне устроил.
Второй инструмент- это QEMU. Я буду использовать его, т.к. мой Odroid-C1+ пал смертью храбрых (нагнулся контроллер SD карты). Но я таки успел с ним чуток поработать, что не может не радовать.
Элементарная технология кросскомпиляции
Собственно, ничего необычного в этом нет. Просто используется toolchain в роли компилятора. А стандартные библиотеки поставляются вместе с toolchain’ом.
Выглядит это так:
Какие ключи у toolchain’а можно посмотреть на сайте gnu, в соответствующем разделе.
Для начала нужно запустить эмуляцию с интересующей платформой. Я решил съэмулировать Cortex-A9.
После нескольких неудачных попыток наткнулся на этот how2, который оказался вполне вменяемым, на мой взгляд.
Ну сперва, само собою, нужно заиметь QEMU. Установил я его из стандартных репов Fedor’ы.
Далее создаём образ жёсткого диска, на который будет установлен Debian.
По этой ссылке скачал vmlinuz и initrd и запустил их в эмуляции.
Далее просто устанавливаем Debian на наш образ жёсткого диска (у меня ушло
После установки нужно вынуть из образа жёсткого диска vmlinuz и initrd. Делал я это по описанию отсюда.
Сперва узнаём смещение, где расположен раздел с нужными нам файлами:
Теперь по этому смещению примонтируем нужный нам раздел.
Копируем файлы vmlinuz и initrd и размонтируем жёсткий диск.
Теперь можно запустить эмуляцию.
И вот заветное приглашение:
Теперь с хоста по SSH можно подцепиться к симуляции.
Теперь можно и собрать программку. По Makefile’у ясно, что будет калькулятор. Простенький.
Собираем на хосте исполняемый файл.
Отмечу, что проще собрать с ключом -static, если нет особого желания предаваться плотским утехам с библиотеками на целевой платформе.
Копируем исполняемый файл на таргет и проверяем.
Собственно, вот такая она, эта кросскомпиляция.
UPD: Подправил информацию по toolchain’ам по комментарию grossws.
Источник
Собрать ядро под ARM
Ну вот и собрал я ARM-toolchain.
Следующий этап — сборка ядра. Где про это можно почитать? Везде где ставят линукс на КПК лежат уже готовые образы. А хотелось-бы почитать.
Re: Собрать ядро под ARM
ARCH=»arm» make menuconfig
Пробовал для softgun вроде работало.
Re: Собрать ядро под ARM
На чистом ядре? Без патчей?
Меня такой вопрос интересует. Допустим я получил какой-то бинареик ядра. Он позиционно-независим? Как его грамотно запускать?
Re: Собрать ядро под ARM
Судя по вашим постам вы начинающий системный администратор или только что вышли из застенков института. Поэтому я думаю вы пошли не тем путём. Сначала выбирается железка с которой будете работать. Выбирается исходя из интересуещей вас архитектуры(сдесь вы похоже определились) наличия интересующих интерфейсов (через которые скорее всего и будете грузить ядро), поддержки коммунити или какого либо гиганта (Intel TI AD). В вашем случае нужна железка с «попсовым PCшным» интерфейсом USB а лучше Ethernet и прошытым загрузчиком умеюшим грузить ядро по этому интерфейсу. Если же у вас есть эмулятор то вы можете позволить себе большего, но судя по вопросам у вас его нет :).
Всё читаем доки от коммунити или от «гиганта» и наслаждаемся процессом. Советую посмотреть в сторону OMAP5912 OSK. Стоит очень не дорого 300$, легко купить, коммунити, гигант (TI и Nokia). Вот линьк linux.omap.com по нему найдёте полный набор документации, precompiled kernel, и уже собранный набор toolchain.
Re: Собрать ядро под ARM
Вообще я представляю как все происходит. Но хочу запустить линукс на КПК (RoverPC P3). Объем имеющейся документации соответственно никакой. Если-бы у меня была возможность самому проектирвать устройство, то скорее всего это был-бы PowerPC и вопросов я бы не задавал 🙂
Re: Собрать ядро под ARM
Re: Собрать ядро под ARM
Re: Собрать ядро под ARM
Есть один маленький и не приятный момент.
Если ты сделал tool chain то по пределению компилёное в нём ядро должно работать на арм совместимой платформе. Но не всегда так.
Например на ARMCore такая тема не пройдёт. Т.к. плотность монтажа микросхем слишком высокая, в результате чего применены определённые схемотехнические извращения. Т.е. на этой платформе будет работать ядро линукса, которое пропатчено их родным патчем, которое учитывает извраты схемотехники на плате.
Надеюсь изделие ARMCore фирмы Compulab это исключение из правил платформы арм, т.е. остальные платформы сделаны вменяемо без всяких схемотехнических извращений. Конечно же было бы прекрасно если мобильник тоже сделан на совесть.
Напиши о результатах в форум или помести инфу на свою страничку.
Кстати на ровере есть поддержка функция эенргосбережения?
Re: Собрать ядро под ARM
> Например на ARMCore такая тема не пройдёт. Т.к. плотность монтажа микросхем слишком высокая, в результате чего применены определённые схемотехнические извращения. Т.е. на этой платформе будет работать ядро линукса, которое пропатчено их родным патчем, которое учитывает извраты схемотехники на плате.
а можно подробнее на этом моменте? что патчили и пр.
ps: я в курсе, что такое ARMCore 🙂 и спцификаций на некоторые используемые в нем микросхемы я так и не нашел 🙁
Re: Собрать ядро под ARM
Мне не приходилось особенно не заморачивался с ARMCore. Но коллега пытался ставить стандартный ARM патч на debian овское ядро и оно в результате не загружалась. Приходится юзать патчи от compulab.
Зная о некоторых приколах программирования x86, в частности на некоторых моделях нельзя произвести запись в порт outb(), необходимо сначала передвинуть окно так что бы в него попадал необходимый номер порта, в который потом можно произвести запись. Я подумал что это извращение системотехники, иначе как это объяснить?
Кроме того я рапаковал патч diff-2.6.7-armcore.gz в файл и нашёл там:
+/* + * Install handler for IT8152 IRQ. Yes, yes. we are way down the IRQ
+ * cascade which is not good for IRQ latency, but the hardware has been
+ * designed that way. + */
+ + +extern int SearchIT8711(void);
+extern void InitLPCInterface(void);
+static unsigned int sio_reset_base = 0;
+static int parallel;
+ + +static inline void armcore_irq(int irq, struct pt_regs *regs)
+ desc = irq_desc + irq;
+ desc->handle(irq, desc, regs);
Коментарий просто прелестный.
Но на http://www.arm.linux.org.uk/developer/machines/: 438 CompuLab ARMCORE module armcore Guennadi Liakhovetski — unknown —
438 Contact: Guennadi Liakhovetski Created: Thu, 15 Jan 2004 12:14:03 GMT Status: Active Machine name: CompuLab ARMCORE module Machine type: armcore Type macro: machine_is_armcore() Config variable: CONFIG_MACH_ARMCORE Machine type: MACH_TYPE_ARMCORE Directory suffix: pxa Web site: http://www.compulab.co.il/armcore.htm
Кстати там же для Ровера: 426 Rover P5+ roverp5p Konstantine A. Beklemishev — unknown —
426 Contact: Konstantine A. Beklemishev Created: Sun, 4 Jan 2004 21:28:01 GMT Status: Active Machine name: Rover P5+ Machine type: roverp5p Type macro: machine_is_roverp5p() Config variable: CONFIG_MACH_ROVERP5P Machine type: MACH_TYPE_ROVERP5P Directory suffix: pxa Web site: http://handhelds.org/projects/rover.html Patch suffix: Description: RoverPC P5+
Я не разработчик и с ARMCore много не работал. нО в патче в коментариях есть почтовые адреса людей которые наверняка знают специфику ARMCore 🙂 пример:
+ * BRIEF MODULE DESCRIPTION
+ * ITE Semi IT8712 Super I/O functions.
+ * Copyright 2001 MontaVista Software Inc.
+ * Author: MontaVista Software, Inc.
+ * ppopov@mvista.com or support@mvista.com
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ * THIS SOFTWARE IS PROVIDED «AS IS» AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
А на какие микросхемы вы не могли найти спецификации?
Re: Собрать ядро под ARM
> Мне не приходилось особенно не заморачивался с ARMCore. Но коллега пытался ставить стандартный ARM патч на debian овское ядро и оно в результате не загружалась. Приходится юзать патчи от compulab.
я этой платой возился, пытаясь водрузить на нее NetBSD/arm32. заминка вышла с родным первичным загрузчиком — ребята из CompuLab на коленке навояли нечто свое и, как следствие, не умеющее грузить ELF (бо зачем это им под Linux). в принципе, можно конечно перешить их загрузчик на флеше на что-нить более приличное, но я не стал рисковать 🙂
а их родной Linux вполне нормально работает, вроде без нареканий. так что даже что-то пересобирать не пришлось. хотя при размере флеша в 64Mb за busybox я бы «поубывав бы» бо дюже неудобное поделие :-/
> А на какие микросхемы вы не могли найти спецификации?
там стоят две микросхемы от ITE: IT8152G — это я так понимаю companion chipset и IT8711F-A — это интерфейс на шину LPC и Multi I/O. вроде как по первой, главной, в свое время так ничего и не нашел. а это собссно самая важная вещь. afaiu это тайваньский клон оригинального интеловского чипа для PXA255, но на www.ite.com.tw ничего путного почти год назад на эту тему небыло.
Re: Собрать ядро под ARM
Если микрухи клоны, то наверно надо всё искать на интеле. Маловероятно что тайвань будет докручивать интеловские разработки 😉
Ядра компулаба и ядра пропатченные их патчами работают. Но у моего коллеги не получилось запустить ядро с обычным ARM патчем от debian — это есть плохо.
Технологии уникальные, а включаешь — не работает.
Re: Собрать ядро под ARM
> Если микрухи клоны, то наверно надо всё искать на интеле. Маловероятно что тайвань будет докручивать интеловские разработки 😉
в том-то и проблема, что afaiu (sic!) Intel передает/продает технологию производства второстепенных компонентов в Тайвань, а там уже ребята могут «подтачивать» оригинальную разработку под свое видение/нужды/линию/заказы. и может получиться в принципе совместимо, но со своими мелкими и неприятными фишками. я такое несколько раз наблюдал на их x86 совместимых платформах, когда обмен по PC104/ISA шине сурово отличается от стандарта (нет 16ти битного обмена как класса), интерфейс к DiskOnChip вообще кривой и почти убитый, изначально битые чипы ввода/вывода от Winbond и пр. радости.
для выявления этих фишек я и искал оригинальный datasheet на IT8152G. исходники это конечно здорово, но я все-таки предпочитаю работать с документацией.
> Ядра компулаба и ядра пропатченные их патчами работают. Но у моего коллеги не получилось запустить ядро с обычным ARM патчем от debian — это есть плохо.
это да, наводит на мысли 🙁 для таких вещей я предпочитаю LFS на базе NetBSD 🙂
Источник