回覆列表
  • 1 # 使用者7272742818983

    1.hello.c

    #include

    #include

    MODULE_LICENSE("DualBSD/GPL");

    MODULE_AUTHOR("MDAXIA");

    static int __inithello_init(void)

    {

    printk(KERN_ALERT "Helloworld!\n");

    return 0;

    }

    static void __exithello_exit(void)

    {

    printk(KERN_ALERT "Goodbye,cruelworld!");

    }

    module_init(hello_init);

    module_exit(hello_exit);

    2.Makefile

    ifeq ($(KERNELRELEASE),)

    KDIR := /lib/modules/$(shell uname-r)/build

    PWD := $(shell pwd)

    modules:

    $(MAKE) -C $(KDIR) M=$(PWD)modules

    modules_install:

    $(MAKE) -C $(KDIR) M=$(PWD)modules_install

    clean:

    rm -rf *.o *.ko .depend *.mod.o*.mod.c Module.* modules.*

    .PHONY:modules modules_installclean

    else

    obj-m :=hello.o

    endif

    3. 編譯模組

    #sudomake (呼叫第一個命令default)

    這時,在hello.c 所在資料夾就會有 hello.ko,這個就是我們需要的核心模組啦

    #sudo make clean

    清理編譯垃圾,hello.ko 也會清理掉。

    4. 插入模組,讓其工作。注意必須是root許可權

    #sudo insmod ./hello.ko

    我們用dmesg 就可以看到 產生的核心資訊啦,Hello world!

    如果沒有輸出"hello from helloworld",因為如果你在字元終端而不是終端模擬器下執行的話,就會輸出,因為在終端模擬器下時會把核心訊息輸出到日誌檔案/var/log/kern.log中。

    #sudo rmmod ./hello

    再用dmesg 可以看到 Bye world!

    擴充套件閱讀:

    示例一 將開機資訊發郵件

    man dmesg 寫道

    The program helps users to print out their bootup messages.Instead of copying the messages by hand, the user need only:

    dmesg > boot.messages

    and mail the boot.messages file to whoever can debug their problem.

    [root@new55 ~]# dmesg >boot.messages

    [root@new55 ~]# ls -l boot.messages

    -rw-r--r-- 1 root root 15838 12-09 12begin_of_the_skype_highlighting 15838 12-0912 免費 end_of_the_skype_highlighting:55boot.messages

    [root@new55 ~]# mail -s "Boot Log of Linux Server"[email protected]

    [root@new55 ~]#

    透過管道查詢

    dmesg | grep world

    dmesg | tail

    dmesg -a

    dmesg -c列印並清除

  • 中秋節和大豐收的關聯?
  • 孫權勸學,講的是名人讀書的故事,除此之外,你還知道哪些有關名人讀書的故事?試與同學交流一番,寫出故事梗?