最近在看 Kernel 相关的源码,但是因为 Kernel 中各种神级 arch,花式宏封装,试了好几个工具( VSC,CLion,SI,Vim ...)都觉得不得劲
尤其是遇到一个xxx_arch_xxx
接口的时候,全局搜索( ag 、ack 、各种自带全局搜索全试过了)慢的让人崩溃( nvme 盘、Ramdisk 全试过了)
想问问万能的 V 友们,有没有比较优雅的阅读 Kernel 代码的方案可以推荐的……
1
abutter 2020-03-26 12:04:49 +08:00
能问一下你读 Linux 内核代码的目的是啥吗?
|
2
reus 2020-03-26 12:08:47 +08:00
ctags..
|
3
wsy2220 2020-03-26 12:15:26 +08:00
|
4
abcdabcd987 2020-03-26 12:15:51 +08:00
|
5
scriptB0y 2020-03-26 12:15:55 +08:00 1
|
6
scriptB0y 2020-03-26 12:16:17 +08:00 4
我勒个去,为啥有三个人在几秒内一起回这个。。。
|
7
nevin47 OP @wsy2220 #3
@abcdabcd987 #4 @scriptB0y #5 多谢三位……这个站点老早就在看了,但是 u1s1,这玩意儿还不如我全局搜来的快 尤其是高频追踪一个入口的 reference 路径的时候 |
10
byaiu 2020-03-26 12:36:57 +08:00
eclipse=>Properities=>C/C++ General => Paths and Symbols => Source Location => /linux filters
把不需要的 arch 目录都放进去就可以 |
11
zhuangzhuang1988 2020-03-26 12:43:34 +08:00
https://sysprogs.com/VisualKernel/ 这个??
不过我没用过, 读内核 肯定是先看驱动 怎么玩 动态调试学习 https://sysprogs.com/tutorials/wp-content/uploads/2018/02/13-floppy.png |
12
xsen 2020-03-26 12:49:35 +08:00
qtcreator,很久前看内核源码是用这个,现在 c/c++源码基本也是这个
另外,添加源码的时候,不要把所有**_arch 都加到工程,只加关注的几个 |
13
abutter 2020-03-26 12:49:50 +08:00
如果是驱动,就关心接口及其规范;如果是某个子模块,那就看设计文档。
如果是单纯看某个 arch 的,你可以把内核的调试信息 dump 初来,把文件路径提取出来,然后 sed 工具处理一下,导入到某个特定的 IDE 里面。 |
14
inwar 2020-03-26 12:58:56 +08:00 via Android
难道不是 sourceinsight?
|
15
Chenamy2017 2020-03-26 13:03:45 +08:00
我用 sourcesight,然后会把 arch 下所有的体系架构的代码都删掉,只保留一个,比如 ARM,有时候还会把驱动目录下全删掉。
我就是只想看内核的核心代码。 |
16
season4675 2020-03-26 13:21:51 +08:00
arch 看一个就行了,driver 也看几个就行了,其他的都删了。
|
17
woai110120130 2020-03-26 13:33:36 +08:00
clion
|
18
Nitroethane 2020-03-26 13:36:52 +08:00 via iPhone 1
neovim + ctags,然后用 vim 插件 leaderF,堪称搜索神器
|
19
nightwitch 2020-03-26 13:47:29 +08:00 1
ctags + gtags
控制一下要索引的目录,还算勉强能看。 |
20
nevin47 OP |
21
james122333 2020-03-26 14:31:42 +08:00 via Android
自己写个 parser
|
24
byaiu 2020-03-26 15:19:03 +08:00
那看来只能上 ssd 了哈
|
26
fuis 2020-03-26 15:26:08 +08:00
|
27
Rheinmetal 2020-03-26 15:31:01 +08:00
4 个 IDE 窗口( or 4 个屏)分别删得只剩一个 arch 如何?
|
28
shujun 2020-03-26 16:51:43 +08:00 via iPhone
和 ramdisk 有啥关系
先熟悉目录结构吧 然后 source insight 就够了 创建工程的时候注意导入源码不要全部塞进去 arch 的选择一个 driver 的选择一部分自己关注的即可 |
29
nmap 2020-03-26 17:10:27 +08:00
当然是神器 source insight 啊!
|
30
nevin47 OP |
31
james122333 2020-03-26 17:17:44 +08:00 via Android
@nevin47
你需要的不是 ramdisk 是 cache 整个 source https://stackoverflow.com/questions/23992079/c-read-write-ramdisk-vs-ram |
32
james122333 2020-03-26 17:18:30 +08:00 via Android
甚换系统 (滑稽
|
33
james122333 2020-03-26 17:18:43 +08:00 via Android
甚至
|
34
nevin47 OP @james122333 #31 实际上如果在 Linux 上面,我可以开个 10G 的 Hugepage,然后自己做个驱动就有一个巨型 ramdisk 了,那这个问题基本就迎刃而解了。。。然而 Windows 上面并不支持这么做
|
35
james122333 2020-03-26 17:29:05 +08:00 via Android
@nevin47
这么厉害(滑稽) |
36
zoumouse 2020-03-26 20:17:33 +08:00
SourceInsight
|
37
mingl0280 2020-03-26 22:41:28 +08:00
@nevin47 IMDisk Virtual Disk 可以挂很大的 ramdisk 。
另外为什么不试试 vs 的打开文件夹呢 lol |
38
Mirana 2020-03-27 00:07:13 +08:00
linux 内核细节太多 感觉不如看更简单点的内核 自己照着写一个
|
39
oddtux 2020-03-27 00:41:40 +08:00
这都 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 哪里有问题可以回复我,有时间会帮忙看 ) |
40
james122333 2020-03-27 08:35:14 +08:00 via Android
|
41
nevin47 OP @mingl0280 #37 实测远不如 SI
@oddtux #39 我搞整 Clion 的时候想过,不过 windows 上面我猜测因为 aux/文件重名等问题,生成 compile_commands.json 有点问题,我周末再试试这个办法 @james122333 #40 ctags 应对相对不那么复杂的工程还好,但是 Linux Kernel 这种套了各种“魔法”的东东,ctags 还是有点无力了 |
42
james122333 2020-03-27 09:22:05 +08:00 via Android
还有 lsp
不过我想自己弄一个 |
43
purplewall 2020-03-27 10:34:30 +08:00
(删代码)
arch 里面留下你用的那个架构,driver 删除,documentation 删除,script 删除,fs 留下目录文件和随便哪个 fs 嫌速度慢可以装 grep 搜, 内核里的间接跳转用函数指针了,似乎不能直接搜。 |
44
oddtux 2020-03-27 12:25:54 +08:00
@nevin47
文件名的关系, windows 下很麻烦的, 还是 linux 下看吧. 双系统, 虚拟机, WSL2 都行的. sublime, vscode, atom 都有 clangd 的扩展, 不一定用 clion |
45
rockcat 2020-03-27 14:17:30 +08:00
最好是带着特定的目标去看,否则通篇看下来估计要晕菜的。
|
46
hyperion1 2020-04-18 18:39:04 +08:00
vim+global
|
47
pmx1990 2022-07-01 11:46:04 +08:00
@woai110120130 打开项目一片红 怎么解决的~
|