Abstract: The use of Linux system is more and more
extensive, more and more developers are throwing themselves into
working out to the systematic tool and the application software for
the Linux system. The biggest advantage of Linux is that it has an
open standard, so that everyone can get the source code freely.
Analyzing the source code is helpful to comprehend how the operating
system running, and is also helpful to read and write programs. This
text introduces some of the structures, functions, and flow of the
datagram.c in Linux.
1、引
言
Linux作为一个完全免费的网络操作系统,据不完全统计,在全世界已经有近800万用户,其中中国用户大约有近10万人,Linux目前的优越之处在于网络服务器领域,Linux+Apache已经成为网络上最普遍的服务器架构模式。
随着无数编程者对Linux代码的不断扩充和完善,Linux的源代码已经是非常庞大了,对其源代码的解读工作也变得越来越被重视。正如Linux的创始人在一篇新闻投稿上所说的,要理解一个软件的真正运行机制,一定要阅读其源代码(RTFSC-READ
THE FUCKING SOURCE
CODE)。
Linux的发展在国内还刚刚开始,各种看法层出不穷,可谓百花齐放,但是到目前为止,还没有一个确定的发展模式;Linux的出现,使我们开发自已的操作系统有了一个很高的起点,因为它的开放性,使我们与国外的发展几乎是同步进行的;Linux的出现正符合我们的所有要求,因为源代码公开,我们可以立刻加入开发,不仅开发速度大大快于任何商业操作系统,并且可以保证操作系统中不存在任何黑洞和隐蔽的问题,永远不会受制于人。因为Linux是国际化的,我们也不必考虑兼容性问题,永远不会同国际脱轨。
拥有一个自已的操作系统,对于我国各项事业来说都具有极高的战略意义。当前,开放源码的Linux为发展我国自主操作系统提供了一个难得的机遇。Linux是一个性能优越、技术上处于前沿的操作系统,它的源代码公开、可以被广大专业人员甚至业余爱好者所阅读、分析、学习和掌握。所以我国基于Linux开发自已的操作系统,或者说开发自已的Linux操作系统势在必行,也只有在此基础上才能构建中国自主的、比较完善的软件产业体系。为此,需要培养和造就一大批深入理解操作系统原理并有丰富实践经验的学者和工程师。
可是由于操作系统技术本身的复杂性,要深入钻研Linux的代码,把它读懂并融会贯通,实非易事。在此前提下,市场上出现了一大批关于Linux源代码分析的书,其中毛德操和胡希明老师所著的《Linux内核源代码情景分析(上、下册)》便是其中最优秀的作品之一,它覆盖了Linux内核以及有关操作系统理论(除网络外)的几乎所有方面;在所涉及的各个方面,都深入分析到具体的代码、包括汇编代码并加以讲解;在讲解中采取了独特的、以情景为基础的方法,使读者对整个过程有比较完整、比较全面的了解,从而可以把各方面的知识有机地融会贯通、加深理解。
近来与linux系统相关的课题数量也在不断增加。
在linux源代码分析方面,惠州学院信息科学与技术重点教学实验室有做过关于Linux环境下USB子系统实现框架源代码分析和Linux的消息函数的分析。
西安邮电学院有做过关于Linux文件系统的代码分析、关于Linux内核进程调度与控制的代码分析、关于Linux防火墙的实现分析的毕业设计课题。
除了做这些代码分析的课题以外,在互联网上涌现了一大批由国内编程爱好者,其中不乏一些优秀的编程人员,他们在网络论坛上发表科技文章,研究系统代码,比较著名的论坛有中国LINUX论坛
http://www.linuxforum.net/和LINUX伊甸园
http://www.linuxeden.com/等。
阅读源代码对提高自己的编程水平是非常有帮助的。这个帮助至少体现在三个方面。
第一个方面是学会大型软件项目设计的模式。这样的模式是真实可靠的第一手资料,这样学来的模式要比从书本上,用日常语言陈述的模式,更能深入到你的脑海中去。而且它的真实性和可靠性都是有保证的。并且这样的模式还非常的具体。
阅读源代码的第二个好处,是增加自己的自信心。就象学习英语,要和别人谈话,要看看别人的文章,不能只是看教科书上的简单的例子。类似的,只有当我们看过大型软件项目的源代码,作过修改,摸爬滚打之后,我们才能对于自己的编程能力更有信心。
阅读源代码的第三个好处,是对于过去学过的知识有复习和巩固的作用。在阅读过程中可以复习到C++,数据结构,网络与通信等方面学过的知识,并且能接触到一些新的知识。
我这次的毕业设计是Linux网络子系统datagram模块的分析,主要分析研究的linux系统版本为2.6.10,内容包括:datagram.c及其所调用到的头文件主要有module.h、types.h、kernel.h、mm.h、interrupt.h、errno.h、sched.h、inet.h、tcp.h、tcpnetdevice.h、
rtnetlink.h、poll.h、highmem.h、skbuff.h、socket.h、uaccess.h、system.h、protocol.h、
sock.h、checksum.h,还有这些头文件中包含调用的另外头文件,在此不一一罗列。由此可见分析该代码是一项工作量非常庞大,而且非常烦琐的工程。
为了能顺利进行代码分析,我使用了代码分析软件Source
Insight
v3.5,从而实现了对代码中一些函数、变量的定义跟踪、调用跟踪等,对我的代码分析工作起到了非常重要的意义。这是一个Windows环境下的读代码的工具,安装与一般的软件没有什么区别,它的使用简单介绍如下:
先选择Project菜单下的new,新建一个工程,输入工程名,接着按要求把欲读的源代码加入(可以整个目录加)后,该软件就会分析所加的源代码。分析完后,就可以进行阅读了。
对于打开的阅读文件,如果想看某一变量的定义,先把光标定位于该变量,然后点击工具条上的相应选项,该变量的定义就显示出来。对于函数的定义与实现也可以同样操作。
Reference功能是Source
Insight的特色之一,它可以在速度极快的在整个工程中找到所有的标记,并且在该行程序的前边加上红色箭头的小按钮作为链接标志。一个Reference搜索后的结果,它可以有两种模式,一种集中显示结果模式,在这种模式下,可以通过前边的红色箭头小按钮进入;另外一种模式,该标记的具体的所在处,也可以通过标记的具体所在处点击红色箭头小按钮进入警种模式,还可以通过工具条上的两个红色小箭头直接在第二种模式下前后移动,察看相应信息。它的这个强大的功能使得阅读Linux源程序有如神助。但是要注意的是,当进行了第二次“Reference”时,它会提示将结果集附加在第一个结果集的后边还是取代第一个结果集。如果选择前者,不能对结果集根据前后两次搜索结果进行分类,然后在其子类里进行移动,只能在整个结果集里移动;如果,选择后者,结果集将会被替换为第二次搜索的结果,略微有些不方便。
就我个人的使用感觉,总体来讲,使用是很方便的,但是有一些定义会找不到,不知道是我自己的原因(比如设置不对,或者源代码没有找全),还是软件本身能力有限。