《我的一些读源码的经验》由会员分享,可在线阅读,更多相关《我的一些读源码的经验(9页珍藏版)》请在金锄头文库上搜索。
1、我的一些读源码的经验1 1谁看了潘爱民老师的PPT?2如何开始工具WindowsWindows下下Source InsightSource InsightLinuxLinux下下Source NavigatorSource Navigator参考书LinuxLinux情景分析、情景分析、Understanding Linux Understanding Linux KernelKernel文档Make in SMTH,googleMake in SMTH,google3如何开始(1)Build a source insight project4如何开始(2)尽可能在源码目录中找到一些文档的Ma
2、kefileMakefile:能知道程序的关联关系:能知道程序的关联关系Document/Document/:能找到一些源码的说明,比如目录:能找到一些源码的说明,比如目录树树例子:LinuxLinux源码目录下源码目录下/Documentation/Documentation00-INDEX:00-INDEX:说明了目录树结构说明了目录树结构Makefile:Makefile:CORE_FILESCORE_FILES=kernel/kernel.o mm/mm.o fs/fs.o =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.oipc/ipc.o5怎么读K
3、eep in mindKeep in mind 大的方面,关注代码的结构大的方面,关注代码的结构 小的方面,关注小的方面,关注核心的功能模块核心的功能模块是怎么实现的是怎么实现的方法方法 猜猜函数的名字,注释函数的名字,注释 跳跳读不懂的可以先跳过读不懂的可以先跳过可以忽略的就忽略过去可以忽略的就忽略过去 记记边读边记:边读边记:Microsoft OneNoteMicrosoft OneNote遇到问题怎么办?遇到问题怎么办?6例子void _init trap_init(void)void _init trap_init(void) #ifdef CONFIG_EISA#ifdef CON
4、FIG_EISAif (isa_readl(0x0FFFD9) = E+(I8)+(S16)+(A24)if (isa_readl(0x0FFFD9) = E+(I8)+(S16)+(A24)EISA_bus = 1;EISA_bus = 1;#endif#endif set_trap_gate(0,÷_error);set_trap_gate(0,÷_error); set_intr_gate(2,&nmi);set_intr_gate(2,&nmi);set_system_gate(3,&int3);set_system_gate(3,&int3); /* int3
5、-5 can be called from all */* int3-5 can be called from all */ set_system_gate(SYSCALL_VECTOR,&system_call);set_system_gate(SYSCALL_VECTOR,&system_call); /*/* * default LDT is a single-entry callgate to lcall7 for iBCS * default LDT is a single-entry callgate to lcall7 for iBCS * and a callgate to l
6、call27 for Solaris/x86 binaries * and a callgate to lcall27 for Solaris/x86 binaries */ */set_call_gate(&default_ldt0,lcall7);set_call_gate(&default_ldt0,lcall7);set_call_gate(&default_ldt4,lcall27);set_call_gate(&default_ldt4,lcall27);#ifdef CONFIG_X86_VISWS_APIC#ifdef CONFIG_X86_VISWS_APICsuperio_
7、init();superio_init();lithium_init();lithium_init();cobalt_init();cobalt_init();#endif#endif 略:不是我重点关心的内容。像这种条件编译在代码中有很多,要懂得取舍猜:set_xxx_gate()应该是设置一些门大的结构:该函数就是初始化陷阱,应该是在初始化过程中被调用。明白了这个函数的功能,我就可以考虑细不细读了不关心,可以略过笔记:该函数的功能是。,主要是通过调用set_xxx_gate()设置一些硬件门一定要记,以避免以后一时想不起来的时候查阅7遇到问题怎么办?充分利用sourceInsight的功能先放一放,寻找灵感知之为知之不知google知找牛人请教8Others法无定法,实践出真知No pains,No gains9