QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3017|回复: 7

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

[复制链接]
发表于 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 编辑 ]
发表于 2007-12-13 19:21:30 | 显示全部楼层
unix 环境高级编程(译得不好)
unix系统编程(没看过)
man 函数名(好用,如果有台Linux,可以试试)
回复

使用道具 举报

发表于 2007-12-13 23:30:54 | 显示全部楼层
不明白你的含义!只要存在函数实现,难道还有找不到的道理??
vi cn+],tags难道不行?还没有遇到过!
回复

使用道具 举报

发表于 2007-12-17 13:13:21 | 显示全部楼层

回复 #1 cswat 的帖子

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

使用道具 举报

发表于 2008-4-12 23:28:55 | 显示全部楼层
找open function:

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

使用道具 举报

发表于 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 处理器里面对系统调用的处理。顺着藤能摸到根。
回复

使用道具 举报

发表于 2008-9-6 20:28:08 | 显示全部楼层

^_^

source insight,源代码阅读工具!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-28 21:43 , Processed in 0.163983 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表