Presentation is loading. Please wait.

Presentation is loading. Please wait.

作業系統實習課(三) -建造新的System Call-

Similar presentations


Presentation on theme: "作業系統實習課(三) -建造新的System Call-"— Presentation transcript:

1 作業系統實習課(三) -建造新的System Call-
助教:鄧執中 實驗室:720A 課程網頁:

2 前置步驟: 取得root超級權限以便之後的操作: 改變文件權限: #chmod xxx 檔案、文件名 user group other
w(可寫入)=2 →1+2+4=7 r(可讀取)=4 syscall_64.h全部使用者可寫、讀、執行→ #chmod 777 syscall_64.h

3 有些kernel沒辦法修改system call,此時需要自行下載新 的來編譯。
將下載來的kernel放入/usr/src目錄之下。

4 1.修改syscall table 路徑: /usr/src/linux kernel-XXXX/arch/x86/include/generated/asm/syscalls_64.h syscall table 裡面存了所有 syscall 的記憶體位址

5 在這裡加上syscall 名稱與編號 在最後一個syscall後面加入: __SYSCALL_COMMON(41, sys_hello, sys_hello)

6 2.增加syscall的定義 路徑: /usr/src/linux kernel-XXXX/arch/x86/include/generated/asm/unistd_64_x32.h

7 #define NR_syscalls XXX 為定意systemcall的下界,因此我們把此行XXX+1,並 在前新增:
#define __NR_x32_hello XXX 若是後面沒有定意其他函式則直接在最後一行define後加#define __NR_x32_hello XXX+1 就行。

8 3.定義函式原型 路徑: /usr/src/linux kernel-XXXX/include/linux/syscalls.h

9 新增: asmlinkage int sys_mycall(void);
asmlinkage:由於system call 是在kernel中實現的,必須符合kernel編程的 規則,函數定義時都需加上此標識符。

10 4.新增system call的主程式碼 路徑:/usr/src/linux kercel-XXXX/kernel
 新增的程式碼檔名得要跟system call的名稱一樣,否則則系統無法找到 正確的 system call 對應。(EX:foo.c)

11 5. 設定Makefile 6. 編譯kernel並替換(超出範圍)
路徑:/usr/src/linux kernel-XXXX/kernel/Makefile 變數 obj-y 表示需要編繹到內核中的目標檔案名集合 在obj-y後加上要編譯的檔案 6. 編譯kernel並替換(超出範圍)


Download ppt "作業系統實習課(三) -建造新的System Call-"

Similar presentations


Ads by Google