技术解析

请教一下,阅读 Linux Kernel 最快的解决方案(@Windows)是啥呢?
0
2021-06-17 18:49:49
idczone

最近在看 Kernel 相关的源码,但是因为 Kernel 中各种神级 arch,花式宏封装,试了好几个工具( VSC,CLion,SI,Vim ...)都觉得不得劲

尤其是遇到一个xxx_arch_xxx接口的时候,全局搜索( ag 、ack 、各种自带全局搜索全试过了)慢的让人崩溃( nvme 盘、Ramdisk 全试过了)

想问问万能的 V 友们,有没有比较优雅的阅读 Kernel 代码的方案可以推荐的……


能问一下你读 Linux 内核代码的目的是啥吗?

ctags..

https://elixir.bootlin.com/linux/v5.6-rc7/source

https://elixir.bootlin.com/linux/latest/source

用 https://elixir.bootlin.com/linux/latest/source 看

我勒个去,为啥有三个人在几秒内一起回这个。。。




多谢三位……这个站点老早就在看了,但是 u1s1,这玩意儿还不如我全局搜来的快 尤其是高频追踪一个入口的 reference 路径的时候

tags 只是能跳转,但是 arch 场景会乱跳,更恼火
全局搜索主要是为了 reference

工作目的嘛

eclipse=>Properities=>C/C++ General => Paths and Symbols => Source Location => /linux filters
把不需要的 arch 目录都放进去就可以

https://sysprogs.com/VisualKernel/ 这个??
不过我没用过,
读内核 肯定是先看驱动 怎么玩
动态调试学习
https://sysprogs.com/tutorials/wp-content/uploads/2018/02/13-floppy.png

qtcreator,很久前看内核源码是用这个,现在 c/c++源码基本也是这个
另外,添加源码的时候,不要把所有**_arch 都加到工程,只加关注的几个

如果是驱动,就关心接口及其规范;如果是某个子模块,那就看设计文档。
如果是单纯看某个 arch 的,你可以把内核的调试信息 dump 初来,把文件路径提取出来,然后 sed 工具处理一下,导入到某个特定的 IDE 里面。

难道不是 sourceinsight?

我用 sourcesight,然后会把 arch 下所有的体系架构的代码都删掉,只保留一个,比如 ARM,有时候还会把驱动目录下全删掉。
我就是只想看内核的核心代码。

arch 看一个就行了,driver 也看几个就行了,其他的都删了。

clion

neovim + ctags,然后用 vim 插件 leaderF,堪称搜索神器

ctags + gtags
控制一下要索引的目录,还算勉强能看。




现在就是类似这样玩的,但是很麻烦的是,我需要关注 4 个 arch 下的差异……所以遇到重载的时候还是很头疼

自己写个 parser

/>Eclipse 的快捷键多用用,ctrl+alt+h

和 IDE 用法无关的,痛点在于全局搜索太慢了……

那看来只能上 ssd 了哈

已经是 M.2 了……我连 RamDisk 都试过了

使用 sourcegraph
https://sourcegraph.com/github.com/torvalds/linux

4 个 IDE 窗口( or 4 个屏)分别删得只剩一个 arch 如何?

和 ramdisk 有啥关系
先熟悉目录结构吧
然后 source insight 就够了 创建工程的时候注意导入源码不要全部塞进去 arch 的选择一个 driver 的选择一部分自己关注的即可

当然是神器 source insight 啊!



现在感觉最快的就是 SI+RamDisk 了,但是 SI 的弊端就是必须要鼠标配合,同时在几个 Arch 中轮番换的时候,如果搜索限定为符号还好,但是有些接口必须要搜到 asm 或者.s 里面,这个时候搜索速度还是很慢了


你需要的不是 ramdisk
是 cache 整个 source
https://stackoverflow.com/questions/23992079/c-read-write-ramdisk-vs-ram

甚换系统 (滑稽

甚至

实际上如果在 Linux 上面,我可以开个 10G 的 Hugepage,然后自己做个驱动就有一个巨型 ramdisk 了,那这个问题基本就迎刃而解了。。。然而 Windows 上面并不支持这么做


这么厉害(滑稽)

SourceInsight

IMDisk Virtual Disk 可以挂很大的 ramdisk 。
另外为什么不试试 vs 的打开文件夹呢 lol

linux 内核细节太多 感觉不如看更简单点的内核 自己照着写一个

这都 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
哪里有问题可以回复我,有时间会帮忙看 )


ctags 还是可以用 毕竟支持语言多
缺点就是能分析的少 看来自写 parser 好

实测远不如 SI

我搞整 Clion 的时候想过,不过 windows 上面我猜测因为 aux/文件重名等问题,生成 compile_commands.json 有点问题,我周末再试试这个办法
ctags 应对相对不那么复杂的工程还好,但是 Linux Kernel 这种套了各种“魔法”的东东,ctags 还是有点无力了

还有 lsp
不过我想自己弄一个

(删代码)
arch 里面留下你用的那个架构,driver 删除,documentation 删除,script 删除,fs 留下目录文件和随便哪个 fs
嫌速度慢可以装 grep 搜,
内核里的间接跳转用函数指针了,似乎不能直接搜。


文件名的关系, windows 下很麻烦的, 还是 linux 下看吧. 双系统, 虚拟机, WSL2 都行的.
sublime, vscode, atom 都有 clangd 的扩展, 不一定用 clion

最好是带着特定的目标去看,否则通篇看下来估计要晕菜的。

vim+global

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服