Email: BuddyZhang1 buddy.zhang@aliyun.com
目录
内核源码辅助工具 Ctag + Cscope
内核开发过程中需要对源码进行深入分析,经常遇到查找函数,宏,变量的定义,以及 函数,宏,变量被引用的地方。Windows 工具 Source Insight 可以完整解决这个问题, 但在 Linux 发行版上如何搭建一个简单,高效的源码索引平台呢?这里推荐使用 Ctag 和 Cscope 的组合,并结合一些技巧让平台简单,高效的运转。
准备源码
Linux 内核源码默认就支持 ctags 和 cscope 工具,并根据 Linux 内核源码的特定做了优化, 原生支持,所以可以轻松使用这两个工具搭建一个高效的 Linux 源码浏览工具。
安装工具
本教程基于 Linux 5.0 讲解,如果还没有搭建开发环境,可以参考文档:
搭建好 Linux 5.0 开发环境后,可以在 Linux 5.0 源码中直接配置 ctags 和 cscope 工具, 使用如下命令:
执行完命令之后,会在源码目录下生成 tags, cscope.out, cscope.in.out, 和 cscope.po.out 等多个文件,同样,为了减少不必要的输入,也可以将这个 tags 和 cscope 作为 vim 默认的数据库, 将其添加到默认 vim 配置文件中,使用如下命令:
使用工具
安装和配置完工具之后,接下来就是开始使用工具了,使用 vim 在源码目录下打开一个源文件, 这里讲解基础功能的使用:
查看函数,宏,全局变量的定义
查找函数,宏,全局变量的定义时,在 vim 中将光标移动到函数,宏,或全局变量处,按下 Ctrl+] , 之后就会跳转到定义的位置。如果函数,宏,或全局变量有多处定义,那么 cscope 工具会在按下 Ctrl+] 之后,在底部打印出函数所有的定义出处,并使用数字进行 排列,开发者此时可以根据需要的情况输入指定的数字,并按下回车,接着就可以跳转到定义的 位置。例如查找 early_fixmap_init() 函数的定义, 将光标移动到 early_fixmap_init() 函数处,之后自动打印如下信息:
输入 2 并按回车,vim 就跳转到 arch/arm/mm/mmu.c 第 387 行。
从查看中返回
当查看完一个函数,宏,或全局变量的定义之后,开发者可以使用 Ctrl+T 进行返回上一个 跳转点,这样利于源码的浏览。
查看函数,宏,全局变量被调用的地方
有时开发者需要查看函数。宏,全局变量在什么地方被调用,那么可以使用如下命令进行查找:
在 vim 按下 Esc 按键,接着输入 : (冒号) 进入命令行模式,输入如下命令:
例如,需要查找源码中什么地方引用了 adjust_lowmem_bounds() 函数,使用如下命令:
但查看完一个函数的引用之后,需要返回上一次光标位置,可以使用 Ctrl+T 组合命令进行 返回
查看局部变量的定义
在一个很长的函数里,需要查找某个局部变量的定义,可以使用 gd 命令,也就是先将光标移动到 局部变量的位置,然后先按 g 键,再按 d 键,就可以跳转到局部变量定义的地方。当查看完局部 变量的定义之后,再按 Ctrl+o 组合按键返回之前的位置。
更多ctags 和 cscope 工具的使用,可以参考文章:
二进制文件编辑工具
内核开发过程中少不了对二进制文件的读写和对比操作,这里给开发者介绍与二进制有关 的工具集合:
hexdump
hexdump 主要用来查看 “二进制” 文件的十六进制编码。hexdump 能够查看任何文件,不 限于与二进制文件.
安装
Ubuntu 下安装 hexdump 工具使用如下命令:
使用方法
实践
hexedit
hexedit 是 linux 下的一款二进制文件编辑工具,可以使用 hexedit 工具对二进制 文件进行编辑和查看。
安装
Ubuntu 上安装 hexedit 可以使用如下命令:
使用方法
使用实例
bless
Bless 是一个十六进制编辑器,其主要功能包括:支持编辑大数据文件及块设备、能够执行 搜索与替换操作、具有类似 Firefox 的标签浏览特性、可将数据输出为文本或 HTML、包含 插件系统.
安装
Ubuntu 上安装 bless 使用如下命令:
使用方法
实践
程序员计算器
Ubuntu Calculator
程序开发过程中,经常会遇到各种进制的数学运算,这里推荐一款程序员专用的计算器, Ubuntu 自带的 Calculator 就能切换成程序员模式进行各种进制的计算,如下图:
Windows Calculator
程序开发过程中,经常会遇到各种进制的数学运算,这里推荐一款程序员专用的计算器, Windows 自带的 Calculator 就能切换成程序员模式进行各种进制的计算,如下图:
源码对比工具
meld
在开发过程中,需要对比两次提交或者两个版本间源码的不同点,这时就需要源码对比工具。源码 对比工具就是用于大到工程,小到源文件之间的对比。
meld 安装
Ubuntu 上安装 meld 可以使用如下命令:
meld 使用
meld 可以对比两个或者三个对象,可以使用命令行的方式启动 meld,也可以直接点击 meld 图标 进行启动,例如使用命令行启动,如下格式: