我是一个新手,对内核模块编程一窍不通。现在我正在尝试运行最基本的“Hello World”模块程序,但我无法得到任何输出。
我已经按照《Linux设备驱动程序》第三版介绍的方法编写了“Hello World”程序,并从这个网站和那个网站获得了一些帮助。
文件在
导致结果:
我假设到这一步为止,没有出现任何问题。现在,我插入我的模块,然后移除:
我已经按照《Linux设备驱动程序》第三版介绍的方法编写了“Hello World”程序,并从这个网站和那个网站获得了一些帮助。
hello.c
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int hello_init(void){
printk("<1>Hello, world!\n");
return 0;
}
static void hello_exit(void){
printk(KERN_ALERT "Goodbye, world..\n");
}
module_init(hello_init);
module_exit(hello_exit);
文件在
/home/volkan/drive
目录中。除了c文件,我还有我的Makefile
Makefile
obj-m += hello.o
从终端执行以下命令以编译模块:
sudo make -C /lib/modules/3.8.0-19-generic/build M=/home/volkan/drive/ modules
导致结果:
make: Entering directory `/usr/src/linux-headers-3.8.0-19-generic'
CC [M] /home/volkan/drive/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/volkan/drive/hello.mod.o
LD [M] /home/volkan/drive/hello.ko
make: Leaving directory `/usr/src/linux-headers-3.8.0-19-generic'
我假设到这一步为止,没有出现任何问题。现在,我插入我的模块,然后移除:
volkan@Varaquilex ~/drive $ sudo insmod ./hello.ko
volkan@Varaquilex ~/drive $ sudo rmmod hello
volkan@Varaquilex ~/drive $
没有输出。我在Linux方面也缺乏经验,因此解释性答案更受欢迎。我做错了什么吗?为什么我看不到任何输出?
dmesg
中有任何输出吗? - terdoncat dmesg
命令时,看到了很多内容,但是没有关于该模块的任何信息。我认为它应该在文件末尾,但是不仅不在末尾,也不在中间或开头。 - Varaquilexcat kern.log
做了这件事:12月9日18:42:46 Varaquilex kernel:[2314.937815] <1>你好,世界! 12月9日18:42:49 Varaquilex kernel:[2317.873400] 再见,世界..
- Varaquilex