Загрузка модуля ядра вызывает ошибку

Я новичок в разработке модулей ядра и решил написать свой первый модуль ядра сегодня.

мой модуль должен получить 2 числа в качестве входных данных, разделенных пробелами, и эти числа сложены вместе.

модуль ядра обменивается данными через запись proc с именем calc (/proc/calc), поэтому чтение из файла будет возвращать выходные данные, а запись в этот файл будет давать новый ввод (2 числа разделены пробелом)

при загрузке модуля (insmod) моя оболочка застревает, при ее прерывании и просмотре dmesg я вижу строку BUG ядра, вот трассировка.

я не уверен, является ли это ошибкой в ​​моем коде, или это настоящая ошибка в ядре linux, и хотел бы понять, что я сделал неправильно, и как я могу начать отладку моего модуля с данным журналом dmesg.

Вот исходный код моего модуля.

мой make-файл очень стандартный,

obj-m += calc.o
KDIR := /lib/modules/$(shell uname -r)/build

all:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean

Большое спасибо заранее!

РЕДАКТИРОВАТЬ: я использую Ubuntu 16.04.02, выпуск 4.10.0-28, вполне стандартная.

2 ответа

Проблема в утверждении last_message = ""; неправильно.. Вы назначаете неверный адрес памяти указателю last_message. Вот почему ООП идет. last_message должно быть изменено следующим образом

static void reset_calc(void) {
    last_message_size = 0;
    last_message = "";
    last_message_type = WAS_LAST_READ; // we expect the first action to     be write
    }

следует изменить на

   memset(last_message,0,MAX_MESSAGE_SIZE);

Вы создали файл устройства?

root@xyz-PC:~/s_flow/dd# ls -l /dev/my_device

если нет, то сначала создайте файл устройства с помощью команды ниже

root@achal:~/dd/char1# mknod /dev/my_device c  300  0

в моей системе (Ubuntu 14.04) все хорошо, как показано ниже.

root@xyz:~/s_flow/dd# dmesg
[  519.751941] calc: module verification failed: signature and/or required key missing - tainting kernel
[  519.752368] Calculator initializing
[  519.752372] Initializing proc entry at /proc/calc
[  519.752380] initialized calc proc entry
[  519.752384] mallocing last_message for 128 bytes
[  519.752386] malloc finished, resetting calc
[  519.752389] calc reset, all good :

Можете ли вы дать подробную информацию о программе, которая использует этот модуль?

Другие вопросы по тегам