您的位置:首页 > 运维架构 > Linux

linux内核编程4部曲之四:模块编程

2016-02-16 10:05 232 查看
一、实验要求

添加系统调用加减乘除,并通过模块加载,实现加减乘除。

二、增加系统调用

按照实验一的步骤增加系统调用:

增加系统调用主要分为3步:

1)、增加系统调用函数

修改/usr/src/linux-2.6.12/kernel/sys.c文件,在文件末尾增加4个系统响应函数(+、-、*、/)。这里,我们在add系统调用中,使用了函数指针实现,即在系统调用中不指定具体实现,而在模块中指定具体实现,不过需要用EXPORT_SYMBOL宏将函数指针导出。代码如下:


2)、在系统调用表中注册。
在/usr/src/linux-2.6.12/arch/i386/kernel/syscall_table_32.S中添加我们的系统调用。
3)、添加系统调用入口参数
在/usr/src/linux-2.6.12/include/asm-i386/unistd.h中添加系统调用入口参数(注意:其中会顺序定义入口参数的序号,添加的序号是在原有最大值的基础上+1)。
三、编译内核,修改grub引导程序,重新启动,进入修改过的内核。

四、编译模块

1)模块源代码

模块源代码主要实现了我们系统调用中函数指针AddFunc的具体实现函数,如下图:



2)编写Makefile文件



3)编译模块
运行make all,执行编译,生成模块文件。


五、测试
1)测试代码

测试代码主要检验add系统调用是否能完成加法功能,代码如下:



2)安装模块

通过insmod来加载模块,如下图:






3)运行测试程序,测试结果

如果add调用正常,说明实验取得成功。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: