加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 制作简单的linux内核模块

发布时间:2020-12-16 07:10:55 所属栏目:百科 来源:网络整理
导读:我正在尝试升级我的守护进程代码,以便它不是一个可执行文件,它将是一个内核模块,但即使使用一个简单的例子我也很困难. 这是我试过的代码: #include linux/module.h#include linux/kernel.hint init_module(void){ printk("Hello world 1.n"); return 0;}vo
我正在尝试升级我的守护进程代码,以便它不是一个可执行文件,它将是一个内核模块,但即使使用一个简单的例子我也很困难.

这是我试过的代码:

#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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读