如何在Linux / Android 2.6.29中找到系统调用实现?

时间:2013-01-01 13:25:35

标签: android linux linux-kernel

我想修改一些系统调用以进行跟踪。具体来说,无论何时进行系统调用open,我都想打印一些消息。

我一直在查看互联网和代码,我在open.c目录中找到了kernel/goldfish/fs/。此文件中有许多功能。我怎么知道确切地调用了哪个函数。我可以在所有这些函数中编写一些printk调用来查找它,但我也必须为其他系统调用执行此操作。

所以,我有几个问题,

1)找到系统调用的实现细节的最佳方法是什么?

2)我使用的是内核2.6.29(金鱼-Android)。不同内核版本的系统调用实现是否不同?

3)strace告诉我正在进行msggetmsgrecv和'SYS_24'系统调用。我查看Android/bionic/libc/SYSCALLS.txt文件,msgget不存在。

但是当我查看android/bionic/libc/kernel/arch-arm/asm/unistd.h文件时,我可以在那里找到msgget。我无法理解发生了什么,然后如何找到msgget的实现?

感谢。

1 个答案:

答案 0 :(得分:4)

This link提到了几乎所有系统调用,它们的参数和各个文件中的位置。它帮助我找到系统调用细节。

克里斯在上面的评论中给出了答案,并再次感谢他。