这是我对内核模块的介绍。我正在关注Linux 内核模块编程指南,并且刚刚编写了我的第一个简单模块。
这是我的模块文件hello.c
;
/*
* hello.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");
}
module_init(init_module);
module_exit(cleanup_module);
这是我的Makefile
obj−m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
当我运行make
命令时,这就是我得到的..
make -C /lib/modules/4.15.0-45-generic/build M=/home/nailaakbar modules
make 1 : 进入目录'/usr/src/linux-headers-4.15.0-45-generic'
建筑模块,第 2 阶段。
MODPOST 0 个模块
make 1:离开目录'/usr/src/linux-headers-4.15.0-45-generic'
但是现在当我尝试使用此命令将其插入内核时;
sudo insmod hello.k
我收到了这个错误
insmod:错误:无法加载模块 hello.ko:没有这样的文件或目录
我尝试了不同的解决方案,比如将这两个函数设为静态,或者更改文件位置,但没有任何结果。
目前我正在桌面上运行所有这些命令,并且我正在为 linux 环境使用双启动。
谁能帮我解决我在这里做错了什么?
可能重复的问题实际上解决了我的问题,但这不是我的直接问题。我在问题搜索期间经历了这个问题,但无法理解。这实际上是对我的问题的一条评论,改变了我对错误的看法,然后提到的答案解决了我的问题。