ubuntu添加系统调用

本文介绍了在Ubuntu 13.04系统中添加自定义系统调用的过程,包括修改makefile,添加系统调用函数,处理函数声明,以及编译和安装内核的步骤。在探索过程中,作者遇到unistd_32.h和syscall_table_32.s文件未找到的问题,最终通过研究找到了解决办法。通过这个过程,作者强调了文档阅读能力、C语言基础和汇编知识的重要性,并表达了对Linux内核深入学习的兴趣。
      这应该是整个操作系统课设中最复杂的部分,主要是对编译系统的了解不深引起。不过回头看来,收获颇多。现总结如下
      开始从网上找资料,有一个上一届学长的总结,算是比较详细的说明了~不过后来感觉,整个系统调用的添加过程倒是和c语言添加函数大同小异,只是,函数的声明部分不算那么好找,因而中间有了很多曲折。开始,学长用的是低版本的ubuntu系统,11.10,而我因为hudbt上没找到好的资源,不愿意再花费力气去找低级的版本,于是直接用我这ubuntu13.04,内核3.8.0-general,因而中间经历了很多意想不到的情况。首先,还是要修改makefile的内容。具体如下
      在下载并解压缩的linux-source-3.8.0下面找到整体的makefile文件,然后在extraversion下加入一个名称。这里原来应该是*,有点像空的意思,不过这我敢觉并不是特别重要,只是开机时系统版本的一个区别而已
      然后就是在整体kernel的目录下找到sys.c文件并在里面添加函数。具体需要注意的细节就是在基本的c语言语法之外,只能调用核心态的函数,比如说printk与sys_open,此外,因为内核态与用户态之间权限的区别,加上系统调用需要从用户空间向内核空间调用参数,因而为了防止参数对于内核的破坏,需要加上set_fs与get_ds函数
      第三步也是最复杂的一步,相当于c语言中的声明部分。本来想按照教程一步一步走,可惜我unistd_32.h与syscall_table_32.s全都没有找到。本来我的想法是,既然是函数调用号,那源代码中就肯定有相关的控制调用部分的代码,而这些代码一定是放在了某一个类似与unistd或者syscall的文件中。特别是当我看了看unistd.h的文档,居然发现有#include unistd_32.h与#include unis
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值