Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Похоже, что поставщик вашей системы включил проверку подлинности модуля ядра на вашем ядре, что означает, что он не будет загружать какой-либо модуль, который поставщик не подписал. Другими словами, ваш исправленный модуль не подписан (правильно), и ядро откажется его загрузить.
Предполагается, что это означает, что вредоносные программы и руткиты не могут загружать вредоносные модули ядра.
Предлагаю вам обратиться к вашему поставщику. На вашей платформе может быть опция, позволяющая отключить проверку подписи. В противном случае ваш поставщик может подписать модуль для вас. У вас может даже быть ключ и детали алгоритма проверки подписи и можете его подписать.
Не зная, на какой платформе вы работаете, трудно дать более конкретные предложения.
Вместо повторной настройки ядра эту ошибку (module verification failed
) можно было бы решить, просто добавив одну строку CONFIG_MODULE_SIG=n
в начало Makefile
для самого модуля:
CONFIG_MODULE_SIG=n
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
module verification failed: signature and/or required key missing - tainting kernel
& quot; сообщение.
– Nan Xiao
2 November 2015 в 11:05
uname -a
выходы: «Linux ubuntu 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
») и обнаруживает такое же явление в Suse или RHEL: CONFIG_MODULE_SIG=n
не используется в Makefile модуля. Независимо от того, добавьте эту конфигурацию или нет. Первый загрузочный модуль будет печатать & quot; module verification failed: signature and/or required key missing - tainting kernel
", то это сообщение не будет печататься при его загрузке. Пожалуйста, попробуйте, THX!
– Nan Xiao
3 November 2015 в 07:33
rtl8188
и Ubuntu 15.1
– JohnAllen
16 April 2016 в 07:42
CONFIG_MODULE_SIG=n
приводит к некорректному анализу module.h
при компиляции модуля. У вас будет расхождение структуры структуры ядра и модуля. Почему так много упреков здесь?
– Ilya Matveychikov
15 September 2016 в 23:20
В общем случае, если вы создаете собственное ядро и используете make oldconfig
. Это копирует удаляемый конфигурационный файл из / boot. В настоящее время большинство модулей ядра должны быть подписаны поставщиком linux. Поэтому отредактируйте файл .config и отключите CONFIG_MODULE_SIG_ALL и CONFIG_MODULE_SIG перед компиляцией ядра.
CONFIG_MODULE_SIG=n
CONFIG_MODULE_SIG_ALL=n
# CONFIG_MODULE_SIG_FORCE is not set
# CONFIG_MODULE_SIG_SHA1 is not set
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
Перейдите в исходный каталог ядра и выполните (например):
./scripts/sign-file sha512 ./signing_key.priv ./signing_key.x509 /lib/modules/3.10.1/kernel/drivers/char/my_module.ko
для ядра 4.4. *, расположение клавиш должно быть следующим:
./scripts/sign-file sha512 ./certs/signing_key.pem ./certs/signing_key.x509 path/to/your/kernel/module.ko
Проверьте, какой алгоритм дайджеста используется вашим ядром, открыв .config
и прочитав его в настройках конфигурации CONFIG_MODULE_SIG
.
CONFIG_MODULE_SIG=y CONFIG_MODULE_SIG_ALL=y CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH="sha512"