天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

系统应用之Linux操作系统的内核解读入门

2012-9-13不详佚名

67444">

  当然,这只是涉及到的几个主要文件。而事实上,增加系统调用真正要修改文件只有include/asm-386/unistd.h 和arch/i386/kernel/entry.S两个;

  【三】 对内核源码的修改:

  1、在kernel/sys.c中增加系统服务例程如下:

  asmlinkage int sys_addtotal(int numdata)

  {

  int i=0,enddata=0;

  while(i

  enddata+=i++;

  return enddata;

  }

  该函数有一个 int 型入口参数 numdata , 并返回从 0 到 numdata 的累加值;  当然也可以把系统服务例程放在一个自己定义的文件或其他文件中,只是要在相应文件中作必要的说明;

  2、把 asmlinkage int sys_addtotal( int) 的入口地址加到sys_call_table表中:

  arch/i386/kernel/entry.S 中的最后几行源代码修改前为:

  ...   ...

  .long SYMBOL_NAME(sys_sendfile)

  .long SYMBOL_NAME(sys_ni_syscall) /* streams1 */

  .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */

  .long SYMBOL_NAME(sys_vfork)            /* 190 */

  .rept NR_syscalls-190

  .long SYMBOL_NAME(sys_ni_syscall)

  .endr

  修改后为:  ...   ...

  .long SYMBOL_NAME(sys_sendfile)

  .long SYMBOL_NAME(sys_ni_syscall) /* streams1 */

  .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */

  .long SYMBOL_NAME(sys_vfork)            /* 190 */

  /* add by I */

  .long SYMBOL_NAME(sys_addtotal)

  .rept NR_syscalls-191

  .long SYMBOL_NAME(sys_ni_syscall)

  .endr

  3、把增加的 sys_call_table 表项所对应的向量,在include/asm-386/unistd.h 中进行必要申明,以供用户进程和其他系统进程查询或调用:

  增加后的部分 /usr/src/linux/include/asm-386/unistd.h 文件如下:

  ...   ...

  #define __NR_sendfile 187

  #define __NR_getpmsg  188

  #define __NR_putpmsg   189

  #define __NR_vfork 190

  /* add by I */

  #define __NR_addtotal 191


本文来源:不详 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系email:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行