星期二, 12月 09, 2008

SystemCall addition

Kernel Space:
  • 在 kernel/sys.c 新增函式,並EXPORT
  • include/asm-xxx/unistd.h 新增中斷號碼。
    NR_syscalls 記得+1.
  • arch/i386/kernel/entry.S ( < 2.6.12 ) or syscall_table.S(>2.6.12)
    +.long sys_xxx

User Space:
  • include/asm/unistd_32.h 新增與Kernel相同的號碼的define.
  • include/bits/syscall.h
    #define SYS_xxx __NR_xxx
main:
  • static inline _syscall2(long, NEW, int, arg1, int, arg2);
    /*linux中一共定義了7種不同的_syscall*,在 unistd.h 裡面
    可以看到,若定義 system call 有要傳參數的話必需使用別
    的 _syscall
    */
  • _syscall1(int,addtotal,int, num) 
  • test
    • #include 
      _syscall2(long, hello, int, arg1, int, arg2);
      int main(){
      printf(" %d \n", hello(1, 2) );
      return 0;
      }
  • 新版kernel已改為 syscall ,不再使用舊的那七種方式
    • #include
      #include
      #include

      //static inline _syscall2(long, NEW, int, arg1, int, arg2);

      int main(){
      time_t tt;
      // time(&tt );
      syscall( 13, &tt );
      printf("tt=%d\n", tt );

      }

REF:
  • http://www.csie.ncu.edu.tw/~hsufh/COURSES/FALL2007/syscall.html

沒有留言: