2

Linux デバイスのプログラミングを試みていますが、奇妙な問題が発生します。すべての printk 行について、コンソールに常に 2 回表示されます。

たとえば、私の 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

ドライバーをロードすると、メッセージが 2 回表示されます。2 回目は、私が必要としない厄介なプレフィックス情報を常に提供します!

# 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