linux源代码函数源地址,Linux内核源码阅读以及工具(转)

Linux内核源码阅读以及工具

随着linux的逐步普及,如今有很多人对于Linux的安装及设置已经比较熟悉了。与Linux 的蓬勃发展相适应,想深刻了解Linux的也愈来愈多。而要想深刻了解Linux,就须要阅读和分析linux内核的源代码。

Linux的内核源代码能够从不少途径获得。通常来说,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码。另外还能够从互连网上下载,解压缩后文件通常也都位于linux目录下。内核源代码有不少版本,目前最新的稳定版是2.2.14。

许多人对于阅读Linux内核有一种恐惧感,其实大可没必要。固然,象Linux内核这样大而复杂的系统代码,阅读起来确实有不少困难,可是也不象想象的那么遥不可及。只要有恒心,困难都是能够克服的。也不用担忧水平不够的问题,事实上,有不少事情咱们不都是从不会到会,边干边学的吗?

任何事情作起来都须要有方法和工具。正确的方法能够指导工做,良好的工具能够事半功倍。对于Linux 内核源代码的阅读也一样如此。下面我就把本身阅读内核源代码的一点经验介绍一下,最后介绍Window平台下的一种阅读工具。

对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有必定的了解。对于linux内核源代码来说,我认为,基本要求是:一、操做系统的基本知识;二、对C语言比较熟悉,最好要有汇编语言的知识和GNU C对标准C的扩展的知识的了解。另外在阅读以前,还应该知道Linux内核源代码的总体分布状况。咱们知道现代的操做系统通常由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内  核源代码就可看出,各个目录大体对应了这些方面。Linux内核源代码的组成以下(假设相对于linux目录):

arch 这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。

include 这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。

init 此目录包含核心启动代码。

mm 此目录包含了全部的内存管理代码。与具体硬件体系结构相关的内存管理代码位于archkernel目录下。

net 核心的网络部分代码。里面的每一个子目录对应于网络的一个方面。

