Вопрос или проблема
Я пытаюсь собрать модули в папке “drivers/md/”, следуя шагам в ответе Как (рецепт) собрать только один модуль ядра?
Но я получаю следующую ошибку:
# make -C /lib/modules/$(uname -r)/build M=drivers/md modules
make: Вход в каталог '/usr/src/linux-headers-5.0.0-36-generic'
make[2]: *** Нет правила для создания цели 'drivers/md/bcache/alloc.o', необходимой для
'drivers/md/bcache/bcache.o'. Остановка.
make[1]: *** [scripts/Makefile.build:515: drivers/md/bcache] Ошибка 2
make: *** [Makefile:1614: _module_drivers/md] Ошибка 2
make: Оставление каталога '/usr/src/linux-headers-5.0.0-36-generic'
Что я делаю не так?
Ошибка говорит вам, что у вас нет файла drivers/md/bcache/alloc.o
, доступного для сборки, в тот момент, когда make ищет его. Ваш путь к файлу должен обычно выглядеть как ../drivers/md/bcache/alloc.o
, или даже лучше, вы можете добавить точный каталог, используя аргумент -I
для gcc
.
Для полного и менее неоднозначного ответа, пожалуйста, добавьте ваш MakeFile в исходный пост.
Ответ или решение
Ошибка, которую вы получаете при сборке модуля в каталоге "drivers/md/", связана с тем, что система сборки не может найти целевой объектный файл drivers/md/bcache/alloc.o
. Это может происходить по нескольким причинам. Вот несколько шагов, которые могут помочь решить эту проблему:
-
Проверьте наличие файлов: Убедитесь, что в каталоге
drivers/md/bcache/
существуют все необходимые исходные файлы, включаяalloc.c
. Если какого-либо файла не хватает, вам нужно будет его восстановить или сгенерировать. -
Проверьте Makefile: Убедитесь, что в вашем
Makefile
корректно указаны все зависимости. Возможно, вы упустили какие-то файлы или неправильно указали пути. Пример правильной структуры для модуля может выглядеть так:obj-$(CONFIG_BCACHE) += bcache/
-
Обновите заголовки ядра: Проверяйте, что у вас установлены актуальные заголовочные файлы ядра для версии, которую вы используете. Это можно сделать с помощью команды:
sudo apt-get install linux-headers-$(uname -r)
-
Сборка всего каталога: Если вы пытаетесь собрать отдельный модуль, попробуйте собрать весь каталог
drivers/md/
. Это позволит скомпилировать все зависимости и модули:make -C /lib/modules/$(uname -r)/build M=drivers/md/
-
Проверка конфигурации: Убедитесь, что ваш
.config
файл содержит настройки для нужного вам модуля. Это можно сделать, выполнив:grep BCACHE /path/to/.config
-
Очистка и повторная сборка: Иногда помогает очистка предыдущих сборок. В каталоге модуля используйте команду:
make clean
После этого попробуйте снова выполнить сборку.
-
Логи сборки: Если ошибка сохраняется, посмотрите на более детальную информацию в логах сборки, чтобы выявить конкретное место, где происходит сбой.
Если вы выполните указанные выше шаги и все равно столкнетесь с трудностями, пожалуйста, прикрепите содержимое вашего Makefile
и выведенные сообщения об ошибках для получения более конкретных рекомендаций.