- Особенности реализации ядер Линукс на ARM архитектуре
- Как собрать ядро linux под arm
- Исходный код
- Компилятор
- Конфигурирование ядра linux
- Компиляция ядра linux
- Сброка модулей ядра linux
- Очистка проекта
- Собрать ядро под 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
Особенности реализации ядер Линукс на ARM архитектуре
Добрый день, уважаемые форумчане! Я только начинаю погружаться в линукс на работе и для начала мне задали разобраться особенностях реализации ядер Линукс на ARM архитектуре, но все что я накопал — это то ,что на каждое устройство arm, нужен собственный дистрибутив, а почему это происходит ,я не понимаю. Помогите разобраться!)
Если есть какие-то книги по ядру линукс ,не обязательно связанные с arm, посоветуйте пожалуйста!
arm — нестандартное васянское говно без acpi/uefi (хотя сейчас уже начинают их там внедрять)
Armbian смотрит неодобрительно.
Под каждую плату нужна своя сборка ядра и всякие навороты в виде блобов для 3д и декодирования видео, например.
Дистрибутив тут роли не играет.
А почему для x86 подойдет одна и та же сборка, а для arm каждый раз нужно свою сборку делать? в чем разница между этими архитектурами в этом плане?
в первом посте написано
… дебилом, неспособным без пеленок в виде acpi написать инициализацию nvic.
по-моему, дебилы это те, которые не знают, зачем нужна стандартизация, но любят nih на коленке, тк по их менинию они «способны»
корбу достандартизировали до такого, что 3.0 так никто и не реализовал.
в армах далашит и есть стандарт, читай и делай. но дебил не будет делать, он надеется на «стандартизацию», что бы дядя ему по стандарту всё сделал и можно было скачать анонимно без смс и заюзать на халяву.
в даташите на арм нет кучи того, чем занимается фирмварь
сомневаюсь что ты самолично написал полностью фирмарь железки, с которой это пишешь, как и вся твоя семья и знакомые, использующие разнообразные компы
в даташите на арм нет кучи того, чем занимается фирмварь
ты не поверишь, но я вот именно сейчас сижу и пишу фирмварь для арм. по даташиту.
вот когда напишешь для нескольких поколений массовых устройств, на которые можно будет устанавливать разные операционные системы — тогда поговорим
типичная отговорка. вот когда маск на марсе высадиться — тогда поговорим. а пока не высадился — россия космическая держава.
Процесс загрузки на ARM (+/-)
- После включения начинает работать встроенный загрузчик, которому за счёт аппаратной подтяжки пинов можно сказать где искать следующую часть (MMC, eMMC, USB, … + смещение) (актуально для всяких Dev KIT).
- Зависящий от процессора загрузчик от вендора. Первоначальная настройка выводов и загрузка приложения или следующего загрузчика, например U-Boot.
- U-Boot специально собранный для конкретной платы. Настройка выводов, загрузка Device Tree и Linux Kernel.
- Linux Kernel …
Таким образом от конкретной платы зависят:
- Загрузчик вендора,
- U-Boot
- Настройки U-Boot
- Device Tree
А ядро должно содержать все необходимые драйвера, указанные в Device Tree. Тогда оно может быть почти любым. Но выгоднее собрать собственное минимальное ядро.
Источник
Как собрать ядро 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
Ну вот и собрал я 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 🙂
Источник