Я создаю встроенные машины, которые запускают RT_PREMPT версию Linux. Это установка Ubuntu 10.04 с ядром Linux 2.6. Да, это старое ядро, но я застрял с ним некоторое время.
Когда я скомпилировал ядро, я использовал gcc версии 4.4. В этой системе есть модуль ядра, который я успешно компилировал в течение трех лет.
Из моего Makefile...
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) \
modules
Мой текущий проект требует поддержки С++ 14, поэтому я обновил gcc и g++ до версии 5.1.0, построив исходный код. Все мои программы пользовательского режима компилируются, но когда я пошел на сборку обновленной версии моего модуля ядра, я сразу же получил следующую ошибку:
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-54-generic'
CC [M] /home/tbj/srcroot/ctsengine-hg/CtsRt/ctsrt_main.o
In file included from include/linux/compiler.h:40:0,
from include/linux/stddef.h:4,
from include/linux/list.h:4,
from include/linux/module.h:9,
from /home/tbj/srcroot/ctsengine-hg/CtsRt/ctsrt_main.c:31:
include/linux/compiler-gcc.h:86:30: fatal error: linux/compiler-gcc5.h: No such file or directory
Короче:
fatal error: linux/compiler-gcc5.h: No such file or directory
Если я снова использую gcc 4.4 (я оставил его на своем компьютере в другом каталоге), он компилируется и работает отлично.
Очевидно, что я что-то упускаю. Невозможно ли скомпилировать модуль ядра с более новой версией компилятора, чем скомпилирована операционная система? Мне это кажется маловероятным. Есть ли какой-то шаг конфигурации, который мне не хватает? Есть ли системная переменная, которую мне нужно обновить? Есть ли дополнительные заголовки, которые я должен скачать? Я приложил все усилия для обновления сборки, но это было актуально. У меня есть источник и заголовки ядра для моей системы. Я не уверен, что еще загрузить.
Любые идеи этой проблемы очень ценятся. Заранее благодарю вас.