| 
		    
                    
   2 添加新的系统调用 
  如果用户在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()  
 
		    
                       
		      
		      
		   |