2

我正在尝试 linux 设备编程,但遇到了一个奇怪的问题。对于我所有的 printk 行,它总是会在控制台上显示两次。

例如,这是我的 helloworld 驱动程序:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) {
    printk("<1> Hello world!\n");
    return 0;
}

static void hello_exit(void) {
    printk("<1> Bye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

这是我的制作文件:

ifneq ($(KERNELRELEASE),)
    obj-m := hello.o
else
    KERNELDIR := /gumstix/linux-2.6.21gum/
    PWD := $(shell pwd)
    ARCH := arm
    CROSS := arm-linux-

default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) modules

clean:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=$(ARCH) clean

endif

当我加载驱动程序时,它会显示两次消息。第二次总是会给出一些我不需要的烦人的前缀信息!

# insmod hello.ko
Hello world!
# Oct 31 10:16:35 gumstix user.alert kernel:  Hello world!

我尝试更改 printk 配置,它只会抑制第一条消息(见下文)。和 'dmesg -n 1' 具有相同的结果。

# echo 0       0       0      0 > /proc/sys/kernel/printk
# insmod hello.ko
# Oct 31 10:29:58 gumstix user.alert kernel:  Hello world!

谁能告诉我为什么这个前缀信息(时间戳+“gumstix user.alert kernel:”)总是出现?如果可能,如何删除它?非常感谢。

以下是我的环境的摘要:

kernel: linux-2.6.21
qemu: QEMU PC emulator version 0.9.1
4

0 回答 0