簡體   English   中英

制作簡單的Linux內核模塊

[英]Making simple linux kernel module

我正在嘗試升級守護程序代碼,以使其不是可執行文件,而是內核模塊,但是即使使用簡單的示例,我也遇到困難。

這是我嘗試的代碼:

#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void){
   printk("Hello world 1.\n");
   return 0;
}

void cleanup_module(void){
  printk(KERN_ALERT "Goodbye world 1.\n");
}

而且因為我了解到我不能直接編譯代碼,所以在復制和稍微修改makefile時采取了以下措施:

WARN    := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
CFLAGS  := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC      := gcc
OBJS    := ${patsubst %.c, %.o, ${wildcard *.c}}

all: ${OBJS}

然后,在命令行中執行“ make”,並期望安裝該程序:

這是我的輸出:

    gcc -O2 -DMODULE -D__KERNEL__ -W -Wall -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/`uname -r`/build/include   -c -o d.o d.c
    In file included from /lib/modules/2.6.21.5-smp/build/include/asm/thread_info.h:16,
                    from /lib/modules/2.6.21.5-smp/build/include/linux/thread_info.h:21,
                    from /lib/modules/2.6.21.5-smp/build/include/linux/preempt.h:9,
                    from /lib/modules/2.6.21.5-smp/build/include/linux/spinlock.h:49,
                    from /lib/modules/2.6.21.5-smp/build/include/linux/module.h:9,
                    from d.c:1:
    /lib/modules/2.6.21.5-smp/build/include/asm/processor.h:82: error: 'CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function)
    /lib/modules/2.6.21.5-smp/build/include/asm/processor.h:82: error: requested alignment is not a constant
    In file included from /lib/modules/2.6.21.5-smp/build/include/linux/sched.h:51,
                    from /lib/modules/2.6.21.5-smp/build/include/linux/utsname.h:35,
                    from /lib/modules/2.6.21.5-smp/build/include/asm/elf.h:12,
                    from /lib/modules/2.6.21.5-smp/build/include/linux/elf.h:7,
                    from /lib/modules/2.6.21.5-smp/build/include/linux/module.h:15,
                    from d.c:1:
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:33:3: error: #error You lose.
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    /lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
    In file included from /lib/modules/2.6.21.5-smp/build/include/linux/module.h:21,
                    from d.c:1:
    /lib/modules/2.6.21.5-smp/build/include/asm/module.h:62:2: error: #error unknown processor family
    make: *** [d.o] Error 1

當我只處理兩個有據可查的函數時,為什么要得到所有這些錯誤? 我的makefile關閉了嗎? 請指教?

沒關系。 我發現自己的答案是:

https://www.kernel.org/doc/Documentation/kbuild/modules.txt

它指出:

To build against the running kernel use:

    $ make -C /lib/modules/`uname -r`/build M=$PWD

    Then to install the module(s) just built, add the target
"modules_install" to the command:

    $ make -C /lib/modules/`uname -r`/build M=$PWD modules_install

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM