Linux系统下使用vscode搭建内核开发环境
原文链接:https://blog.csdn.net/u010252464/article/details/116332878
概述
在见识到source insight在追踪内核代码方面的强大能力后,习惯使用vscode的我顿时对source insight产生了兴趣,但随后我就发现自己还是不习惯使用source insight,于是折腾起vscode来,看看能不能借助vscode的各种插件来实现强大如source insight那样的内核代码追踪功能。
在网上查找时,发现很多人使用vscode+GNU Global的方案,但试过后发现并不好用,经常提示找不到符号的定义。最后发现一款插件能基本满足我的要求,它的功能虽然比source insight差一些,但支持跳转到定义、代码补全和鼠标悬停显示符号定义这些功能。另外,虽然这款插件和GNU Global一样都要在工程目录下生成文件以供追踪使用,但它生成文件速度也要比GNU Global快。下面是这款插件的基本介绍:
插件名称:Embeded Linux Kernel Dev(简称ELKD)
插件依赖:
软件——universal-ctags
vscode插件——DeviceTree
插件效果(跳转到定义):光标停在符号的位置,然后右击鼠标选择“转到定义”或者按F12,即可查看符号的定义或者直接跳到符号定义的所在文件中。
插件的安装配置
安装universal-ctags
参考链接:安装ctags方法
安装vscode插件DeviceTree
这个在vscode扩展市场里一搜就有, 此处就不赘述。
安装vscode插件Embeded Linux Kernel Dev
这个也是在vsocde扩展市场里一搜就有,此处也不赘述了。
配置
使用vscode打开内核源码目录,打开任意一个.c文件后,ELKD就会开始生成ctag 索引(显示在vscode的左下角,如下图):
过了会儿(具体看电脑性能),ctag 索引就会建立完毕。此时可以在源码目录下看到一个名为.vscode-ctags的文件。
接下来,我们就可以追踪内核代码,查看符号所在文件及其定义了。
更多详细内容,可在vscode中查看ELKD的说明。
VScode 内核源码阅读与修改设置
1、隐藏多余的文件
.vscode/settings.json 修改如下:
{
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
"**/*.o":true,
"**/*.su":true,
"**/*.cmd":true,
"Documentation":true,
/* 屏蔽不用的架构相关的文件 */
"arch/alpha":true,
"arch/arc":true,
"arch/arm64":true,
"arch/avr32":true,
"arch/[b-z]*":true,
"arch/arm/plat*":true,
"arch/arm/mach-[a-h]*":true,
"arch/arm/mach-[n-z]*":true,
"arch/arm/mach-i[n-z]*":true,
"arch/arm/mach-m[e-v]*":true,
"arch/arm/mach-k*":true,
"arch/arm/mach-l*":true,
/* 屏蔽排除不用的配置文件 */
"arch/arm/configs/[a-h]*":true,
"arch/arm/configs/[j-z]*":true,
"arch/arm/configs/imo*":true,
"arch/arm/configs/in*":true,
"arch/arm/configs/io*":true,
"arch/arm/configs/ix*":true,
/* 屏蔽掉不用的DTB文件 */
"arch/arm/boot/dts/[a-h]*":true,
"arch/arm/boot/dts/[k-z]*":true,
"arch/arm/boot/dts/in*":true,
"arch/arm/boot/dts/imx1*":true,
"arch/arm/boot/dts/imx7*":true,
"arch/arm/boot/dts/imx2*":true,
"arch/arm/boot/dts/imx3*":true,
"arch/arm/boot/dts/imx5*":true,
"arch/arm/boot/dts/imx6d*":true,
"arch/arm/boot/dts/imx6q*":true,
"arch/arm/boot/dts/imx6s*":true,
"arch/arm/boot/dts/imx6ull-9x9*":true,
"arch/arm/boot/dts/imx6ull-14x14-ddr*":true,
"arch/arm/boot/dts/*.tmp":true,
},
"files.exclude": {
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true,
"**/*.o":true,
"**/*.su":true,
"**/*.cmd":true,
"Documentation":true,
/* 屏蔽不用的架构相关的文件 */
"arch/alpha":true,
"arch/arc":true,
"arch/arm64":true,
"arch/avr32":true,
"arch/[b-z]*":true,
"arch/arm/plat*":true,
"arch/arm/mach-[a-h]*":true,
"arch/arm/mach-[n-z]*":true,
"arch/arm/mach-i[n-z]*":true,
"arch/arm/mach-m[e-v]*":true,
"arch/arm/mach-k*":true,
"arch/arm/mach-l*":true,
/* 屏蔽排除不用的配置文件 */
"arch/arm/configs/[a-h]*":true,
"arch/arm/configs/[j-z]*":true,
"arch/arm/configs/imo*":true,
"arch/arm/configs/in*":true,
"arch/arm/configs/io*":true,
"arch/arm/configs/ix*":true,
/* 屏蔽掉不用的DTB文件 */
"arch/arm/boot/dts/[a-h]*":true,
"arch/arm/boot/dts/[k-z]*":true,
"arch/arm/boot/dts/in*":true,
"arch/arm/boot/dts/imx1*":true,
"arch/arm/boot/dts/imx7*":true,
"arch/arm/boot/dts/imx2*":true,
"arch/arm/boot/dts/imx3*":true,
"arch/arm/boot/dts/imx5*":true,
"arch/arm/boot/dts/imx6d*":true,
"arch/arm/boot/dts/imx6q*":true,
"arch/arm/boot/dts/imx6s*":true,
"arch/arm/boot/dts/imx6ull-9x9*":true,
"arch/arm/boot/dts/imx6ull-14x14-ddr*":true,
"arch/arm/boot/dts/*.tmp":true,
}
}
Ubuntu16.04安装配置和使用ctags
https://www.cnblogs.com/zjutzz/p/9393397.html
ctags可以用于在vim中的函数定义跳转。在ubuntu16.04下默认提供的ctags是很老很旧的ctags,快要发霉的版本(5.9~svn20110310-11),快扔掉它,安装universal-ctags吧!
安装新鲜的universal-ctags
universal-ctags是什么?A maintained ctags implementation, https://ctags.io,一个负责的ctags实现,在github上开源并且持续更新和维护。
不多说,快点安装吧:
sudo apt install autoconf
cd /tmp
git clone https://github.com/universal-ctags/ctags
cd ctags
./autogen.sh
./configure --prefix=/opt/software/universal-ctags # 我的安装路径。你按自己的情况调整。
make -j8
sudo make install
把ctags可执行文件更新到系统PATH上?No,我选择创建链接的方式:
# 如果你装了emacs-snapshot,那么现在的ctags命令实际上链接到了/usr/bin/ctags-snapshot,要先删除链接文件:
# sudo rm /usr/bin/ctags
# 然后,把新编译安装的universal-ctags链接过来:
sudo ln -s /opt/software/universal-ctags/bin/ctags /usr/bin/ctags