Linux内核开发工具介绍

进行嵌入式Linux产品开发,往往需要对内核进行裁剪和定制,以满足嵌入式产品的功能和性能需求。本文介绍几种阅读Linux内核源码的工具和方法。

这里所说的“Linux内核开发”仅仅是指嵌入式Linux产品开发中内核和驱动相关开发工作,与Linux所领导的内核开发团队的内核开发有很大不同。

俗话说“工欲善其事,必先利其器”,面对几百兆的Linux内核代码,要阅读、查看或者搜索其中的代码,大部分初次接触到Linux内核代码的开发人员,都有无从下手的感觉。下面推荐几个源码阅读和索引工具,能为后续内核开发提供一些便利。

1、Source Insight

Source Insight是Windows平台下一款流行度极高的源码阅读和编辑工具。不少Linux开发人员还是习惯于在Windows下进行源码编辑,甚至查看和编辑Linux内核源码,依然在Source Insight中完成。

说明:Source Insight是一款版权软件,需要自行解决版权问题。

安装Source Insight软件后,新建一个工程,取名并指定数据存放位置,如图 1.1所示。

图 1.1 新建工程

图 1.2 工程设置

点击OK按钮,进入工程设置界面,如图 1.2所示。

然后添加源码。浏览选中Linux内核源码文件夹后,点击“Add Tree”按钮,将内核源码树的全部文件添加到工程中,如图 1.3所示。

图 1.3 添加内核源码

添加完成,即可在Source Insight中进行源码阅读和编辑了,如图 1.4所示。

图 1.4 在Source Insight中阅读源码

2、Eclipse

Eclipse是一个跨平台IDE,既能运行于Windows平台,也能在Linux下运行。不少习惯于图形界面操作的开发人员,在Linux下则习惯于用Eclipse来查看和编辑Linux源码。

如果仅仅是在Eclipse中查看Linux内核源码,则可以不必事先安装交叉编译器,否则则须事先安装好交叉编译器。

创建内核源码工程。点击FileàNewàProject,开始创建工程,在工程创建界面选择创建C工程,如图 1.5所示。

点击Next,在C Project界面的Project name栏中填写工程名称,去掉“Use default locaTIon”的勾,点击Browse将LocaTIon设置为Linux内核源码目录,如图 1.6所示。如果不在Eclipse中编译内核,则使用Linux GCC即可,否则请使用安装好的Cross GCC。

图 1.6 导入Linux内核源码

然后点击Finish,完成Linux内核源码导入,在Eclipse中即可进行代码阅读和编辑了,如图 1.7所示。

图 1.7 在Eclipse中浏览内核源码

在Eclipse中进行源码跟踪,只需选择函数、变量或者宏定义后按F3即可。更多的操作可在Navigate中找到。

3、vim+ctags+cscope

Vi/Vim是一个文本编辑器,在Vim中能高效的实现代码编辑。但Vim的功能不仅仅是一个文本编辑器,借助ctags和cscope的配合,Vim能实现堪比图形IDE环境的源码编辑和阅读功能,在某种程度上甚至比图形IDE更方便。

Vi/Vim的安装不再介绍了。如果不是通过远程登录在远程服务器上工作,而是在本地桌面系统操作,还可以用gvim启动Vi编辑器。

l Taglist

Taglist是Vim的一个源码浏览插件,可从http://www.vim.org网站获得。下载到压缩包后,在本地解压,然后将解压得到目录中的plugin目录复制到~/.vim目录。如果用户主目录下没有.vim目录,则建立一个这样的目录即可。

l Ctags

Ctags是一个用于产生tags文件的软件,可以下载源码进行编译安装,在Ubuntu下,可通过apt-get进行安装:

$ sudo apt-get install exuberant-ctags

l 源码阅读和跟踪

进入准备查看的源码所在目录,首先生成tags文件:

$ ctags -R

执行时间长短取决于源码数量的多少,执行完毕,在当前目录下可看到一个tags文件。源码越多,执行时间越长,产生的tags文件也越大。

注意:如果修改了源码,代码行号发生了变化,需要重新生成tags文件。

(1)查看函数等定义。用Vi/Vim打开一个C文件。若想知道某个函数、变量、结构或者宏定义在什么地方定义,先将光标移动到函数(变量、结构或者宏定义)上,然后按CTRL+]即可。查看后,按CTRL+o可回到原来所在位置。

(2)查看文件函数列表。打开C文件后,在Vi/Vim的命令状态下输入:TlistToggle(Vi/Vim的命令输入支持补全),在Vi/Vim左边就会出现函数列表侧栏,如图 1.8所示。按CTRL+ww(2次w),可在列表和代码查看区间切换。

图 1.8 Vi/Vim的函数列表侧栏

如果在本地桌面,用Gvim打开C文件,使用起来比较接近IDE集成环境。用鼠标双击函数即可跳转到函数定义的地方,CTRL+鼠标右键即可回退到原来所在位置。更多实用特性,还需要在实际操作中体验。

4、LXR

LXR是Linux Cross Referencer的缩写,是一个比较流行的Linux源码查看工具,当然也不仅仅局限于查看Linux源码。LXR的下载地址为:http://lxr.sourceforge.net,参考该网站的安装说明,很容易在本机搭建一个本地LXR用于源码查看。

如果不想搭建本地LXR,可以直接浏览已经搭好的LXR网站,推荐两个网站:一个是开源中国网站提供的Linux源码在线阅读http://lxr.oss.org.cn,另一个是http://lxr.free-electrons.com网站,前者速度较快,但是提供的Linux内核版本较少,后者则提供的版本较多。网站提供了源码阅读、关键字搜索和自由文本搜索功能。两者的网页快照分别如图 1.9和图 1.10所示。

