СТА 4/2010

ОБ ЗОР / П РОГ РАММНОЕ ОБ Е СП Е Ч Е НИЕ 22 мощью резидентной версии GCC стро ятся утилиты для вашей целевой систе мы. Затем GCC доводится до состоя ния, в котором его можно использо вать для построения библиотеки Си. Следом вы строите библиотеку, а потом достраиваете GCC. Если ваша целевая платформа стан дартная, то в процессе построения инструментального пакета вам могут помочь свободно распространяемые инструменты типа crosstool Дэна Кеге ла и buildroot Эрика Андерсена. Одна ко их требуется предварительно скон фигурировать, выбрав правильные вер сии компилируемых компонентов, и то оптимизации кода для вашего процес сора они могут и не предоставить. Если вы строите инструментальный пакет для более экзотической встраиваемой системы или вам требуется конкретная версия GCC, утилит и/или библиотеки Си, то даже с использованием этих инструментов вы будете вынуждены создавать свои собственные конфигу рации. И последнее, что следует учесть при построении инструментального паке та, – это то, что для встраиваемой платформы может быть необходимо использование нескольких различных версий библиотеки Си. Стандартная GNU библиотека (glibc) может ока заться слишком велика, и результиру ющие бинарные модули получатся слишком объёмными, чтобы развер нуть их на выбранной целевой системе. Для использования во встраиваемых приложениях был разработан ряд дру гих Си библиотек, таких как diet libc, klibc, newlib и uClibc, – их применение позволяет сократить размер бинарных модулей. Интегрирование дополни тельной Си библиотеки в инструмен тальный пакет может оказаться слож ной задачей и требовать дополнитель ных навыков по сравнению с обычным процессом построения инструменталь ного пакета. К тому же различные биб лиотеки могут подпадать под различ ные модели лицензирования – в част ности, diet libc и klibc подпадают под GPL, а не LGPL, что может вылиться в проблемы с защитой вашей интеллек туальной собственности. Несмотря на то что путь, описанный в данном разделе, сложен, запутан и требует фундаментального понимания устройства всех компонентов инстру ментального пакета, он был не раз пройден. Впрочем, выбирая в качестве платформы «доморощенную» Linux, помните, что способность поддержи вать в актуальном состоянии инстру ментальный пакет и все его компонен ты – очень непростая задача. Начиная такой проект, в первую очередь убеди тесь, что у вас есть люди, способные её выполнить. В дальнейшем вам нужно также быть уверенными, что вы либо сохраните этих людей в проекте, либо будете иметь доступ к экспертам с рав ноценными знаниями и навыками, способным разрешить проблемы, воз никающие в процессе разработки, а также выпускать и поддерживать необ ходимые обновления. П ОСТРОЕНИЕ ЯДРА Построение ядра Linux для встраива емой платформы с использованием кросс компилятора во многом анало гично построению ядра Linux для на стольного компьютера, но с двумя ос новными отличиями. Во первых, при построении ядра нужно установить две переменные ок ружения: ARCH, задающую целевую архитектуру, и CROSS_COMPILE, оп ределяющую нужный префикс имени кросс компилятора. Во вторых, по скольку основная целевая платформа для Linux – это системы с архитекту рой x86/IA 32, вы должны быть готовы к решению проблем с порядком следо вания байтов и прочими архитектурно зависимыми нюансами, которые не были протестированы и исправлены в коде ядра после применения всех необ ходимых «заплаток». Вам также нужно быть уверенными в том, что вы вклю чили в ядро драйверы для всех необхо димых устройств, протоколов и файло вых систем, которые вам понадобятся в процессе собственно загрузки ОС. После множества циклов компиля ции ядра, идентификации ошибок, исправления этих ошибок и повторной компиляции вы в результате получите код ядра, который компилируется «чисто» и может выполняться на вашей целевой аппаратуре. Следующим ша гом будет установка ядра на целевую систему и его тестирование. Если ваша целевая платформа – го товое коммерческое решение, то она, скорее всего, поставляется в комплекте с предустановленным монитором за грузки или начальным загрузчиком, способным найти и развернуть ядро и передать ему управление. Если вы раз рабатываете собственную аппаратуру, не содержащую BIOS, для установки ядра или нестандартного загрузчика вам понадобятся средства прямого до ступа к оборудованию (например, JTAG). Существуют прекрасные сво бодно распространяемые начальные загрузчики типа U Boot или RedBoot, но их использование требует специаль ных навыков, потому что их нужно до рабатывать для конкретной платфор мы, компилировать, инсталлировать и поддерживать. Аналогично JTAG адаптеры тоже требуют наличия у раз работчика специальных навыков, осо бенно когда это касается инсталляции, выполнения и отладки нестандартных программных решений. К этому моменту ядро может старто вать на вашей встраиваемой системе, инициализировать устройства и оста навливаться на попытке найти корне вую файловую систему. Если это ещё не так, значит, вам потребуется пройти че рез несколько циклов построения ядра и устранить проблемы типа некоррект ных базовых адресов и отображения па мяти, чтобы ваше ядро могло правиль но инициализировать оборудование и отображать диагностические сообще ния. Если вы видите сообщение о том, что ядро не смогло найти корневую файловую систему, то это значит, что вы достигли важной вехи в вашем проекте. Несмотря на то что тестирование вашей Linux платформы ещё даже не начина лось, вы уже близки к моменту, когда её можно будет протестировать и начать писать для неё приложения – то, ради чего и затевался проект. С ОЗДАНИЕ БАЗОВОЙ КОРНЕВОЙ ФАЙЛОВОЙ СИСТЕМЫ Корневая файловая система – это файловая система, содержащая систем ные и пользовательские приложения, которые ядро Linux может выполнять, а также необходимую системную инфор мацию типа файлов устройств и конфи гурационных файлов. Во встраиваемых системах используются различные типы корневых файловых систем в зависи мости от того, используется ли в них энергонезависимый носитель (флэш память, жёсткий диск и т.п.) или нет. Системы на основе встраиваемого Linux, не использующие долговремен ного хранилища данных, обычно за гружаются с RAM диска, созданного из сжатого образа файловой системы (его часто называют начальным RAM диском), или с файловой системы в ОЗУ, разворачиваемой непосредствен но в памяти ядра (известной также как initramfs) – этот способ доступен толь СТА 4/2010 www.cta.ru © СТА-ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy