日期:2014-05-16  浏览次数:20625 次

【求助】如何增加一个系统调用
我想在内核里增加一个系统调用,功能是返回虚拟地址对应的物理页号。

应用层调用接口:int FindPageNoForVirtAddr( unsigned long addr );

请问该如何实现?

------解决方案--------------------
添加新的系统调用一般需要以下几个步骤:

1.添加系统调用号 在inlcude/asm-i386/unistd.h以及 include/asm/unistd.h中
如#define _NR_addsyscall 500

2.在系统调用表中添加相应项
系统调用表位于汇编文件 arch/i386/kernel/entry.S中
ENRTY(sys_call_table)
....
.long SYMBOL_NAME(sys_addsyscall)

3.实现具体的系统调用服务例程

4.重新编译内核


------解决方案--------------------
参考:http://blog.csdn.net/wenxy1/archive/2008/11/27/3379573.aspx
------解决方案--------------------
好像内核本身就有一个 virt_to_pfn 这样的宏不知道是不是你想要的
------解决方案--------------------
http://www.chinalinuxpub.com/read.php?wid=23

照着教程做吧。
------解决方案--------------------
探讨
引用:
好像内核本身就有一个  virt_to_pfn  这样的宏不知道是不是你想要的

virt_to_pfn是用于内核空间地址的吧,我要处理的是应用层传入的用户空间地址。