0
点赞
收藏
分享

微信扫一扫

机器学习:基于Kmeans聚类算法对银行客户进行分类

做个橙梦 2023-06-12 阅读 68
linuxvim

文章目录


前言

基于上一篇博客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_uring5.1版本引入的异步I/O框架
fs文件系统
include内核头文件
init内核引导和初始化
ipc进程间通信
kernel调度器等核心子系统
lib通用内核API
mm内存管理子系统和VM
net网络子系统
rust6.1版本引入的基于rust开发部分
samples示例代码
scripts编译内核所用的脚本
security安全模块
sound语音子系统
usr早期用户空间代码
toolsLinux开发中用到的工具
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 /<workspace>/common /<workspace>/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了。

总结

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

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

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

以上。

举报

相关推荐

0 条评论