日期:2014-05-16  浏览次数:20650 次

用source insight阅读内核源代码问题请教?
查看内核源代码或u-boot源代码时,由于硬件支持问题,一个变量可能在多个文件中定义。用SI看代码是要找到正确的定义找半天,非常不适合我这样的新手学习,不知道各位有什么高招?求指教!

------解决方案--------------------
结合你的硬件平台来确定变量的定义。

另外,不仅仅看代码,也要参考其它资料,了解整个架构以及代码的组织,这样才能更好地理解。

--无论是内核还是u-boot,还是其它项目代码。

------解决方案--------------------
确实存在一个变量或结构体在多个地方有定义的情况
需要依靠程序员根据具体的cpu体系结构区分,这是驱动程序员的基本要求


此外 ,如果实在搞不定找不到,在.c源码开头位置自己定义这个变量或结构体,编译内核就会报错,错误信息会告诉你真正的定义位置
------解决方案--------------------
我理解,所找到的每个定义都是有用的,无法说那个是正确的定义;因为无法知道,当前文件会与哪些包含定义的文件联系或链接在一起。
明白了这一点,我想应该在某个MAKEFILE的作用范围内(还要去掉条件编译的情况),找原始定义的出处;SI有这样的功能吗?或者我们可以自己编写宏来实现这个功能吗?


------解决方案--------------------
编译下,有中间文件 .o的就是你所要的。
------解决方案--------------------
一般每个架构都是分目录的,直接把整个目录删掉,只保留比如x86的文件夹。 然后再建工程。 一般只需要花半个小时就能找出来。比如我看apache的源代码,就直接弄了个脚本来删除。可以参考下。

4 files="bs2000 win32 beos prefork winnt netware mpmt_os2 os2 tpf aix os390"
5
6 for file in $files
7 do
8 rmfiles=`find . -name $file`
9 echo "rm -rf $rmfiles"
 10 echo "############################"
 11 rm -rf $rmfiles
 12 done

------解决方案--------------------
在工程中把不相关硬件平台的文件夹和文件移除。