cswat 发表于 2007-12-12 18:12:07

怎样才能找到系统函数的函数体呢

作毕业设计与到一个难题。 分析代码时遇到好多linux系统定义的函数。有办法快速找到么?

来先看一段代码
#include <linux/time.h>
void do_gettimeofday(struct timeval *tv)
{
unsigned long flags;
unsigned long usec, sec;

read_lock_irqsave(&xtime_lock, flags);
sec = xtime.tv_sec;
usec = xtime.tv_usec + do_gettimeoffset();
read_unlock_irqrestore(&xtime_lock, flags);

while (usec >= 1000000) {
usec -= 1000000;
sec++;
}
tv->tv_sec = sec;
tv->tv_usec = usec;
}

void MyDelay(unsigned long delay)
{
struct timeval tv;
do_gettimeofday(&tv)
unsigned long start = tv.tv_usec;//unsigned long start = tv.tv_sec;
while(tv.tv_usec - start <delay)
    do_gettimeofday(&tv)
}




原想开源代码公开的好找哈。那么多代码。 真是没下手的地方了 。
我c/c++还可以,
我现在用的就是linux。
可不能快速地找到系统函数的函数体。
有人碰到过相似的问题么 ?
你们是怎么解决的呢 ?
做系统开发时应该经常遇到这种问题,期望能得到你的帮助

告诉我用什么方法。或者使用什么工具也行吧。总会有方法的
有个能查出函数作用的手册也行

谢谢你的帮助

[ 本帖最后由 cswat 于 2007-12-12 19:35 编辑 ]

binbindatou 发表于 2007-12-13 19:21:30

unix 环境高级编程(译得不好)
unix系统编程(没看过)
man 函数名(好用,如果有台Linux,可以试试)

xhbdahai 发表于 2007-12-13 23:30:54

不明白你的含义!只要存在函数实现,难道还有找不到的道理??
vi cn+],tags难道不行?还没有遇到过!

henglong 发表于 2007-12-17 13:13:21

回复 #1 cswat 的帖子

内核源代码很庞大,想要具体函数的 代码不是太好找的 。
我的 办法是本头文件 中没有就在该文件所包含的头文件中找,这样一直找下去。
不过最好的办法是花上一定的时间看一本好书(推荐[美]Robert Love 的《Lnux内核设计与实现(Linux Kernel Development--Second Edition)》来对内核的代码有个概括了解。这样你找代码会很轻松

linkstack 发表于 2008-4-12 23:28:55

找open function:

cd linuxx.x.xx.x(source)
grep -i -R -l open

eric_myc 发表于 2008-5-14 15:45:35

cscope -Rb

在你的 ~/.vimrc 最后加入
        if has("cscope")
                set csprg=/usr/local/bin/cscope
                set csto=0
                set cst
                set nocsverb
                " add any database in current directory
                if filereadable("cscope.out")
                  cs add cscope.out
                " else add database pointed to by environment
                elseif $CSCOPE_DB != ""
                  cs add $CSCOPE_DB
                endif
                set csverb
        endif

修改 /usr/local/bin/cscope 为实际 cscope 所在的路径

浏览代码时用 <CTRL> + ] 即可

另:kernel 代码在变,没有什么稳定的文档描述 kernel API 的,多读吧,
看看 Documentation/* 也很有帮助

深思 发表于 2008-8-6 16:37:09

linux-source-2.6.20\arch\arm\kernel\calls.S,这是 ARM 处理器里面对系统调用的处理。顺着藤能摸到根。

snakeloveist 发表于 2008-9-6 20:28:08

^_^

source insight,源代码阅读工具!
页: [1]
查看完整版本: 怎样才能找到系统函数的函数体呢