【转载】如何在Linux系统中添加新的系统调用
来源:互联网 发布:手机点单软件 编辑:程序博客网 时间:2024/05/22 09:01
如果用户在Linux中添加新的系统调用,应该遵循几个步骤才能添加成功,下面几个步骤详细说明了添加系统调用的相关内容。
(1) 添加源代码
第一个任务是编写加到内核中的源程序,即将要加到一个内核文件中去的一个函数,该函数的名称应该是新的系统调用名称前面加上sys_标志。假设新加的系统调用为mycall(int number),在/usr/src/linux/kernel/sys.c文件中添加源代码,如下所示:
asmlinkage int sys_mycall(int number) { return number; }
作为一个最简单的例子,我们新加的系统调用仅仅返回一个整型值。
(2) 连接新的系统调用
添加新的系统调用后,下一个任务是使Linux内核的其余部分知道该程序的存在。为了从已有的内核程序中增加到新的函数的连接,需要编辑两个文件。
在我们所用的Linux内核版本(RedHat 6.0,内核为2.2.5-15)中,第一个要修改的文件是:
/usr/src/linux/include/asm-i386/unistd.h
该文件中包含了系统调用清单,用来给每个系统调用分配一个唯一的号码。文件中每一行的格式如下:
#define __NR_name NNN
其中,name用系统调用名称代替,而NNN则是该系统调用对应的号码。应该将新的系统调用名称加到清单的最后,并给它分配号码序列中下一个可用的系统调用号。我们的系统调用如下:
#define __NR_mycall 191
系统调用号为191,之所以系统调用号是191,是因为Linux-2.2内核自身的系统调用号码已经用到190。
第二个要修改的文件是:
/usr/src/linux/arch/i386/kernel/entry.S
该文件中有类似如下的清单:
.long SYMBOL_NAME()
该清单用来对sys_call_table[]数组进行初始化。该数组包含指向内核中每个系统调用的指针。这样就在数组中增加了新的内核函数的指针。我们在清单最后添加一行:
.long SYMBOL_NAME(sys_mycall)
(3) 重建新的Linux内核
为使新的系统调用生效,需要重建Linux的内核。这需要以超级用户身份登录。
#pwd /usr/src/linux #
超级用户在当前工作目录(/usr/src/linux)下,才可以重建内核。
#make config #make dep #make clearn #make bzImage
编译完毕后,系统生成一可用于安装的、压缩的内核映象文件:
/usr/src/linux/arch/i386/boot/bzImage
- 【转载】如何在Linux系统中添加新的系统调用
- 如何在Linux系统中添加新的系统调用
- 如何在Linux中添加新的系统调用
- 如何在Linux中添加新的系统调用
- 如何在Linux中添加新的系统调用
- 如何在Linux中添加新的系统调用
- 怎么在Linux中添加新的系统调用
- 怎么在Linux中添加新的系统调用
- 向linux内核中添加新的系统调用
- 如何添加新的系统调用
- 如何在arm linux kernel(内核)中添加系统调用
- 如何在linux内核中添加系统调用
- Linux添加一个新的系统调用
- 添加新的linux系统调用
- 添加新的Linux内核系统调用
- 如何在 Linux 系统中添加桌面图标
- 如何添加linux系统调用
- Linux添加新的系统调用(for arm )
- 配置minigui开发环境
- RFC 1808 ——URL定义
- IP协议: IP包的解析与处理过程
- BUG修复
- 谷歌被重置
- 【转载】如何在Linux系统中添加新的系统调用
- linux中触摸屏驱动的实现(2)——基于s3c6410处理器
- 学习的过程
- 软考-信息系统项目管理师-考试记录
- 大学生如何让自己强大起来
- Windows运行机理——线程的机制(3)
- 《三个白痴》经典语录_值得深思。
- 使能S3C6410的VFP,浮点协处理器
- 【Android 开发教程】PreferenceFragment