Журнал ядра не будет отображать "Hello kernel", пока драйвер не будет удален
Я только начал писать символьный драйвер. Итак, я вставил свой первый код драйвера, который печатает "hello kernel" из init_module1 и "Bye kernel" из модуля выхода в журнале ядра. Когда я вставляю драйвер и использую dmesg для просмотра журнала ядра, я не могу найти сообщение "Hello kernel", но когда я удаляю драйвер (используя rmmod), я получаю как "Hello kernel", так и "Bye kernel" в журнале. Не могу понять, как и почему. Это мой код...
header.h
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("GPL");
init.c
#include"header.h"
static int init_module1(void)
{
printk(KERN_ALERT "Hello kernel");
return 0;
}
module_init(init_module1);
exit.c
#include"header.h"
static void exit_module(void)
{
printk(KERN_ALERT "Bye Kernel");
}
module_exit(exit_module);
Makefile-
INSTALLDIR= $(shell pwd)/modules
ifneq ($(KERNELRELEASE),)
obj-m := c.o
c-objs := init.o exit.o
else
KERNDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNDIR) M=$(PWD) modules
@rm -rf $(INSTALLDIR)
@mkdir $(INSTALLDIR)
@mv *.ko *.mod.c *.o .*.cmd $(INSTALLDIR)
clean:
rm -rf $(INSTALLDIR)
endif
1 ответ
Решение
Журнал ядра обрабатывает только полные строки. Добавьте недостающий символ новой строки:
printk(KERN_ALERT "Hello kernel\n");