Как я могу проверить, является ли указанный c. c файл в linux исходных сборках ядра? - PullRequest
0 голосов
/ 08 января 2020

Я много работаю с ядрами, потому что упаковываю их в мой дистрибутив (Parabola), и иногда некоторые модификации приводят к тому, что один. c файл не может быть собран. Однако я хотел узнать, есть ли способ протестировать один из этих одиночных файлов. c, чтобы узнать, не будет ли он работать при сборке всего ядра. Например, предположим, что драйверы / net / ethernet / broadcom / bnx2x / bnx2x_main. c не удается собрать, поэтому, если я вручную сделаю:

$ gcc drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c

, произойдет сбой с:

drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:23:10: fatal error: linux/moduleparam.h: No such file or directory
   23 | #include <linux/moduleparam.h>
      |          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.

Большинство включений находятся в директории includes, но не знаю, как заставить это работать. Можно ли делать то, что я хочу? и как?

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Если я правильно понимаю вопрос, вы хотите знать, как создать отдельный файл .o в дереве ядра. Для этого просто вызовите make с этим единственным .o файлом в качестве цели. Сделайте это из каталога linux source source root.

Например:

$ make ./drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.o
  CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  DESCEND  objtool
  CC [M]  drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.o
$
0 голосов
/ 08 января 2020

Когда gcc не может что-то построить, он должен возвращать ненулевой код завершения. Когда он что-то строит успешно, он должен вернуть 0.

Если вы делаете это в оболочке, вы можете проверить код завершения самой последней команды, которая была выполнена; он живет в переменной $?. Вы можете сравнить код выхода с 0, и если они не совпадают, то вы можете делать все, что захотите в случае ошибки, например:

gcc somefile.c
if [ $? != 0 ]; then
# do whatever you want to do on errors
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...