c – 制作简单的linux内核模块
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 制作简单的linux内核模块,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3991字,纯文字阅读大概需要6分钟。
内容图文
![c – 制作简单的linux内核模块](/upload/InfoBanner/zyjiaocheng/964/396755cdb53b475d84f459be524ca8e2.jpg)
我正在尝试升级我的守护进程代码,以便它不是一个可执行文件,它将是一个内核模块,但即使使用一个简单的例子我也很困难.
这是我试过的代码:
#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
内容总结
以上是互联网集市为您收集整理的c – 制作简单的linux内核模块全部内容,希望文章能够帮你解决c – 制作简单的linux内核模块所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。