网站首页 > 开源技术 正文
前面几节主要介绍了如何下载编译 linux 内核,也介绍了怎样使用 gdb 单步调试。既然涉及到调试代码,那查看代码是少不了的。但是linux 源码的代码量相当庞大,如果打算阅读之,就需要一个不错的阅读器,恰好一般 linux 系统都带有 vim ,它是一款可以扩充功能的阅读器,借助于 ctags 和 cscope,用于阅读 linux 内核源码相当方便。
空口无凭,先放一张配置好的 vim 图。左侧是目录树,右侧是函数列表,中间是代码阅读区,下面则是代码区光标指向的函数出处。这样的 vim 甚至有点像 sourceInsight 了。
下面说说如何从头配置。
ctags 和 cscope
在 ubuntu 下,安装这两个工具是非常简单的,只需要执行下面两条命令:
# sudo apt-get install ctags # sudo apt-get install cscope
ctags 支持大多数编程语言,对于 C 语言来说,它可以解析 C 语言函数,变量,宏定义等符号。配合 vim 使用,可以从函数调用处一键跳转到函数定义处,非常的方便。但是 ctags 也有一些不足,例如只能单方向搜索,无法搜索调用的函数,无法搜索调用该函数的函数,以及该函数调用的函数。cscope 类似于 ctags,它可以弥补 ctags 的不足,二者配合使用,足以将 vim 打造成 IDE。
安装好这两个工具后,需要生成匹配 linux 内核源码的数据库。这一过程也是简单的,因为下载的 linux 内核天生支持这两个插件,所以只需执行几条命令就可以了:
# cd linux-2.6.26 # make ctags ARCH=x86_64 # make cscope ARCH=x86_64
因为 linux 的内核源码支持多种架构,所以在生成 ctags 和 cscope 的数据库时,指定了 ARCH,因为我们编译的内核就是 x86_64 架构的,以后阅读内核源码,也只关心 x86_64 架构的。
至此,就创建好了分析 linux 内核源码的数据库,实际上,在 vim 编辑器内直接输入 ctags 和 cscope 的命令,就能够分析代码了。但,如果不太熟悉 ctags 和 cscope 的命令,能不能更简单呢?当然可以,vim 有着丰富的插件,请继续往下看。
下载和安装 vim 插件
要实现开头展示的那种效果,需要借助 Source Explorer,NERD Tree,Tag List 插件。这几个插件都可以免费从官网下载:
依次点击 Script->Browse all 菜单,可以找到搜索框:
以 NERD Tree 插件为例,点击搜索结果,即可到达插件的下载目录,该网页也包含插件的使用说明:
下载后,进入 ~ 目录建立 .vim/plugin 目录:
# cd ~ # mkdir .vim # mkdir .vim/plugin
将下载好的插件复制到 .vim 目录,达到如下效果:
# cd .vim # ls NERD_tree.zip plugin SrcExpl-6.0.zip taglist_46.zip
然后依次解压插件:
# unzip xxx.zip
全部完成后,在 plugin 目录下生成下面三个文件,就算这三个插件安装好了。
配置 vim 插件
主要是配置 vim 的配置文件 vimrc,首先创建这个文件:
# cd ~ # touch .vimrc
配置内容则可以参考对应插件的说明文档,以 Source Explorer 插件为例,它的下载页面的说明如下图:
所以,在 vimrc 中,我们填写的内容如下:
nmap <F8> :SrcExplToggle<CR> nmap <C-J> <C-W>h nmap <C-K> <C-W>j nmap <C-I> <C-W>k nmap <C-L> <C-W>l let g:SrcExpl_winHeight = 8 let g:SrcExpl_refreshTime = 100 "ms let g:SrcExpl_jumpKey = "<ENTER>" let g:SrcExpl_gobackKey = "<SPACE>" let g:SrcExpl_isUpdateTags = 0
其他插件的配置内容也可以查询它们的官方手册,最终全部的配置如下
配置好 vimrc 文件,保存退出,打开 vim,依次按 F7, F8, F9 打开刚刚安装好的插件,看看 vim 现在是不是像 IDE 一样了?
使用配置好的 vim 查看 linux 内核源码
可以首先从左侧的目录树找到 linux 内核源码所在文件夹,按 Enter 选中想看的文件,然后从右侧的函数列表选中关心的函数,即可在代码区看到源码了。
下侧是被调用函数的出处。例如,start_kernel 函数调用了 lockdep_init() 函数,把光标移到 lockdep_init() 函数,则下侧窗口就会显示出 lockdep_init() 函数的出处(定义)。此时,可以从下侧窗口进入 lockdep_init() 函数的定义处。
如果想返回 start_kernel 函数,只需要按空格就可以了。
Enter键进入函数,空格(SPACE)键返回,这两个按键正是在 vimrc 中设置的按键。查看配置文件也能知道,ctrl+JKIL,分别是向左、下、上、右切换窗口。如果希望修改按键,可以再修改 vimrc 中的配置。
下面以一张动图结束本节,可以看出,真的很方便。
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。
猜你喜欢
- 2024-10-03 Linux下执行system(“cd /某个目录“),为什么路径切换不成功?
- 2024-10-03 linux cd主目录区别(linux cdrom目录)
- 2024-10-03 Linux学习总结4(linux学到了什么知识点)
- 2024-10-03 Linux磁盘分区及文件系统格式化和挂载
- 2024-10-03 小猿圈学习Linux之shell脚本中cd命令无效的解决方法
- 2024-10-03 探索Linux的神秘世界:CD和LS命令的使用宝典
- 2024-10-03 Linux系统上挂载CD-ROM系统镜像和iso文件作为yum本地仓库
- 2024-10-03 Linux下简单几步安装AI开发环境-ROS(超有意思)
- 2024-10-03 Linux环境下的持续集成/持续部署(CI/CD)实践
- 2024-10-03 Linux切换目录之cd命令(linux cd切换目录)
你 发表评论:
欢迎- 最近发表
-
- 10款鲜为人知的PHP框架(10款鲜为人知的php框架代码)
- 3分钟搞懂反弹shell(反弹shell的常用命令)
- 计算机专业必须掌握的脚本开发语言—shell
- shell 基本语法(shell基本语法set)
- 学习Shell 教程(shell编程学习)
- 一个有意思的PHP Webshell,利用伪协议执行代码
- Linux入门-shell编程-适合小白(linux shell编程是什么)
- GrayLog开源日志管理平台技术文章合集【共58篇】
- AI大模型 MiniMax 基于 Apache Doris 的日志系统,PB 级秒级查询响应
- 互联网大厂后端必看!手把手教你替换 Spring Boot 中的日志框架
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)