linux设备驱动程序和insmod

时间:2018-08-16 11:31:01

标签: c linux-device-driver

#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发出时,addk输出不会由printk打印 我是新手,请问有人可以帮助我了解为什么会这样吗?

我的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

1 个答案:

答案 0 :(得分:1)

刷新该行后,将出现

printk输出。当您在\n的末尾缺少printk时,在删除内核模块时将在下一次刷新时打印生成的字符串。 因此printk("result : %d\n",add(12,234));应该可以工作。