这是我对内核模块的介绍。我正在关注The Linux Kernel Module Programming Guide,并编写了我的第一个简单模块。
这是我的模块文件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模块
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环境启动。
谁能帮我解决我在这里做错了吗?
可能的重复问题实际上解决了我的问题,但这不是我的直接问题。我在问题搜索过程中遇到了这个问题,但没想到。实际上,这是对我的问题的一条评论,改变了我对错误的看法,然后提到的答案解决了我的问题。