概述
我们做linux开发都会使用神器sourceinsight,单就我而言,不用它,我就看不懂代码。若是单片机代码,使用source insight也许不会有什么烦恼。但linux kernel开发使用source insight看代码就会发现
1、添加一个source insight工程是多么的痛苦,建立一个工程是非常巨大的,关联所有变量的时间是消耗不起的,短则1 - 2小时,长则4 5个小时。至少对于我来说非常难受,而且有时候抽风一下变量没有关联上,又得重新同步一下。这之间将会花掉非常多的时间。
2、跳转变量定义可能会显示几十个地方,也很难轻易快捷的选中真实定义。
这篇文章就是为了解决上述问题而做的一个记录,希望可以帮助到大家。
最后效果: 过滤kernel或uboot中所有没有被编译到的文件,减少工程文件树。精确添加所有编译所用到的文件
在此膜拜git大佬tonyho,提供的脚本。
使用流程
这里我用sourceinsight4.0,其实版本什么的无所谓啦。
-
去git大佬tonyho仓库中下载PF_Prj_Gen.sh脚本,仓库地址:https://github.com/tonyho/Generate_Kernel_Uboot_Project_forIDE
下载得到PF_Prj_Gen.sh脚本。随便放个地方吧。 -
首先一定要编译一下kernel源码,如果是建立uboot,那么就编译uboot源码。保证编译通过。
-
然后命令行执行PF_Prj_Gen.sh脚本,命令:./PF_Prj_Gen.sh android8.0_imx6/vendor/nxp-opensource/kernel_imx/ ./outfile, 结果如下:
可以看到,我的工程中kernel编译过程中依赖的文件为2496+3440+3441个。若是用别的方式添加,可能会添加多达几十万个文件。
赋予PF_Prj_Gen.sh可执行权限。PF_Prj_Gen.sh脚本参数为PF_Prj_Gen.sh param1 param2, 其中 param1为kernel或者uboot源码主目录,param2为执行PF_Prj_Gen.sh后生成文件所存放的目录,param2必须不存在。 -
进入outfile文件中找到FileList_SourceInsight.txt文件,这个就是我们所要的。
-
接下来建立sourceinsight工程,到添加文件时选择add from list。然后选择FileList_SourceInsight.txt文件。等添加完文件点Close完成文件添加。
6.最后rebuild工程。Project->rebuilt project,然后就可以使用啦。简直清爽!!!
https://www.v2ex.com/t/656319 请教一下,阅读 Linux Kernel 最快的解决方案(@Windows)是啥呢?
https://elixir.bootlin.com/linux/latest/source
1
https://sysprogs.com/VisualKernel/ 这个??
不过我没用过,
读内核 肯定是先看驱动 怎么玩
动态调试学习
https://sysprogs.com/tutorials/wp-content/uploads/2018/02/13-floppy.png
2、
neovim + ctags,然后用 vim 插件 leaderF,堪称搜索神器
3、
这都 0202 年了, 还有那么多人用祖传的 ctags.
SourceInsight 确实是 windows 下可用的*不编译*的最好方案了。
但绝对不是目前最舒服的解决方案了。
我现在是这么看内核代码的( Linux 平台),
1. 编个 bzImage, 然后执行 scripts/gen_compile_commands.py 生成 compile_commands.json 这个文件
2. 安装 clang
3. vscode + clangd 插件
(备注: 不喜欢 clang 或者安装困难可以用 ccls, 关键是要有 compile_commands.json
哪里有问题可以回复我,有时间会帮忙看 )