我正在向linux Kernel 3.19添加系統調用。試着在Ubuntu 14.04 LTS中爲x86 arch添加一個系統調用'add'。 SRC = 3.19源通過名稱調用系統調用的麻煩
添加的條目爲src /拱/ 86 /系統調用/ syscall_64.tbl。
323 common add sys_add
向src/include/syscalls.h添加了系統調用原型。
asmlinakge sys_add(int i,int j);
寫add.c在FS目錄,在FS /生成文件加入add.o。
在文件的src /包括/ uapi/ASM-通用/ unistd.h中
添加的行
#define __NR_add 323
__SYSCALL(__NR_add, sys_add);
編譯和構建內核。這是成功。輸出uname -r給出3.19。
創建了一個程序來測試新的系統調用。
6.1使用函數系統調用(323,10,15)。這是成功的價值總和(25)印。
6.2當試圖通過名字來稱呼的系統調用,它給
/tmp/ccpxRp8C.o: In function `main': testadd1.c:(.text+0x18): undefined reference to `add' collect2: error: ld returned 1 exit status
我在想什麼?
嗨,感謝您的回覆。上面的代碼是在內核本身完成的?另外,**步驟4 **的用法是什麼? – 2015-03-03 10:33:53
@AsishKSahadevan - 不,它駐留在一個單獨的文件中,並自行編譯。那時你已經有了一個目標文件(.o文件),它可以與缺少符號的C程序相鏈接。目標文件提供了符號和執行'syscall'的代碼,它將程序引入內核。第4步是你可以使用'syscall()'通用系統調用執行函數。如果您正在編寫自己的裝配存根,則不需要執行第4步。 – 2015-03-03 13:46:06