无论我在哪里搜索Linux内核开发,我都会得到创建Linux内核模块的答案 . 例
/*
* hello−1.c − The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
这里有init_module和cleanup_module函数,我理解这些函数包含初始化和清理内核时要执行的内容 . 通过在makefile中添加obj-m = hello-1.c来实现 .
但我不想要这个 . 我想添加一个内置程序,而不是一个驱动程序,基本上是一个服务,以促进从内核级别上传一些数据的 Cloud . 我不想在编译内核时想要程序的模块选项 .
我理解的只是程序我应该使用obj-y而不是obj-m . 但是没有手册来编写这类程序 . 为什么?我错过了什么吗?这些程序是否也具有init_module和cleanup_module函数,即使它们不是模块?
2 回答
例如,考虑您的源在linux内核源代码树中的
driver/new
下 . 您需要在drivers
和new
下修改Makefile's
以将模块静态构建到Linux内核中 .在 drivers/Makefile 下,在末尾添加以下行 .
在 drivers/new/Makefile 下,在末尾添加以下行 .
构建linux内核后 . 并加载以查看您的模块使用
dmesg
命令打印了printk
消息 .注意:在将模块静态构建到linux中时,请进行更改
至
并改变
至
看看kernel doc Makefiles
参考:
“--- 3.2内置对象目标 - 对象
“