最近在看 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 ![]() |
![]() | 6 scriptB0y 2020-03-26 12:16:17 +08:00 ![]() 我勒个去,为啥有三个人在几秒内一起回个。。。 |
![]() | 7 nevin47 OP @wsy2220 #3 @abcdabcd987 #4 @scriptB0y #5 多谢三位……这个站点老早就在看了,但是 u1s1,这玩意儿还不如我全局搜来的快 ![]() |
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 ![]() neovim + ctags,然后用 vim 插件 leaderF,堪称搜索神器 |
19 nightwitch 2020-03-26 13:47:29 +08:00 ![]() 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 dlyxy 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 打开项目一片红 怎么解决的~ |