6
我試圖在Linux中編寫系統調用。我修改了unistd.h
,syscall_32.tbl
和sys.c
分別如下在進行系統調用時出現'errno 38:function not implemented'
/*
#define __NR3264_fadvise64 223
__SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64)
*/
#define __NR_zslhello 223
__SYSCALL(__NR_zslhello, sys_zslhello)
223 i386 zslhello sys_zslhello
asmlinkage int sys_zslhello(int ret)
{
printk("Hello, my syscall!\n");
return ret;
}
編譯內核後,我用syscall(223, 10000);
,返回值是-1
,而errno
是38
,即功能未實現。你有什麼想法嗎?
您是否將代碼編譯爲模塊?修改代碼後,你運行了'make'目標嗎?我也認爲這應該去StackOverflow,因爲這顯然是一個編程問題。 –
@SamiLaine我在內核代碼中添加了一個系統調用,並編譯了內核。它不是一個單獨的模塊。 – zijuexiansheng
爲什麼你會註釋掉'sys_fadvise64_64'?內核的其他部分可能依賴於這個....你應該把它編號爲$ last_syscall_number + 1.另外你可能會碰到系統是64位的事實,所以你應該改變'syscall_64.tbl'。 – fedepad