2011-03-28 70 views
1

我想知道函數「sys_access」的代碼,但是我只能找到它的聲明:(在include \ Syscalls.h )如何找到函數的實現例如linux內核中的「sys_access」

asmlinkage long sys_access(const char __user *filename, int mode);

我猜它採用彙編代碼的,但是我怎麼能發現?
順便說一下,我使用source insight來讀取linux內核......它無法在文件* .S中找到該符號。是否有更多有效的工具來讀取Linux內核?

+0

的可能重複(http://stackoverflow.com/questions/10149621/where-can-i-find -system呼叫源代碼)。將它們全部組合成一個問題,或者我們會得到350個類似的問題:-) – 2015-05-15 16:34:07

回答

3

我假設你已經下載了內核源代碼(不僅是頭文件)。這個函數在C中實現並放在fs/open.c中:

SYSCALL_DEFINE3(faccessat, int, dfd, const char __user *, filename, int, mode) 
{ 
    ... 
} 

SYSCALL_DEFINE2(access, const char __user *, filename, int, mode) 
{ 
     return sys_faccessat(AT_FDCWD, filename, mode); 
} 

有很多搜索槽文件內容的方法。在簡單的情況下,我更喜歡的grep用法:我在哪裏可以找到系統調用的源代碼]

$> grep -r "access" /usr/src/linux-2.6/* 
+0

我已經有了整個內核源代碼。 grep會得到這麼多的結果....我認爲'SYSCALL_DEFINE2'是一個marco,它可以訪問'sys_access'。這個符號會在鏈接後生成,所以我不能找到像這樣的函數... – 2011-03-28 09:29:58

+0

你有一些不錯的方法來找到這樣的功能? – 2011-03-28 09:30:38

+0

這是grep。您可以使用任何正則表達式來簡化搜索。例如:'grep -r「SYSCALL_DEFINE。(。* acess。*」/ usr/src/linux-2.6/*'。無論如何,無論您使用哪種工具來執行搜索,都需要regexps來找到這樣的事情。 – maverik 2011-03-28 09:38:24

相關問題