一、实验目的
掌握Linux中module模块的编程基本方法,并可以将其动态加载入内核。
二、实验内容
- 创建一个空的C文件:hello.c,将下面的代码拷贝进文件。
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
static int __init init_my_module(void) {
printk(KERN_INFO "Hello, my module!\n");
return 0;
}
static void __exit exit_my_module(void) {
printk(KERN_INFO "Bye, my module!\n");
}
module_init(init_my_module);
module_exit(exit_my_module);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("MyName");
- 在同一目录下创建一个空的文件:“Makefile”,将下面的代码拷贝进去。
[注意:第3行和第5行的前面一定不能用空格,一定要用TAB键增加1个缩进!]
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 ,如果成功应该在目录中会生成一个hello.ko的内核模块。
- 使用命令:insmod hello.ko 将模块动态插入进内核,若提示权限问题请在前面加上sudo。
- 执行命令:dmesg,查看输出中是否有模块初始化打印的信息。
- 使用命令:rmmod hello将模块动态从内核中卸载,然后再用dmesg命令查看内核的输出信息。
三、附加实验(操作实验)
请自行在网络上查找相关教程,在自己的虚拟机上配置两项网络服务:
- FTP服务器(Linux的vsftpd):配置成功的标准是使用任意ftp客户端可以成功登录你配置的ftp服务器并上传下载文件;
- WEB服务器(Apache或Nginx):配置成功的标准是使用任意浏览器访问虚拟机的http://127.0.0.1可以显示出缺省网页。
四、实验要求
本次实验一共有上述三项内容,请将每一步的过程截图保存在实验报告中。
实验5和实验6的提交时间为1月6日的18:00之前,请及时交给学习委员!