The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

8.1.3 Платформа Makefile в ядре

8.1.3 Платформа Makefile в ядре

Предыдущая  Содержание  Следующая V*D*V

Чтобы понять основы Makefile ядра, рассмотрим пример Makefile драйвера. Для этого возьмём drivers/net/Makefile. Сначала рассмотрим Makefile версии 2.4, а затем версии 2.6.

Распечатка 8.1 показывает в упрощённом виде drivers/net/Makefile в Linux 2.4. Первые четыре переменные имеют особое значение. В obj-y находится список объектов, которые непосредственно встраиваются в ядро. В obj-m находится список объектных файлов, которые собираются в виде модулей. Две другие переменные просто игнорируются в процессе сборки.

O_TARGET является целью (то есть результатом работы) для этого Makefile; финальный образ ядра создаётся при сборке всех файлов O_TARGET из с различных подкаталогов. Правила для упаковки всех объектных файлов в этот файл, указанный O_TARGET, определяются $TOPDIR/Rules.make (* TOPDIR является переменной сборки и используется для получения  основного каталога исходных кодов ядра, чтобы сборка не зависела от расположения базового каталога.), который явно включается в Makefile. Файл net.o добавляется в окончательный образ ядра Makefile-ом верхнего уровня.

Специальному объектному файлу, называемому многоэлементным объектом (multipart object), процессом make задано специальное правило. Многоэлементный объект создан с помощью нескольких объектных файлов. Одноэлементый объект не требует специального правила; механизм сборки выбирает исходный файл для сборки, заменяя часть .o целевого объекта на .c. С другой стороны, при сборке многоэлементного объекта должен быть указан список объектов, которые составляют многоэлементный объект. Этот список многоэлементных объектов определяется в переменной list-multi. Для каждого имени, которое появляется в этом списке, эта переменная получается путём добавления строки -objs к имени получаемого списка объектов, необходимого для создания многоэлементного модуля.

Наряду с obj-$(…), ядро версии 2.4 должно с помощью subdir-$(…) указать список подкаталогов для обхода. Снова, то же  самое правило, которое применяется для obj-*, справедливо также для подкаталоги (то есть subdir-y используется для просмотра списка каталогов при сборке образа ядра, в то время как subdir-m используется для обхода при сборке модулей). Наконец, мы подошли к переменной export-objs. Это список файлов, который может экспортировать символы.

Makefile ядра версии 2.6, показанный в Распечатке 8.2, гораздо проще.

Основными отличиями в процедуре сборки версии 2.6 по сравнению с процедурой сборки версии 2.4 являются:

 

Не нужно привлекать Rules.make; правила для сборки экспортируются в неявном виде.

Makefile не указывает имя цели, потому что есть установленный для сборки целевой built-in.o. Чтобы собрать образ ядра, компонуются built-in.o из различных подкаталогов.

Список подкаталогов, которые должны быть посещены, использует ту же переменную obj-* (в отличие от версии 2.4, где используется переменная subdirs-*).

Объекты, которые экспортируют символы, не должны быть упомянуты специальным образом (чтобы узнать эту информацию, процесс сборки использует макрос EXPORT_SYMBOL, встречаемый им в исходном коде).

 

Предыдущая  Содержание  Следующая