linux shm.c 中的修改

Modification in shm.c in linux

我想修改 Linux 中的 shm.c,为此我做了以下操作:

  1. 已在我的设备上下载 Linux 源。
  2. 使用我下载的源代码重新编译 linux 内核。
  3. 经过多次验证,我确认现在运行确实是我的源代码

在我对 shmget()shmat() 函数进行修改后,这些修改确实有效。

我怀疑我正在更改的函数不是实际的 shmget()shmat() 函数,因为它们的名称是 shmget() 并且实现名称是 do_shmget() 等等。

所以我的问题是,当我执行 shmget()shmat() 时,我怎么知道哪个是实际调用的函数,或者实现是否有可能使用名称 do_shmget()左右?

代码参考:https://github.com/torvalds/linux/blob/master/ipc/shm.c

How can I know that which is the functions that is actually called when I do shmget() or shmat()?

用户space使用某些系统调用时调用的内核函数定义为

SYSCALL_DEFINE<N>(<name>, ...)

其中<N>是系统调用参数的编号,<name>是系统调用的名称,<name>之后的参数是系统调用参数的类型和名称。

例如,对于shmget系统调用,对应的函数定义是(ipc/shm.c):

SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg)
{
    return ksys_shmget(key, size, shmflg);
}

如您所见,系统调用函数调用 ksys_shmget()