Компиляция внешнего модуля ядра с большим количеством исходных файлов - PullRequest
0 голосов
/ 03 ноября 2011

Я новичок в ядре Linux.

При компиляции модуля ядра возникает следующая проблема:

make[3]: execvp: /bin/sh: Argument list too long

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

Я не слишком знаком с моей системой сборки, но, насколько я вижу, мы добавляем в obj-m * .c файлы с относительным путем.

Есть идеи?

1 Ответ

4 голосов
/ 03 ноября 2011

Довольно странно, что ваш модуль ядра такой большой и состоит из множества файлов.Общепринятым является наличие небольших модулей ядра (возможно, для связи с внешними вспомогательными программами в пользовательском пространстве).Вы уверены в своей архитектуре программного обеспечения?

Возвращаясь к вопросу, вы можете поместить все аргументы для gcc в файл типа my.args и просто вызвать gcc с помощью gcc @my.args, потому что gcc обрабатывать @ специально.

Вы также можете перекомпилировать ядро ​​и соответственно увеличить #define для ARG_MAX в файле include/linux/limits.h.Я часто определяю это как 2 мегабайта (байты), то есть (2<<20)

...