linux lxr(ubuntu ln命令)
大家好,今天小编来为大家解答以下的问题,关于linux lxr,ubuntu ln命令这个很多人还不知道,现在让我们一起来看看吧!
如何成为一个Linux内核开发者
如何参与Linux内核开发
---------------------
这是一篇将如何参与Linux内核开发的相关问题一网打尽的终极秘笈。它将指导你
成为一名Linux内核开发者,并且学会如何同Linux内核开发社区合作。它尽可能不
包括任何关于内核编程的技术细节,但会给你指引一条获得这些知识的正确途径。
如果这篇文章中的任何内容不再适用,请给文末列出的文件维护者发送补丁。
入门
----
你想了解如何成为一名Linux内核开发者?或者老板吩咐你“给这个设备写个Linux
驱动程序”?这篇文章的目的就是教会你达成这些目标的全部诀窍,它将描述你需
要经过的流程以及给出如何同内核社区合作的一些提示。它还将试图解释内核社区
为何这样运作。
Linux内核大部分是由C语言写成的,一些体系结构相关的代码用到了汇编语言。要
参与内核开发,你必须精通C语言。除非你想为某个架构开发底层代码,否则你并
不需要了解(任何体系结构的)汇编语言。下面列举的书籍虽然不能替代扎实的C
语言教育和多年的开发经验,但如果需要的话,做为参考还是不错的:
-"The C Programming Language" by Kernighan and Ritchie [Prentice Hall]
《C程序设计语言(第2版·新版)》(徐宝文李志译)[机械工业出版社]
-"Practical C Programming" by Steve Oualline [O'Reilly]
《实用C语言编程(第三版)》(郭大海译)[中国电力出版社]
-"C: A Reference Manual" by Harbison and Steele [Prentice Hall]
《C语言参考手册(原书第5版)》(邱仲潘等译)[机械工业出版社]
Linux内核使用GNU C和GNU工具链开发。虽然它遵循ISO C89标准,但也用到了一些
标准中没有定义的扩展。内核是自给自足的C环境,不依赖于标准C库的支持,所以
并不支持C标准中的部分定义。比如long long类型的大数除法和浮点运算就不允许
使用。有时候确实很难弄清楚内核对工具链的要求和它所使用的扩展,不幸的是目
前还没有明确的参考资料可以解释它们。请查阅gcc信息页(使用“info gcc”命令
显示)获得一些这方面信息。
请记住你是在学习怎么和已经存在的开发社区打交道。它由一群形形色色的人组成,
他们对代码、风格和过程有着很高的标准。这些标准是在长期实践中总结出来的,
适应于地理上分散的大型开发团队。它们已经被很好得整理成档,建议你在开发
之前尽可能多的学习这些标准,而不要期望别人来适应你或者你公司的行为方式。
法律问题
--------
Linux内核源代码都是在GPL(通用公共许可证)的保护下发布的。要了解这种许可
的细节请查看源代码主目录下的COPYING文件。如果你对它还有更深入问题请联系
律师,而不要在Linux内核邮件组上提问。因为邮件组里的人并不是律师,不要期
望他们的话有法律效力。
对于GPL的常见问题和解答,请访问以下链接:
文档
----
Linux内核代码中包含有大量的文档。这些文档对于学习如何与内核社区互动有着
不可估量的价值。当一个新的功能被加入内核,最好把解释如何使用这个功能的文
档也放进内核。当内核的改动导致面向用户空间的接口发生变化时,最好将相关信
息或手册页(manpages)的补丁发到mtk.manpages@gmail.com,以向手册页(manpages)
的维护者解释这些变化。
以下是内核代码中需要阅读的文档:
README
文件简要介绍了Linux内核的背景,并且描述了如何配置和编译内核。内核的
新用户应该从这里开始。
Documentation/Changes
文件给出了用来编译和使用内核所需要的最小软件包列表。
Documentation/CodingStyle
描述Linux内核的代码风格和理由。所有新代码需要遵守这篇文档中定义的规
范。大多数维护者只会接收符合规定的补丁,很多人也只会帮忙检查符合风格
的代码。
Documentation/SubmittingPatches
Documentation/SubmittingDrivers
这两份文档明确描述如何创建和发送补丁,其中包括(但不仅限于):
-邮件内容
-邮件格式
-选择收件人
遵守这些规定并不能保证提交成功(因为所有补丁需要通过严格的内容和风格
审查),但是忽视他们几乎就意味着失败。
其他关于如何正确地生成补丁的优秀文档包括:
"The Perfect Patch"
"Linux kernel patch submission format"
Documentation/stable_api_nonsense.txt
论证内核为什么特意不包括稳定的内核内部API,也就是说不包括像这样的特
性:
-子系统中间层(为了兼容性?)
-在不同操作系统间易于移植的驱动程序
-减缓(甚至阻止)内核代码的快速变化
这篇文档对于理解Linux的开发哲学至关重要。对于将开发平台从其他操作系
统转移到Linux的人来说也很重要。
Documentation/SecurityBugs
如果你认为自己发现了Linux内核的安全性问题,请根据这篇文档中的步骤来
提醒其他内核开发者并帮助解决这个问题。
Documentation/ManagementStyle
描述内核维护者的工作方法及其共有特点。这对于刚刚接触内核开发(或者对
它感到好奇)的人来说很重要,因为它解释了很多对于内核维护者独特行为的
普遍误解与迷惑。
Documentation/stable_kernel_rules.txt
解释了稳定版内核发布的规则,以及如何将改动放入这些版本的步骤。
Documentation/kernel-docs.txt
有助于内核开发的外部文档列表。如果你在内核自带的文档中没有找到你想找
的内容,可以查看这些文档。
Documentation/applying-patches.txt
关于补丁是什么以及如何将它打在不同内核开发分支上的好介绍
内核还拥有大量从代码自动生成的文档。它包含内核内部API的全面介绍以及如何
妥善处理加锁的规则。生成的文档会放在 Documentation/DocBook/目录下。在内
核源码的主目录中使用以下不同命令将会分别生成PDF、Postscript、HTML和手册
页等不同格式的文档:
make pdfdocs
make psdocs
make htmldocs
make mandocs
如何成为内核开发者
------------------
如果你对Linux内核开发一无所知,你应该访问“Linux内核新手”计划:
它拥有一个可以问各种最基本的内核开发问题的邮件列表(在提问之前一定要记得
查找已往的邮件,确认是否有人已经回答过相同的问题)。它还拥有一个可以获得
实时反馈的IRC聊天频道,以及大量对于学习Linux内核开发相当有帮助的文档。
网站简要介绍了源代码组织结构、子系统划分以及目前正在进行的项目(包括内核
中的和单独维护的)。它还提供了一些基本的帮助信息,比如如何编译内核和打补
丁。
如果你想加入内核开发社区并协助完成一些任务,却找不到从哪里开始,可以访问
“Linux内核房管员”计划:
这是极佳的起点。它提供一个相对简单的任务列表,列出内核代码中需要被重新
整理或者改正的地方。通过和负责这个计划的开发者们一同工作,你会学到将补丁
集成进内核的基本原理。如果还没有决定下一步要做什么的话,你还可能会得到方
向性的指点。
如果你已经有一些现成的代码想要放到内核中,但是需要一些帮助来使它们拥有正
确的格式。请访问“内核导师”计划。这个计划就是用来帮助你完成这个目标的。它
是一个邮件列表,地址如下:
在真正动手修改内核代码之前,理解要修改的代码如何运作是必需的。要达到这个
目的,没什么办法比直接读代码更有效了(大多数花招都会有相应的注释),而且
一些特制的工具还可以提供帮助。例如,“Linux代码交叉引用”项目就是一个值得
特别推荐的帮助工具,它将源代码显示在有编目和索引的网页上。其中一个更新及
时的内核源码库,可以通过以下地址访问:
开发流程
--------
目前Linux内核开发流程包括几个“主内核分支”和很多子系统相关的内核分支。这
些分支包括:
- 2.6.x主内核源码树
- 2.6.x.y-stable内核源码树
- 2.6.x-git内核补丁集
- 2.6.x-mm内核补丁集
-子系统相关的内核源码树和补丁集
2.6.x内核主源码树
-----------------
2.6.x内核是由Linus Torvalds(Linux的创造者)亲自维护的。你可以在
kernel.org网站的pub/linux/kernel/v2.6/目录下找到它。它的开发遵循以下步
骤:
-每当一个新版本的内核被发布,为期两周的集成窗口将被打开。在这段时间里
维护者可以向Linus提交大段的修改,通常这些修改已经被放到-mm内核中几个
星期了。提交大量修改的首选方式是使用git工具(内核的代码版本管理工具
,更多的信息可以在获取),不过使用普通补丁也是可以
的。
-两个星期以后-rc1版本内核发布。之后只有不包含可能影响整个内核稳定性的
新功能的补丁才可能被接受。请注意一个全新的驱动程序(或者文件系统)有
可能在-rc1后被接受是因为这样的修改完全独立,不会影响其他的代码,所以
没有造成内核退步的风险。在-rc1以后也可以用git向Linus提交补丁,不过所
有的补丁需要同时被发送到相应的公众邮件列表以征询意见。
-当Linus认为当前的git源码树已经达到一个合理健全的状态足以发布供人测试
时,一个新的-rc版本就会被发布。计划是每周都发布新的-rc版本。
-这个过程一直持续下去直到内核被认为达到足够稳定的状态,持续时间大概是
6个星期。
-以下地址跟踪了在每个-rc发布中发现的退步列表:
关于内核发布,值得一提的是Andrew Morton在linux-kernel邮件列表中如是说:
“没有人知道新内核何时会被发布,因为发布是根据已知bug的情况来决定
的,而不是根据一个事先制定好的时间表。”
2.6.x.y-stable(稳定版)内核源码树
-----------------------------------
由4个数字组成的内核版本号说明此内核是-stable版本。它们包含基于2.6.x版本
内核的相对较小且至关重要的修补,这些修补针对安全性问题或者严重的内核退步。
这种版本的内核适用于那些期望获得最新的稳定版内核并且不想参与测试开发版或
者实验版的用户。
如果没有2.6.x.y版本内核存在,那么最新的2.6.x版本内核就相当于是当前的稳定
版内核。
2.6.x.y版本由“稳定版”小组(邮件地址<stable@kernel.org>)维护,一般隔周发
布新版本。
内核源码中的Documentation/stable_kernel_rules.txt文件具体描述了可被稳定
版内核接受的修改类型以及发布的流程。
2.6.x-git补丁集
----------------
Linus的内核源码树的每日快照,这个源码树是由git工具管理的(由此得名)。这
些补丁通常每天更新以反映Linus的源码树的最新状态。它们比-rc版本的内核源码
树更具试验性质,因为这个补丁集是全自动生成的,没有任何人来确认其是否真正
健全。
2.6.x-mm补丁集
---------------
这是由Andrew Morton维护的试验性内核补丁集。Andrew将所有子系统的内核源码
和补丁拼凑到一起,并且加入了大量从linux-kernel邮件列表中采集的补丁。这个
源码树是新功能和补丁的试炼场。当补丁在-mm补丁集里证明了其价值以后Andrew
或者相应子系统的维护者会将补丁发给Linus以便集成进主内核源码树。
在将所有新补丁发给Linus以集成到主内核源码树之前,我们非常鼓励先把这些补
丁放在-mm版内核源码树中进行测试。
这些内核版本不适合在需要稳定运行的系统上运行,因为运行它们比运行任何其他
内核分支都更具有风险。
如果你想为内核开发进程提供帮助,请尝试并使用这些内核版本,并在
linux-kernel邮件列表中提供反馈,告诉大家你遇到了问题还是一切正常。
通常-mm版补丁集不光包括这些额外的试验性补丁,还包括发布时-git版主源码树
中的改动。
-mm版内核没有固定的发布周期,但是通常在每两个-rc版内核发布之间都会有若干
个-mm版内核发布(一般是1至3个)。
子系统相关内核源码树和补丁集
----------------------------
相当一部分内核子系统开发者会公开他们自己的开发源码树,以便其他人能了解内
核的不同领域正在发生的事情。如上所述,这些源码树会被集成到-mm版本内核中。
下面是目前可用的一些内核源码树的列表:
通过git管理的源码树:
- Kbuild开发源码树, Sam Ravnborg<sam@ravnborg.org>
git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git
- ACPI开发源码树, Len Brown<len.brown@intel.com>
git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
-块设备开发源码树, Jens Axboe<axboe@suse.de>
git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
- DRM开发源码树, Dave Airlie<airlied@linux.ie>
git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git
- ia64开发源码树, Tony Luck<tony.luck@intel.com>
git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
- ieee1394开发源码树, Jody McIntyre<scjody@modernduck.com>
git.kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git
- infiniband开发源码树, Roland Dreier<rolandd@cisco.com>
git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
- libata开发源码树, Jeff Garzik<jgarzik@pobox.com>
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
-网络驱动程序开发源码树, Jeff Garzik<jgarzik@pobox.com>
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
- pcmcia开发源码树, Dominik Brodowski<linux@dominikbrodowski.net>
git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
- SCSI开发源码树, James Bottomley<James.Bottomley@SteelEye.com>
git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
使用quilt管理的补丁集:
- USB, PCI,驱动程序核心和I2C, Greg Kroah-Hartman<gregkh@suse.de>
kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
- x86-64,部分i386, Andi Kleen<ak@suse.de>
ftp.firstfloor.org:/pub/ak/x86_64/quilt/
其他内核源码树可以在的列表中和MAINTAINERS文件里
找到。
报告bug
-------
bugzilla.kernel.org是Linux内核开发者们用来跟踪内核Bug的网站。我们鼓励用
户在这个工具中报告找到的所有bug。如何使用内核bugzilla的细节请访问:
内核源码主目录中的REPORTING-BUGS文件里有一个很好的模板。它指导用户如何报
告可能的内核bug以及需要提供哪些信息来帮助内核开发者们找到问题的根源。
利用bug报告
-----------
练习内核开发技能的最好办法就是修改其他人报告的bug。你不光可以帮助内核变
得更加稳定,还可以学会如何解决实际问题从而提高自己的技能,并且让其他开发
者感受到你的存在。修改bug是赢得其他开发者赞誉的最好办法,因为并不是很多
人都喜欢浪费时间去修改别人报告的bug。
要尝试修改已知的bug,请访问网址。如果你想获得
最新bug的通知,可以订阅bugme-new邮件列表(只有新的bug报告会被寄到这里)
或者订阅bugme-janitor邮件列表(所有bugzilla的变动都会被寄到这里)。
邮件列表
--------
正如上面的文档所描述,大多数的骨干内核开发者都加入了Linux Kernel邮件列
表。如何订阅和退订列表的细节可以在这里找到:
网上很多地方都有这个邮件列表的存档(archive)。可以使用搜索引擎来找到这些
存档。比如:
在发信之前,我们强烈建议你先在存档中搜索你想要讨论的问题。很多已经被详细
讨论过的问题只在邮件列表的存档中可以找到。
大多数内核子系统也有自己独立的邮件列表来协调各自的开发工作。从
MAINTAINERS文件中可以找到不同话题对应的邮件列表。
很多邮件列表架设在kernel.org服务器上。这些列表的信息可以在这里找到:
在使用这些邮件列表时,请记住保持良好的行为习惯。下面的链接提供了与这些列
表(或任何其它邮件列表)交流的一些简单规则,虽然内容有点滥竽充数。
当有很多人回复你的邮件时,邮件的抄送列表会变得很长。请不要将任何人从抄送
列表中删除,除非你有足够的理由这么做。也不要只回复到邮件列表。请习惯于同
一封邮件接收两次(一封来自发送者一封来自邮件列表),而不要试图通过添加一
些奇特的邮件头来解决这个问题,人们不会喜欢的。
记住保留你所回复内容的上下文和源头。在你回复邮件的顶部保留“某某某说到……”
这几行。将你的评论加在被引用的段落之间而不要放在邮件的顶部。
如果你在邮件中附带补丁,请确认它们是可以直接阅读的纯文本(如
Documentation/SubmittingPatches文档中所述)。内核开发者们不希望遇到附件
或者被压缩了的补丁。只有这样才能保证他们可以直接评论你的每行代码。请确保
你使用的邮件发送程序不会修改空格和制表符。一个防范性的测试方法是先将邮件
发送给自己,然后自己尝试是否可以顺利地打上收到的补丁。如果测试不成功,请
调整或者更换你的邮件发送程序直到它正确工作为止。
总而言之,请尊重其他的邮件列表订阅者。
16个Linux系统方面的在线工具类网站
众所周知,GNU Linux不仅仅只是一款操作系统。看起来通过互联网全球许多人都在致力于这款以企鹅为吉祥物的操作系统。如果你读到这篇文章,你可能希望读一些关于Linux在线资源的内容。在可以找到的所有关于这个主题的网页中,有一些网站是每个Linux爱好者都应该收藏起来的。这些网站不仅仅只是教程或回顾,更是可以随时随地访问并与他人共享的实用工具。所以,今天我会建议一份包含16个应该收藏的网址清单。它们中的一些对Windows或Mac用户同样有用:这是在他们的能力范围内可以做到的。(译者注:Windows和Mac一样可以很好地体验Linux)1. ExplainShell.com
如果你对Linux命令行感兴趣,那就试试这个网站。如果你对Linux命令行不感兴趣,那就更应该试试它,因为它会详尽地告诉你一个命令是如何工作的。这会防止你无意执行一个对电脑有害的命令,而且通过一个非常赞的界面来学习是一个好方法。
2. BashrcGenerator.com
如果你想开始学习Linux命令行,或者想快速地生成一个自定义的shell命令提示符,但不知道从何下手,这个网站可以为你生成PS1提示的代码,将代码放到家目录下的.bashrc文件中即可。你可以拖拽任何你想在提示符里看到的元素,譬如用户名和当前时间,这个网站都会为你编写易懂可读的代码。绝对是懒人必备!
3. Vim-adventures.com
我是最近才发现这个网站的,但我的生活已经深陷其中。简而言之:它就是一个使用Vim命令的RPG游戏。在地图的平面上使用‘h,j,k,l’四个键移动你的角色、得到新的命令/能力、收集钥匙,可以帮助你非常快速地学习如何高效使用Vim。
4. Try Github
目标很简单:15分钟学会Git。这个网站模拟一个控制台,带你遍历这种协作编辑的每一步。界面非常时尚,目的十分有用。唯一不足的是对Git感兴趣,但Git绝对是一项不错的技能,这里也是学习Git的绝佳之处。
5. Shortcutfoo.com
又一个包含众多快捷键数据库的网站,shortcutfoo以更标准的方式将其内容呈现给用户,但绝对比有趣的迷你游戏更直截了当。这里有许多软件的快捷键,并按类别分组。虽然像Vim一类的软件它没有给出超级完整的快捷键列表,但也足以提供快速的提示或一般性的概述。
6. GitHub Free Programming Books
正如你从URL上猜到的一样,这个网站就是免费在线编程书籍的集合,使用Git协作方式编写。上面的内容非常好,作者们应该为他们做出的这些贡献受到表扬。它可能不是最容易阅读的,但一定是最有启发性的之一。我们只希望这项运动能持续进行。
7. Collabedit.com
如果你曾经计划过电话面试,你应该先试试collabedit。它让你创建文件,选择你想使用的编程语言,然后通过URL共享文档。打开链接的人可以免费地实时使用文本交互,使你可以评判他们的编程水平或只是交换一些程序片段。这里甚至还提供合适的语法高亮和聊天功能。换句话说,这就是程序员的即时Google Doucment。
8. Cpp.sh
尽管这个网站超出了Linux范围,但因为它非常有用,所以值得将它放在这里。简单地说,这是一个C++在线开发环境。只需在浏览器里编写程序,然后运行它。作为奖励,你可以使用自动补全、Ctrl+Z,以及和你的小伙伴分享你的作品的URL。这些有趣的事情,你只需要通过一个简单的浏览器就能做到。
如果想继续在浏览器上做一些疯狂的事情,你可以试试在copy.sh上在线运行一个虚拟机。就是这么简单。这个网站最近小有名气,但这个点子确实有些疯狂。从导航栏里,你可以选择运行默认的虚拟机镜像,或者上传你自己的iso文件。这项壮举的代码已经共享在GitHub。尽情尖叫吧!
10. Commandlinefu.com
我们总是在自己的电脑上保存着一大段命令行“宝石”,commandlinefu的目标是把这些片段释放给全世界。作为一个协作式数据库,它就像是命令行里的维基百科。每个人可以免费注册,把自己最钟爱的命令提交到这个网站上给其他人看。你将能够获取来自四面八方的知识并与人分享。如果你对精通shell饶有兴趣,commandlinefu也可以提供一些优秀的特性,比如随机命令和每天学习新知识的新闻订阅。
11. Alias.sh
另一协作式数据库,alias.sh(我爱死这个URL了)有点像commandlinefu,但是为shell别名开发的。你可以共享和发现一些有用的别名,来使你的CLI(命令行界面)体验更加舒服。我个人喜欢这个获取图片维度的别名命令。
function dim(){ sips$1-g pixelWidth-g pixelHeight}你通过alias.sh节省下来的时间会积少成多,当你走到人生尽头的时候,会发现省下了许多年。(译者注:珍爱生命,多用别名!)
12. Distrowatch.com
有谁不知道Distrowatch?除了基于这个网站流行度给出一个精确的Linux发行版排名,Distrowatch也是一个非常有用的数据库。无论你正苦苦寻找一个新的发行版,还是只是出于好奇,它都能为你能找到的每个Linux版本呈现一个详尽的描述,包含默认的桌面环境、包管理系统、默认应用程序等信息,还有所有的版本号,以及可用的下载链接。总而言之,这就是个Linux宝库。
13. Linuxmanpages.com
一切尽在URL中说明了:随时随地获取主流命令的手册页面。尽管不确信对于Linux用户是否真的有用,因为他们可以从真实的终端中获取这些信息,但这里的内容还是值得关注的。
14. AwesomeCow.com
这可能对于骨灰级 Linux没啥用,但是对于其他人也许有用。Awesomecow是一个搜索引擎,来寻找Windows软件在Linux上对应的替代品。它对那些迁移到企鹅操作系统(Linux)或习惯Windows软件的人很有帮助。我认为这个网站代表一种能力,表明了在谈到软件质量时Linux也可以适用于专业领域。大家至少可以尝试一下。
15. PenguSpy.com
Steam在Linux上崭露头角之前,可玩性可能是Linux的软肋。但这个名为“pengsupy”的网站不遗余力地弥补这个软肋,通过使用漂亮的界面展现了数据库中收集的所有兼容Linux的游戏。游戏按照类别、发行日期、评分等指标分类。我真心希望这一类的网站不会因为Steam的存在走向衰亡,毕竟这是我在这个列表里最喜爱的网站之一。
16. Linux Cross Reference by Free Electrons
最后,对所有的专家和好奇的用户,lxr是源于 Linux Cross Reference的另外一种形式,使我们能交互地在线查看Linux内核代码。可以通过各种标识符在代码中很方便地导航,你可以使用标准的diff标记对比文件的不同版本。这个网站的界面看起来严肃直接,毕竟这只是一个希望完美阐述开源观点的网站。
总而言之,应该列出更多这一类的网站,作为这篇文章第二部分的主题。但这篇文章是一个好的开始,是一道为Linux用户寻找在线工具的开胃菜。如果你有其它任何想要分享的页面,而且是紧跟这个主题的,在评论里写出来。这将有助于续写这个列表。谢谢阅读,希望能帮到大家,请继续关注,我们会努力分享更多优秀的文章。
详细介绍Linux内核开发工具都有哪些
1、Source Insight
Source Insight是Windows平台下一款流行度极高的源码阅读和编辑工具。不少Linux开发人员还是习惯于在Windows下进行源码编辑,甚至查看和编辑Linux内核源码,依然在Source Insight中完成。
说明:Source Insight是一款版权软件,需要自行解决版权问题。
安装Source Insight软件后,新建一个工程,取名并指定数据存放位置,如图 1.1所示。
图 1.1新建工程
点击OK按钮,进入工程设置界面,如图 1.2所示。
图 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所示。
图 1.5创建C工程
点击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编辑器。
Taglist
Taglist是Vim的一个源码浏览插件,可从网站获得。下载到压缩包后,在本地解压,然后将解压得到目录中的plugin目录复制到~/.vim目录。如果用户主目录下没有.vim目录,则建立一个这样的目录即可。
Ctags
Ctags是一个用于产生tags文件的软件,可以下载源码进行编译安装,在Ubuntu下,可通过apt-get进行安装:
sudo apt-get install exuberant-ctags
源码阅读和跟踪
进入准备查看的源码所在目录,首先生成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的下载地址为:,参考该网站的安装说明,很容易在本机搭建一个本地LXR用于源码查看。
如果不想搭建本地LXR,可以直接浏览已经搭好的LXR网站,推荐两个网站:一个是开源中国网站提供的Linux源码在线阅读,另一个是网站,前者速度较快,但是提供的Linux内核版本较少,后者则提供的版本较多。网站提供了源码阅读、关键字搜索和自由文本搜索功能。两者的网页快照分别如图 1.9和图 1.10所示。