【发布时间】:2018-08-16 11:31:01
【问题描述】:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include "test.h"
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void) {
printk("DRIVER LOADED\n");
printk("DRIVER INIT\n");
printk("result : %d",add(12,234));
return 0;
}
static void hello_exit(void) {
printk("DRIVER REMOVED\n");
}
module_init(hello_init);
module_exit(hello_exit);
insmod 发出时 printk 不打印 add 函数输出 我是一个新的 ldd lerner,有人可以帮我理解为什么会这样吗?
我的 test.c 包含以下函数体
int add(int a , int b){
return a+b;
}
和Makefile如下
obj-m = initial.o
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
我的输出显示:
Aug 16 11:15:44 beaglebone kernel: [13616.191741] DRIVER LOADED
Aug 16 11:15:44 beaglebone kernel: [13616.191758] DRIVER INIT
Aug 16 11:15:47 beaglebone kernel: [13616.191784] result : 246
Aug 16 11:15:47 beaglebone kernel: [13619.465555] DRIVER REMOVED
【问题讨论】:
-
我不懂你。你能改写你的句子吗?怎么了?你发什么? dmesg 输出似乎没问题,您的函数将 12 与 236 相加并打印出来。您的标头
test.h文件是否包含函数定义,而不仅仅是函数声明? -
add 函数结果为 246,这没关系,但它在我发出 rmmod 命令时执行,而不是在我插入 insmod 时执行。因为我已经在 module_init 函数中编写了这个函数,所以它应该在使用 insmod 插入时执行,不是吗? @KamilCuk
-
是 /var/log/messages 文件中的时间戳吗?
-
如引用问题中所述,您忘记在打印字符串的末尾添加换行符 (
\n)。因此,打印的消息会延迟出现在日志中。
标签: c linux-device-driver