Ядро: как добавить новый исходный файл для сборки ядра? - PullRequest
5 голосов
/ 18 декабря 2011

Для академического проекта я хочу добавить исходный файл (myfile.c) в каталог kernel/, в тот же каталог, что и exit.c и fork.c.Похоже, что система сборки не подхватывает новый файл автоматически, поскольку я получаю сообщение об ошибке «неопределенная ссылка» с функциями, определенными в myfile.c.Как я мог включить этот файл?

Ответы [ 2 ]

7 голосов
/ 18 декабря 2011

Вам необходимо добавить соответствующий объектный файл в kernel/Makefile. Если у вас есть переменная конфигурации для вашего кода, вы должны использовать:

obj-$(CONFIG_ZERO_STIMULUS_FEATURE) += zerostimulus.o

Если вы строите свой код без переменной конфигурации, просто добавьте его в переменную obj-y:

obj-y += zerostimulus.o

Переменная конфигурации расширяется до y, m или n, в зависимости от того, является ли функция встроенной, встроенной в модуль или выключенной. Затем создаются переменные obj-y, obj-m.

3 голосов
/ 20 января 2013

Это верно!

Просто дополнение: перед сборкой ядра вы знаете, что, запустив "make menuconfig", вы можете указать, какие функции будут встроены в образ ядра ( y ), который будет включен как загружаемый модуль ( m ) и который не будет включен ( n ).

если вы захотите установить его для своей новой функции, вы сможете сделать это, отредактировав файл Kconfig , который вы найдете в той же папке нового файла. В вашем случае "linux-x.y.z/kernel/Kconfig"

Это пример:

config ZERO_STIMULUS_FEATURE
    tristate "My new feature"
    default m
    ---help---
      This is my brand new feature
      Here's a multi-line description

Обычной ошибкой является установка "config CONFIG_ZERO_STIMULUS_FEATURE" вместо "config ZERO_STIMULUS_FEATURE": не добавляйте здесь префикс "CONFIG_"

Если ваша функция не загружается как модуль, вам придется использовать ключевое слово "bool" вместо "tristate". Посмотрите на другие файлы Kconfig, и вы также увидите, как легко установить зависимости.

С уважением, / Angel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...