Ваша проблема называется ABI: двоичный интерфейс приложения.Это набор правил (среди прочих), как функции в фрагменте кода получают свои аргументы (упорядочение, заполнение типов в стеке), именование функции, чтобы компоновщик мог разрешать символы и заполнение / выравнивание полей в структурах.
GCC пытается поддерживать стабильный ABI между версиями компилятора, но это не всегда возможно.
Например, GCC 4.4 исправил ошибку в упакованных битовых полях , что означает, чтостарый / новый код больше не может правильно читать структуры, использующие эту функцию.Если бы вы смешивали версии до и после 4.4, повреждение данных происходило бы без сбоев.
В примечаниях к выпуску 4.6 нет указания, что ABI был изменен, но это то, что ядро Linux не может знать -он просто читает версию компилятора, использованную для компиляции кода, и если первые два числа меняются, он предполагает, что запуск кода небезопасен.
Существует два решения:
Вы можете скомпилировать драйвер Nvidia с тем же компилятором, что и ядро. Настоятельно рекомендуется
Вы можете исправить строку версии в двоичном файле.Это обманет ядро при загрузке модуля, но может привести к повреждению данных во внутренних структурах данных.