Linux内核的CSCOPE配置

文章目录

  • 前言
  • 一、了解内核源码树
  • 二、生成Tag文件
  • 二、生成索引
  • 总结


前言

基于上一篇博客vim基础配置,在完成vim的基础及一些插件配置后,我们期望的是能够用vim像IDE一样便利地阅读代码,例如查看变量/函数的定义,查找引用等等,本篇博客介绍如何通过vim+cscope实现Linux内核代码的便利阅码

一、了解内核源码树

不管是用传统的IDE还是用vim来阅读一个项目的代码,第一步都应该是创建该项目代码的工程,如果是用IDE的话,那么在创建工程的时候,它会自动帮忙创建变量/函数的Tag,从而让用户可以便利地查询变量/函数的定义,声明等。如果用vim+cscope的方式,需要我们自己创建Tag文件,然后用cscope的命令来建议索引,从而实现与IDE一样的功能。

不同于一般的项目,如果想要阅内核的码,那么无疑代码量是很庞大的,最简单的方法可以不假思索,把所有内核的代码全都建立索引,但这无疑引入了很多冗余的代码,cscope的效率也会相应的降低,因此更优的做法是我们只对我们常用的目录建立索引,那么就要求我们对内核源码树有一定的了解,下面基于6.3.6的内核做一下简单的介绍,大家可以根据自己的需求来生成各自的Tag文件。

目录 描述
arch 特定体系结构的源码
block 块设备I/O层
crypto 加密API
Documentation 内核源码文档
drivers 设备驱动程序
io_uring 5.1版本引入的异步I/O框架
fs 文件系统
include 内核头文件
init 内核引导和初始化
ipc 进程间通信
kernel 调度器等核心子系统
lib 通用内核API
mm 内存管理子系统和VM
net 网络子系统
rust 6.1版本引入的基于rust开发部分
samples 示例代码
scripts 编译内核所用的脚本
security 安全模块
sound 语音子系统
usr 早期用户空间代码
tools Linux开发中用到的工具
virt 虚拟化基础结构

二、生成Tag文件

结合内核源码树和自己的需求,我们就可以来生成cscope创建索引需要的Tag文件了,因为我平时都是基于arm64的架构做开发,因此就常用下面的命令来生成Tag文件,大家可以根据自身需求做一些修改:

#!/usr/bin/bash
# Author: Young WANG

set -eu

if [[ $# -ne 2 ]]; then
	echo "input invalid! please input src dir(root path of kernel) and dst dir(path of cscope.files)"
	echo "for example:"
	echo -e "\t bash $0 //common //cscope"
	exit
fi

SRC_DIR=$1
DST_DIR=$2

find $SRC_DIR										\
	-path	"$SRC_DIR/arch*"			-prune -o	\
	-path	"$SRC_DIR/scripts*"			-prune -o	\
	-path	"$SRC_DIR/Documentation*"	-prune -o	\
	-path	"$SRC_DIR/rust*"			-prune -o	\
	-path	"$SRC_DIR/tools*"			-prune -o	\
	-type f											\
	-not -name '*.mod.c'							\
	-name "*.[chsS]" -print > $DST_DIR/cscope.files

find $SRC_DIR/arch/arm64							\
-type f												\
-not -name '*.mod.c'								\
-name "*.[chsS]" -print >> $DST_DIR/cscope.files

使用的时候就可以输入内核源码树和存放cscope的Tag文件(cscope.files)的绝对路径即可,例如

bash gen_kernel_cscope.sh /home/<usr_name>/ack/common /home/<usr_name>/ack/commom/cscope

顺便附上cscope官方版在针对大工程时的guide供大家参考~

二、生成索引

在文成Tag文件的生成之后,就可以用cscope来创建工程的索引了,这里可以去到存储cscope.files的目录下执行如下命令

cscope -bkq

引用官方的解释,即:
-b标志告诉Cscope只构建数据库,而不启动Cscope GUI。
-q导致创建一个额外的“反向索引”文件,这使得大型数据库的搜索运行得更快。
-k设置Cscope的“内核”模式——它不会在/usr/include中查找源文件中#包含的任何头文件(这在您将Cscope与操作系统和/或C库源代码一起使用时非常有用,就像我们在这里一样)。

在完成索引创建后,即可结合vim基础配置里的2.5节来使用cscope了。

总结

如果有哪里理解错的地方欢迎大家留言交流,如需转载请标明出处。

如果你没看懂一定是我讲的不好,欢迎留言,我继续努力。

手工码字码图码代码,如果有帮助到你的话留个赞吧,谢谢。

以上。

你可能感兴趣的:(linux,vim)