lib 此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/*/lib/目录下。

scripts此目录包含用于配置核心的脚本文件。

Documentation 此目录是一些文档,起参考做用。

清楚了源代码的结构组成后就能够着手阅读。对于阅读方法或者说顺序,有所谓的纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是分模块进行。其实他们之间不是绝对的,而是常常结合在一块儿进行。对于Linux源代码来说,启动的代码就能够顺着linux的启动顺序一步一步来,它的大体流程以下(以X86平台为例):

./larch/i386/boot/bootSect.S–>./larch/i386/boot/setup.S–>./larch/i386/kernel/head.S–>./init/main.c中的start_kernel()。而对于象内存管理等部分,则能够单独拿出来进行阅读分析。个人体会是:开始最好按顺序阅读启动代码,而后进行专题阅读,如进程部分,内存管理部分等。在每一个功能函数内部应该一步步来。实际上这是一个反复的过程,不可能读一遍就理解。

俗话说:”工欲善其事,必先利其器”。 阅读象Linux核心代码这样的复杂程序使人望而生畏。它象一个越滚越大的雪球,阅读核心某个部分常常要用到好几个其余的相关文件,不久你将会忘记你原来在干什么。因此没有一个好的工具是不行的。因为大部分爱好者对于Window平台比较熟悉,而且仍是经常使用Window系列平台,因此在此我介绍一个Window下的一个工具软件:Source Insight。这是一个有30天免费期的软件,能够从www.sourcedyn.com下载。安装很是简单,和别的安装同样,双击安装文件名,而后按提示进行就能够了。安装完成后,就可启动该程序。这个软件使用起来很是简单,是一个阅读源代码的好工具。它的使用简单介绍以下:先选择Project菜单下的new,新建一个工程,输入工程名,接着要求你把欲读的源代码加入(能够整个目录加)后,该软件就分析你所加的源代码。分析完后,就能够进行阅读了。对于打开的阅读文件,若是想看某一变量的定义,先把光标定位于该变量,而后点击工具条上的相应选项,该变量的定义就显示出来。对于函数的定义与实现也能够一样操做。别的功能在这里就不说了,有兴趣的朋友能够装一个Source Insight,那样你阅读源代码的效率会有很大提升的。怎么样,试试吧!

下面主要讲解如何使用Source Insight,考虑到阅读源程序的爱好者都有至关的软件使用水平,本文对于一些琐碎、人所共知的细节略过不提,仅介绍一些主要内容,以便你们可以很快熟练使用本软件,减小摸索的过程。

安装Source Insight并启动程序,能够进入图1界面。在工具条上有几个值得注意的地方,如图所示,图中内凹左边的是工程按钮,用于显示工程窗口的状况;右边的那个按钮按下去将会显示一个窗口,里边提供光标所在的函数体内对其余函数的调用图,经过点击该窗体里那些函数就能够进入该函数所在的地方。

2b1d619e25865906e76acfb5e899bb85.png

图1 Source Insight界面图

因为Source Insight实质上是一个支持多种开发语言(java,c ,c++等等)的编辑器,只不过因为其查找、定位、彩色显示等功能的强大,而被咱们当成源代码阅读工具使用。因此,为了有效的阅读源程序,首先必须选择功能菜单上的 “Project”选项的子菜单“New Project”新建一个项目,项目名称能够自由选定,固然也能够选择删除(Remove)一个项目。当删除一个项目的时候,并不删除原有的源代码文件,只是将该软件生成的那些工程辅助文件删除。设定以后,将会弹出一个对话框如图2,接受默认选择,若是,硬盘空间足够,能够将第一个复选框选上,该选项将会须要与源代码大体同等的空间来创建一个本地数据库以加快查找的速度。

a3e62ce735cfcd07072ca0ce0771bd2f.png 

图2 工程设置

点击“OK”按钮,接受选择后,将会有一个新的对话框弹出,在这个对话框里,能够选择将要阅读的文件加入工程,一种方式是经过在File Name中输入要阅读源代码文件的名称,点击“Add”按钮将其加入,也能够经过其中“Add All”和“Add Tree”两个按钮能够将选中目录的全部文件加入到工程中,其中“Add All”选项会提示加入顶层文件和递归加入全部文件两种方式,而“Add Tree”至关于“Add All”选项的递归加入全部文件,能够根据须要使用,就我来讲,更喜欢“Add Tree”一些。因为该程序采用了部分打开文件的方式,没有用到的文件不会打开,因此,加入数千个文件也不用担忧加入的文件超出程序的所能容忍的最大值,我就是采用“Add Tree”的方式将Linux2.4内核的四千五百九十一个文件加入的。

5d0ffe0b8835016d73ab4329e68304a5.png

图3 添加文件

加入文件后,点击一个文件,能够出现使用界面,如图4所示,其中,右边的那个窗口(Linux Project,即工程窗口)缺省按照字母顺序列出当前工程中全部的文件。

c7dacfa5f01805d6f689b27cb1260785.png  

图4 工做窗口

点击一个文件就能够打开该文件,显示如图5所示,进入到右边的那个窗口分别能够以文件列表的方式,列出全部的文件,每一个窗体下边有一排按钮,左边的窗口(21142.c)从左至右分别为:按字母顺序排列全部标记、按照文件中行数顺序排列标记、按照类型排列标记、浏览本地文件标记、标记窗口属性。右边的窗口(Linux Project)从左至右分别为:按字母顺序文件列表、显示文件夹、按照文件类型归类文件、所有文件的全部标记列表、按照标记类型归类标记、跳转到定义处、显示标记信息、浏览工程标记、查找函数调用、工程属性,其中所有文件的全部标记列表选项可能要一段时间抽取标记,同步到数据库去,若是开始选择了创建标记数据库,将会在从此节省同步时间,最有用的莫过于浏览标记信息和查找函数调用,前者能够经过“Jump”按钮在不一样的地方查找一样的标志,还能够经过“Reference”按钮结合后者进行全局的标记查找。

402e0d915bd7781d27de3a771ec59d37.png

Reference功能是Source Insight的特点之一,它能够在速度极快的在整个工程中找到全部的标记,而且在该行程序的前边加上红色箭头的小按钮连接上。图6是一个Reference搜索后的结果,它能够有两种模式,一种集中显示结果,图6显示的就是这种模式,在这种模式下,能够经过前边的红色箭头小按钮进入另一种模式,该标记的具体的所在处,也能够经过标记的具体所在处点击红色箭头小按钮进入警种模式,还能够经过工具条上的两个红色小箭头直接在第二种模式下先后移动,察看相应信息。它的这个强大的功能使得阅读Linux源程序有如神助。可是要注意的是,当进行了第二次“Reference”时,它会提示你将结果集附加在第一个结果集的后边仍是取代第一个结果集。若是选择前者,不能对结果集根据先后两次搜索结果进行分类,而后在其子类里进行移动,只能在整个结果集里移动;若是,选择后者,结果集将会被替换为第二次搜索的结果,略微有些不方便。

376cbcf3813554a1d4989084abe2b126.png

文章来源:

http://blog.sina.com.cn/s/blog_510219d701008yrl.html

图6 Reference的搜索结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值