实验一 添加最简单的Linux内核模块kello
实验环境
操作系统版本:ubuntu-14.04.1-desktop-i386
下载连接:http://old-releases.ubuntu.com/releases/trusty/ubuntu-14.04.1-desktop-i386.iso
实验课件及源码:https://wwe.lanzouw.com/ilBQnyrwffi
一.实验目的
1、熟练掌握基本的Linux内核模块开发框架和编译方法
2、熟练掌握Linux内核模块添加流程
3、理解Linux内核模块代码中的一些常见宏和参数
4、掌握Linux内核模块程序和应用程序的差异
二.实验内容
1、从教材提供的电子资源中找到或者按教材提示自己编写简单的Linux内核模块kello.c及其对应的Makefile文件
2、编译、安装、删除该模块,查看该模块的安装位置、运行情况
三.实验步骤
1、编写kello.c代码:
#include <linux/module.h>
int kello_init( void )
{
printk( "\n Hello, students from SDUST! This is in kernel space! \n" );
return 0;
}
void kello_exit( void )
{
printk( "\n Goodbye now... students from SDUST! \n" );
}
//MODULE_AUTHOR("SDUSTOS <fangs99@126.com>");
MODULE_LICENSE("GPL");
module_init(kello_init);
module_exit(kello_exit);
2、编写Makefile代码:
ifneq ($(KERNELRELEASE),)
obj-m := kello.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
rm -r -f .tmp_versions *.mod.c .*.cmd *.o *.symvers
endif
3、LKM编译、添加、显示执行结果以及删除模块:
四.实验总结
通过这次实验使我基本掌握了基本的Linux内核模块开发框架和编译方法,学习了Makefile编译方法,掌握了Linux内核模块添加流程。理解了Linux内核模块代码中的一些常见宏和参数,掌握了Linux内核模块程序和应用程序的差异。
这次实验让我了解了LKM编译有两种方法,第一种是集成到内核,随内核一起编译,第二种是单独编译,动态插入内核。对于我们初学者来说,推荐使用第二种方式。把将开发的内核代码文件直接进行编译,然后使用命令动态插入内核或者从内核卸载。这样的优点是编译速度快;单独调试代码,方便调试修正代码。
这次实验让我有了Linux内核的第一次体验,在使用Windows系统时并没有机会体会到这一点。Linux的内核代码的编写规则和我平常的编写习惯也有些许的不同。我希望能通过操作系统实验,能够加强自己对操作系统的理解,助力自己以后的学习。