- Что такое Embedded Linux?
- Русские Блоги
- ARM9 Embedded Linux Development — Linux Основы
- 1 Linux.
- 1.1 версия ядра Linux
- 1.2 История развития Linux
- 1.3 Linux выпущена версия
- 1.4 Структура исходного кода ядра Linux
- 2 Конфигурация и сборник ядра Linux
- 2.1 Конфигурация Linux.
- 2.2 Компиляция ядра Linux
- 2.2.1 Система Makefile Linux
- 2.2.2 Сборка файлов ядра Linux
- 2.2.3 Как сделал Makefile решает, какие файлы
- 2.3.4 Как Makefile сознает эти файлы?
- 2.3.5 Makefile Как подключить эти файлы
- 2.3.6 Сводка анализа Makefile
- 3 Kconfig Анализ ядра Linux
- 3.1 config
- 3.2 menu
- 3.3 choice
- 3.4 comment
- 3.5 source
- 5. Скомпилируйте ядро Linux
- Интеллектуальная рекомендация
- Пошаговая загрузка файла Spring MVC-09 (на основе файла загрузки клиента Servlet3.0 + Html5)
- Создайте многоканальное окно в приложениях Win32
- Путь к рефакторингу IOS-APP (3) Введение в модульное тестирование
- Tree——No.617 Merge Two Binary Trees
Что такое Embedded Linux?
в Linux 11.09.2019 0 822 Просмотров
Термин «Embedded – встроенный Linux®» может использоваться для описания любого варианта операционной системы, работающей на встроенной компьютерной системе – специализированного устройства или платформы, интегрированных в более крупный общий продукт, такой как устройство бытовой электроники или часть оборудования. Модульная архитектура ядра Linux® наряду с поддержкой широкого спектра микропроцессоров и других типов оборудования сделала систему популярной в области вычислений. Но в некоторых сценариях Linux® может страдать от снижения производительности, поскольку ей требуется дополнительное программное обеспечение для работы в качестве операционной системы реального времени (RTOS), что является требованием для некоторых встроенных систем.
Несмотря на это, для встроенных систем используется множество пользовательских дистрибутивов Linux® – от мобильных телефонов до оборудования для тестирования авионики.
Встроенный компьютер отличается от персонального компьютера (ПК) тем, что встроенная система спроектирована или сконструирована для одной или нескольких конкретных целей, в то время как ПК предназначены для широкого спектра функций. Встроенный компьютер может быть спроектирован с минимальной производительностью, необходимой для достижения его конкретных целей, что обеспечивает лёгкую и высокоэффективную компьютерную платформу. Категория охватывает широкий спектр вычислительных устройств, от бытовой электроники до оборудования авионики, роверов и космических кораблей, которые исследуют солнечную систему. Но, как и любой компьютер, аппаратное обеспечение встроенной системы бесполезно без программной платформы, и во многих случаях выбранная программная платформа представляет собой некий вид встроенной Linux®.
Linux® доказала свою популярность во многих областях встраиваемых вычислений благодаря высокому уровню настройки и гибкости, а также разнообразной аппаратной поддержке. Ядро Linux® имеет модульную архитектуру, что означает, что разработчик или инженер может выбирать драйверы и программное обеспечение высокого уровня, необходимое для конкретной системы. Поддержка множества различных микропроцессорных архитектур также является важным преимуществом, предлагаемой встроенной Linux®, поскольку во встроенных системах может использоваться микропроцессор, который сильно отличается от тех, которые имеются в ПК. Как проект программного обеспечения с открытым исходным кодом, Linux® также может использоваться без ограничений и лицензионных отчислений, которые могут присутствовать в коммерческих предложениях.
Встраиваемые системы часто требуют операционной системы реального времени – операционной системы, способной реагировать на события в течение очень короткого периода времени. Поскольку ядро Linux® не было разработано с учётом производительности в режиме реального времени, для обеспечения этой функциональности, поверх ядра необходимо запустить дополнительное программное обеспечение. Это является потенциальным недостатком использования встроенной Linux®, поскольку это дополнительное программное обеспечение потребляет больше ресурсов.
Некоторые версии встроенной Linux® могут быть построены практически с нуля, в то время как другие являются слегка изменёнными версиями существующих дистрибутивов. Как коммерческие, так и некоммерческие организации предлагают свои собственные готовые дистрибутивы, предназначенные для производителей и дизайнерских фирм. Например, мобильные телефоны и медиаплееры обычно используют готовые варианты встроенной Linux®. Компьютерные системы или сетевые устройства могут использовать только слегка изменённую версию дистрибутива Linux® для настольных компьютеров.
В областях с высокими требованиями в режиме реального времени или требованиями к производительности конечный пользователь часто активно участвует в разработке системы. Например, Национальное управление по аэронавтике и исследованию космического пространства (НАСА) получает программное обеспечение Linux® от сторонних поставщиков, но устанавливает руководящие указания для поставщиков. Другие организации, такие как компании, производящие оборудование для тестирования авионики, могут разработать собственный вариант встроенной Linux®.
Источник
Русские Блоги
ARM9 Embedded Linux Development — Linux Основы
содержание
1 Linux.
1.1 версия ядра Linux
1.2 История развития Linux
- Начальная версия Kernel Linux является операционная система Class Minix, разработанная Linux Torvalds (LIN NAS NAS NAS) в 1991 году;
- Официальная версия Linux 1.0 выпущена в марте 1994 года, поддерживает 386 и поддерживает одну систему процессора;
- Linux 1.2 выпущен в марте 1995 года, является первой официальной версией, поддерживающей мультиплатформу (альфа, SPARC, MIPS и т. Д.);
- Linux 2.0 выпущен в июне 1996 года, в том числе поддержка многих новых платформ, самая важная вещь — первая версия ядра, которая поддерживает архитектуру SMP (симметричной многопроцессорной);
- Linux 2.2 выпускается в январе 1999 года, привлекая большое улучшение производительности системы SMP, поддерживая более аппаратное обеспечение;
- Linux 2.4 был выпущен в январе 2001 года, что еще больше усилил расширение системы SMP и интегрирует многие функции, используемые для поддержки настольных систем, встроенного вилки и воспроизведения и т. Д.;
- Linux 2.6 выпускается в декабре 2003 года, и он сделал большие улучшения на основе 2.4.
- 2.6 Ядро поддерживает больше платформ, используя новый планировщик, ядро можно выгрузить, подсистема ввода / вывода произошла много модификаций, подсистемы модулей, файловые системы сделали много улучшений;
- Linux 3.0 выпускается в июле 2011 года. Его характеристики: поддержка POSIX Alert Timer, BPF Package Jit Compiler, New SendMmsg () System Call, ICMP Socket, XEN DOM0, улучшение производительности BTRFS, пробуждается на поддержку WLAN и т. Д.
1.3 Linux выпущена версия
Linux в основном используется в качестве распределения Linux (часто называемых «развертыми»). Эти распределения написаны индивидуальной, свободной командой организации, бизнес-агентствами и добровольцами. Они обычно включают в себя другие системные программное обеспечение и программное обеспечение для прикладного программного обеспечения, а также встроенный менеджер, используемый для упрощения установки системы, и как установить обновление обновления. Быть
Выпуск сделан для многих различных целей, включая поддержку различных компьютерных структур, локализации, приложения в реальном времени и встроенных систем для определенного региона или языка, а даже много версий сознательно добавляют бесплатное программное обеспечение. Быть
В настоящее время активно развиваются более трехсот выпусков, и наиболее распространенным выпуском примерно двенадцать.
Типичное распределение Linux включает в себя: ядро Linux, некоторые библиотеки GNU, инструменты, оболочки командной строки, оконные системы X и соответствующие среды для рабочего стола, такие как KDE или GNOME, и содержат тысячи офисных костюмов, компиляторов, текстового редактора в программное обеспечение для прикладного инструмента. Быть
В настоящее время самый известный выпуск имеет Debian, Red Hat, Ubuntu, Suse, Centos, Fedora и т. Д. Быть
Отечественная относительно известная версия Linux: красный флаг Linux, глубина.
1.4 Структура исходного кода ядра Linux
2 Конфигурация и сборник ядра Linux
2.1 Конфигурация Linux.
Ядро предоставляет множество различных инструментов для упрощения конфигурации ядра:
Make Config — это самый простой инструмент командной строки интерфейса символов. Этот инструмент перейдет все элементы конфигурации ядра, требуя пользователя выбрать элемент. Этот инструмент слишком много времени потребляет слишком много времени для пользователей, если вы не поддерживаете другие инструменты конфигурации (ваш хост компиляции не поддерживает другие инструменты конфигурации).
Сделать Menuconfig. На основании текста используйте библиотеку NCurse, чтобы сформировать инструмент графического интерфейса, операции клавиатуры. Я считаю, что пользователи, которые были более знакомы с 2,4 ядром, не должны быть незнакомыми. Сделайте интерфейс Menuconfig
Сделать xconfig. В ядре 2.6, более красивые и удобные и удобные инструменты конфигурации графики на основе X11, то есть вы должны использовать x Desktop Environment, такие как KDE и GNOME, поддерживают вашу мышь. Когда пользователь использует этот инструмент для настройки ядра Linux, информация о справке, связанная с этой конфигурацией, появится и краткое описание. Интерфейс Make Xconfig выглядит следующим образом:
Сделать Oldconfig. Но после того, как вы измените файл конфигурации, вы можете использовать эту команду для проверки и обновления конфигурации. Быть
2.2 Компиляция ядра Linux
2.2.1 Система Makefile Linux
Когда пользователь завершает конфигурацию, инструмент конфигурации автоматически генерирует файл .Config, который сохраняется в корне дерева кода ядра. Пользователи могут легко найти его, конечно, пользователи могут просто изменять этот файл напрямую. Быть
Какие файлы должны скомпилировать ядро Linux для компиляции этих файлов и как подключить эти файлы, которые реализованы makefile. Быть
Makefile Создает список исходных файлов, которые необходимо скомпилировать, а затем компилировать, а затем соединяет целевую ссылку кода и, наконец, образует двоичный файл ядра Linux. Когда все работы завершены, пользователи должны просто вводить, и все задания остаются Makefile, будут автоматически завершены для вас.
Начиная с Linux Core 2.6, компиляция ядра Linux принимает систему KBuild, которая очень отличается от системы прошлой компиляции, особенно для компиляции модуля ядра Linux. Система Makefile Linux состоит из следующих разделов:
- Top Makefile: Top Makefile генерирует два важных целевых файла: VMLINUX и модули, чтение профилей, рекурсивно составляющих связанные каталоги деревьев кода ядра.
- Arch Makefile: в каталоге Arch / $ (Arch) The Top Makefile предоставляет информацию, связанную с конкретной архитектурой оборудования.
- Файлы определения правил публичных компиляций: включая makefile.build, makefile.clean, makefile.lib, makefile.host и другие файлы. Эти файлы расположены в каталоге сценариев определили публичные правила и определения, которые их компилируют. Быть
- Профиль ядра .Config: позвонив Chake Menuconfig или Make XConfig Command, пользователь может выбрать необходимую конфигурацию для генерации желаемого целевого файла.
- KBUILD Makefiles: вся система makefile предоставляет целевое определение файла соответствующих модулей. Верхний makefile завершает компиляцию соответствующих модулей, основанных на целевой основе. (Примечание: KBUILD Makefile относится к Makefile с использованием структуры KBUILD. Большая часть makefile в ядре kbuild makefile.)
2.2.2 Сборка файлов ядра Linux
Имя файла KBuild Makefile не обязательно Makefile, хотя это имя рекомендуется использовать Makefile. Большинство файлов KBuild являются Makefile. Чтобы различать другие файлы makefile, вы также можете указать имя KBUILD Makefile AS KBUILD. И если существуют файлы «Makefile» и «KBuild», система KBuild использует файл «KBUILD».
Одной из наиболее важных особенностей MakeFile KBuild является уточнение того, что скомпилировано, эта функция достигается Poj -?, Lib-Y и каталог.
Obj- ?. «?» Может быть, «y» или «M», «y» указывает на компиляцию объекта в ядро, «M» указывает, чтобы скомпилировать объект в качестве модуля. Синтаксис выглядит следующим образом: obj-? = $ (Target) .o. Цель — это имя объекта компиляции. Если вы не укажете XXX-OBJS, это составлено исходным файлом, необходимым для этого объекта, является $ (Target) .C или $ (цель) .s. Если указывается $ (target) -objs, исходный файл, который вам нужен для компиляции, этот объект указывается на $ (Target) -Objs и не имеет $ (target) .c или $ (target) .s файл. XXX-OBJS Определяет файл, необходимый для компиляции объектов, обычно только тогда, когда исходный файл кратный, ему это нужно.
Lib-y. Перечисленные объекты составляются .c или .s файлы в текущем каталоге, в этой папке он интегрирован в отдельную библиотеку, т.е. lib.a. Столбец объектов в OBJ-Y и дополнительные столбцы в Lib-Y не будут включены в библиотеку, то есть объекты, которые происходят в то же время, появляющиеся в Obj-Y и Lib-Y, не включены в Lib.a. Стоит отметить, что KBuild Makefile может перечислить файлы для встроенного I, а как часть библиотеки. Следовательно, одна и та же папка может содержать встроенный файл .o и lib.a. Быть
Этот пример создает файл библиотеки на основе Checksum.o и задержать. Использование Lib-Y обычно ограничено lib / and Arc / * / lib.
Каталог рекурсивный. Makefile отвечает только за строительные объекты в своей папке. Файл в подпапке должен быть скомпилирован Makefiles в подпапках, и система автоматически использует Makefiles в подпапках, в этом случае используются Case Obj-Y и OBJ-M. Быть
Если config_ext2_fs установлено на y (встроенный) или m (модульная), соответствующая переменная OBJ будет установлена, а KBuild будет наследует из папки Ext2. KBUILD будет использовать эту информацию, чтобы определить, какие папки необходимо получить доступ к этим папкам и указывать, какие из подпапок есть модули, которые встроены.
2.2.3 Как сделал Makefile решает, какие файлы
(1) Top Makefile определяет, какие подкаталоги в соответствии с корневым каталогом ядра будут подвергаться ядру;
Лучший файл makefile разделяет подкаталог исходного кода Linux в init-y, драйверы-y, net-y, lib-y и core-y. И напрямую содержат Arch / $ (Arch) / Makefle-файл:
(2) ARCH / $ (ARCH) / Makefile определяет, какие файлы в каталоге ARCH / $ (ARCH), какой каталог которого будет разочарован ядро;
Принимая систему ARM в качестве примера:
Head-Y прямое использование имени файла, для процессора без MMU, значение MMUEXT — NNOMMU, соответствующий файл — NOMMU.; Для процессора с MMU значение MMUEXT пустое, соответствующее Файл головой.
При компиляции ядра вы будете входить в Makefile в каталоге, указанном Int-Y, Core-y, libs-y, drvers-y и net-y, и каждый подкаталог генерирует файл Buld-in. . Файл может быть сгенерирован в каталоге, указанном libs-y. Наконец, файлы, указанные из head-y и build-in.o, файлы lib.a подключены к файлу изображения vmlinux.
(3) Какие файлы в соответствии с каждым решением каталога на уровне будут разочарованы ядро, какие файлы будут инкапсулированы (т. Е. Драйверы), вступает в те подкаталог продолжать вызывать их makefile.
В файле включения / config / auto.conf значение переменной имеет две категории: «Y» и «M». MakeFile от каждого каталога уровня Используйте эти переменные, чтобы определить, какие файлы зашифрованы в ядре, какие файлы скомпилированы (т. Е. Драйверы), чтобы ввести эти подкаталог следующего уровня, продолжайте компилировать.
- OBJ-Y используется для определения того, какие файлы зашифрованы (встроенные) ядро;
- OBJ-M используется для определения того, какие файлы скомпилированы в загруженные модули;
- Lib-y используется для определения того, какие файлы компилируются в файлы библиотеки;
- OBJ-Y, OBJ-M также может быть использован для указания следующего слоя абонентов для входа.
2.3.4 Как Makefile сознает эти файлы?
То есть то, что такое вариант связи?
- Global, подходит для всего дерева кода ядра; Глобальные параметры определены в Top Makefile и Arch / $ (Arch) Makefle, имена этих вариантов: CFLAGS, AFLAGS, LDFLAGS, Arflags, параметры для компиляции C файлов, компилируйте Параметры для собранных файлов, подключается к файлам и параметрам для создания файлов библиотеки.
- Local, только для всех файлов в makefile; только для всех файлов в makefile; частичные параметры определены в каждом подкаталоге, name: extea_cflags, extea_aflags, extea_lidflags, extea_arflags, их использование и глобальная опция одинаковы.
- Индивидуальный, только для файла. Вы можете использовать CFLAGS _ $ @ и AFLAGS_ $ A для определения CF и компилятора компилятора. $ @ Означает целевое имя файла.
2.3.5 Makefile Как подключить эти файлы
Определяется в верхней части Makefile и Arch / $ (Arch) / Makefle: head-y, init-y, драйверы-y, net-y, lib-y и core-y (кроме головы-y, другой — это каталог название). В Top Makefle эти имена каталогов напрямую добавляют Buld-in.o или lib.a, указывая, что соединение с ядром:
Примечание. Функции обработки строки PATSUSSAGE Использование: $ (PATSUST Pattern, замена, текст) Найти «Текст» символов, которые соответствуют формату «Шаблон», заменить на «замена». Например, начальное значение init-y — init /, после обработки, «init-Y» становится «init / Sported-n.o». Быть
Порядок подключения целевого файла: head-y, init-y, core-y, lib-y, драйвер-y и net-y. Быть
Для систем ARM, соединительные сценарии Linux являются аркой / ARM / KERNEL / VMLINUX.LDS.S.
2.3.6 Сводка анализа Makefile
- Серия переменных определяется в файле конфигурации. Makefile будет определять, какие файлы в ядро, какие файлы включены в модуль, какие документы участвуют в модуле.
- Top Makefile и Arch / $ (Arch) / Makefile Определяет, какие подкаталоги в корневом каталоге, какие файлы и каталоги будут созданы в каталоге ARC / $ (ARCH).
- Наконец, Makefile под всеми уровнями решает, какие файлы будут разочарованы ядро, какие файлы будут встроены в модули (то есть драйверы), вводят в те каталог, чтобы продолжить вызов их makefile.
- Top Makefile и Arch / $ (Arch) / Makefile Компиляция Компиляции, варианты подключения, которые могут повлиять на все файлы: CFLAGS, MLAGS, LDFLAGS, ARFLAGS.
- Makefile В каждом каталоге уровня может установить компиляцию, варианты подключения: Extra_cflags, Extraflags, Extra_ldflags, Extraffs, Extra_ldflags, Extra_arflags, которые могут повлиять на текущий каталог; вы также можете установить параметры компиляции, которые могут повлиять на файл: CFLAGS _ $ @, AFLAGS _ $ @.
- Top Makefile генерирует файл изображения ядра VMLinux на основе определенного порядка заказа
3 Kconfig Анализ ядра Linux
- Все инструменты конфигурации генерируются путем чтения файла ARC / $ (ARCH) / KCONFIG для генерации интерфейса конфигурации, является общим входом всех файлов конфигурации, которые будут содержать файл Kconfig для других каталогов;
- В каждом подкаталоге в каждом подкаталоге имеется файл makefile и файл kconfig;
- Kconfig используется для настройки ядра, который является исходным файлом для различных интерфейсов конфигурации;
- Инструмент конфигурации ядра читает каждый файл Kconfig, генерирует интерфейс конфигурации для разработчика для настройки ядра и, наконец, генерирует файл конфигурации .Config;
- Интерфейс конфигурации кабеля организован в дереве в форме дерева. Есть несколько подменю в главном меню, а подменю имеет опцию подменю или конфигурации. Каждое подменю или вариант может иметь зависимости, которые используются для определения того, что они отображаются. Был выбран только родитель зависимости, ребенок будет отображаться.
Основные элементы Kconfig включают в себя:
3.1 config
Запись конфигурации используется для настройки опции, которая используется для создания переменной, которая будет записана в файл конфигурации вместе со своим значением .Config. Появились три результата конфигурации в Config:
Ниже приведен пример, чтобы проиллюстрировать формат конфигурации, код выбран из драйверов / CHAR, используемых для настройки циклады:
- Ключевое слово Config указывает на начало параметра конфигурации. Следующие циклады указывают имя конфигурации, пропуская «config_», полное имя параметров конфигурации — config_cyclades.
- Переменный тип. Тип переменной конфигурации: Bool, Tristate, String, Hex, Int, Tristate и String — это основные типы, а другие являются их вариантами. Значение переменной BOOL имеет два типа; значение триистета имеет y, m и n; строка представляет собой строку; значение hex представляет собой шестнадцатеричные данные, а значение int представляет собой десятичные данные.
- Зависимость. Формат: «Зависит от» / «Требуется» Только выражение Serial_NONSTARDARD && (PCI || ISA) верно, появится оперативная информация о текущей опции конфигурации.
- Опция конфигурации Fwader будет автоматически выбрана при выборе циклады. Формат выглядит следующим образом: «Выбрать» [«Если» ]
- Помощь информации
3.2 menu
Ввод меню используется для генерации меню, формат выглядит следующим образом:
Строка, которая появляется после меню, является именем меню, «Меню» и «EndMenu» имеют много конфигураций.
3.3 choice
Выбор ввода сочетает в себе несколько аналогичных вариантов конфигурации для пользователей, а формат выглядит следующим образом:
В реальном использовании несколько конфигураций будет определен в «Выборе» и «EndChoice».
3.4 comment
Запись комментариев используется для определения некоторой справочной информации, которая отображается в первой строке интерфейса во время процесса конфигурации. И эта информация о помощи появится в файле конфигурации (в качестве комментария), формат следующим образом:
Пример от арки / ARM / KCONFIG
3.5 source
Запись источника используется для чтения другого файла Kconfig, формат выглядит следующим образом:
Вот пример, код выбран из драйверов каталога:
5. Скомпилируйте ядро Linux
Шаг 1: Скопируйте арку / ARM / CONFIGS / S3C2410_DEFCONFIG для файла .CONFIG #CP Arch / ARM / CONFIGS / S3C2410_DEFCONFIG.
Шаг2: изменить makefile под каталогом ядра
Шаг3: Выполните Menuconfig, сохранить, если есть проблема, выполнить # Menuconfig с корневыми разрешениями
Step4: Скомпилируйте ядро # Сделайте Zimage после компиляции, Zimage помещается в / arch / arm / boot / zimage.
Интеллектуальная рекомендация
Пошаговая загрузка файла Spring MVC-09 (на основе файла загрузки клиента Servlet3.0 + Html5)
пример тестовое задание Исходный код Несмотря на загрузку файлов в Servlet3.0 +, мы можем очень легко программировать на стороне сервера, но пользовательский интерфейс не очень дружелюбен. Одна HTML-ф.
Создайте многоканальное окно в приложениях Win32
Создайте многоканальное окно в приложениях Win32, создайте несколько оконных объектов одного и того же класса Windows, а окна объектов разных классов окон. .
Путь к рефакторингу IOS-APP (3) Введение в модульное тестирование
IOS-APP реконструкция дороги (1) структура сетевых запросов IOS-APP реконструкция дороги (два) Модельный дизайн При рефакторинге нам нужна форма, позволяющая вносить смелые изменения, обеспечивая при .
Tree——No.617 Merge Two Binary Trees
Problem: Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge them into a new bin.
Источник