图 1.9 lxr.oss.org.cn网页快照

图 1.10 lxr.free-electrons.com网页快照

本文作者:佚名

来源:51CTO

时间: 2024-10-31 20:30:45

Linux内核开发工具介绍的相关文章

ZLG致远电子Linux内核开发工具介绍

众所周知,Linux内核是使用make命令来配置并编译的,那必然少不了Makefile.如此复杂.庞大的内核源码绝不可能使用一个或几个Makefile文件来完成配置编译,而是需要一套同样复杂.庞大,且为Linux内核定制的Makefile系统. 尽管她是一个复杂的系统,但对绝大部分内核开发者来说只需要知道如何使用,而无需了解其中的细节.她对绝大部分内核开发者基本上是透明的,隐藏了大部分实现细节,有效地降低了开发者的负担,能使其能专注于内核开发,而不至于花费时间和精力在编译过程上. 1.1 Lin

为什么 Linux 内核开发仍然使用电子邮件

在日新月异的今天,Linux内核开发项目仍然依赖于古老的电子邮件和邮件列表.稳定内核维护者Greg Kroah-Hartman 指出,电子邮件仍然是管理如内核这样庞大项目的最佳方法.去年,Greg一个人就接受了9,781个补丁,而整个项目平均每小时接受8个补丁.他尝试过替代方法,但在对比之后认为电子邮件仍然是最好的方法. Greg试用过GitHub后认为它比较适合小的项目,对于大的项目并不好:它的pull request 讨论只向特定人开放,它需要网络访问,而开发者由于种种原因在工作时候未必能访

Windows Phone 7 开发工具介绍

Windows Phone 7 开发工具介绍 在今天的 MIX10会议上,我们推出了 Windows Phone 7 系列开发故事.开发 Windows Phone 7 系列开发的核心技术是 Silverlight. 这使您能够使用您现有的开发技能来构建 Windows Phone 7 的应用程序. 现在您可以在这里下载到微软的 Windows Phone 7系列开发工具包--Windows Phone 开发工具CTP版本. Windows Phone开发工具CTP版本包含了所有您需要的开始Wi

java初学者常用开发工具介绍

初学 Java的应用越来越广泛,学习Java的人也越来越多.学过程序设计的人知道,使用Basic进行程序设计,可以使用QBasic.Visual Basic等开发工具:使用C语言进行程序设计,可以使用Turbo C.Visual C++.C++ Builder等开发工具.这些开发工具集成了编辑器和编译器,是集成开发工具,很方便使用.学习Java程序设计,同样需要方便易用的开发工具.Java的开发工具很多,而且各有优缺点,初学者往往不知道有哪些常用的开发工具,或者由于面临的选择比较多而产生困惑.本

【转】软件开发工具介绍之 6.Web开发工具

1.EditPlus  无论是编写xhtml页面,还是css.js文件,甚至随笔记记这样的事情,我都会使用EditPlus,感觉它不仅功能强大,更难得的是:绿色.轻量级.启动速度快.稳定性高 1.1 配置文件模板 设置好EditPlus的配置文件,告别重复的体力劳动.如果我们经常建立一种文件,而这种文件总会包含一些重复的文字或者代码的话,我们就可以建立模板,然后通过模板建立文件.从而摆脱每次都要重复的体力劳动. 1.2 顺手的侧边栏 侧 边栏包含了"快速目录路径"和"快速剪贴

七种武器武装.NET(常用开发工具介绍)

我学习.Net快一年了,偶然间发现大家用的开发工具很多我都没见过,于是暗中的进行收集(呵呵,夸张了),现在收集满七种特来做此总结!我称他们为"七种武器"\(^o^)/ 第一种武器长生剑.NUnit (用于编写单元测试) NUnit 是为 .NET 框架生成的开放源代码单元测试框架.NUnit 使您可以用您喜欢的语言编写测试,从而测试应用程序的特定功能.当您首次编写代码时,单元测试是一种测试代码功能的很好方法,它还提供了一种对应用程序进行回归测试的方法.NUnit 应用程序提供了一个用于

一起谈.NET技术,七种武器武装.NET(常用开发工具介绍)

      我学习.Net快一年了,偶然间发现大家用的开发工具很多我都没见过,于是暗中的进行收集(呵呵,夸张了),现在收集满七种特来做此总结!我称他们为"七种武器"\(^o^)/ 第一种武器长生剑.NUnit (用于编写单元测试) NUnit 是为 .NET 框架生成的开放源代码单元测试框架.NUnit 使您可以用您喜欢的语言编写测试,从而测试应用程序的特定功能.当您首次编写代码时,单元测试是一种测试代码功能的很好方法,它还提供了一种对应用程序进行回归测试的方法.NUnit 应用程序提

linux下c/c++ IDE开发工具介绍

  目录(?)[-] 编辑 anjuta 编辑 kdevelop 编辑 geany 编辑 codeblocks 编辑 eclipse 编辑 netbeans 编辑 其他IDE 编辑 相关链接   为避免以下某个软件安装时不自动安装 build-essential 不妨先执行: sudo apt-get install build-essential [编辑 ] anjuta Anjuta DevStudio 的官方地址:http://anjuta.sourceforge.net/ Anjuta是

linux驱动程序开发详细介绍

第一个内核模块(Hello World模块) 代码如下: View Code #include<linux/init.h> #include<linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static __init int hello_init(void) { //printk函数在内核中定义对模块可用,内核需要自已的打印涵数 //因为它靠自已运行,而没有相应的库函数. //模块能够调用printk是因为insm