1

这是我对内核模块的介绍。我正在关注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 环境使用双启动。

谁能帮我解决我在这里做错了什么?

可能重复的问题实际上解决了我的问题,但这不是我的直接问题。我在问题搜索期间经历了这个问题,但无法理解。这实际上是对我的问题的一条评论,改变了我对错误的看法,然后提到的答案解决了我的问题。

4

0 回答 0