Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
nevin47
V2EX  ›  Linux

请教一下,阅读 Linux Kernel 最快的解决方案(@Windows)是啥呢?

  •  1
     
  •   nevin47 · Mar 26, 2020 · 11120 views
    This topic created in 2420 days ago, the information mentioned may be changed or developed.

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

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

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

    49 replies  •  2022-07-14 10:13:32 +08:00
    abutter
    abutter
    Mar 26, 2020
    1
    能问一下你读 Linux 内核代码的目的是啥吗?
    reus
    reus
    Mar 26, 2020
    2
    ctags..
    scriptB0y
    scriptB0y
    Mar 26, 2020❤️4
    6
    我勒个去,为啥有三个人在几秒内一起回这个。。。
    nevin47
    nevin47
    OP
    Mar 26, 2020
    7
    @wsy2220 #3
    @abcdabcd987 #4
    @scriptB0y #5

    多谢三位……这个站点老早就在看了,但是 u1s1,这玩意儿还不如我全局搜来的快 尤其是高频追踪一个入口的 reference 路径的时候
    nevin47
    nevin47
    OP
    Mar 26, 2020
    8
    @reus #2 tags 只是能跳转,但是 arch 场景会乱跳,更恼火

    全局搜索主要是为了 reference
    nevin47
    nevin47
    OP
    Mar 26, 2020
    9
    @abutter #1 工作目的嘛
    byaiu
    byaiu
    Mar 26, 2020
    10
    eclipse=>Properities=>C/C++ General => Paths and Symbols => Source Location => /linux filters
    把不需要的 arch 目录都放进去就可以
    zhuangzhuang1988
    zhuangzhuang1988
    Mar 26, 2020
    11
    https://sysprogs.com/VisualKernel/ 这个??
    不过我没用过,
    读内核 肯定是先看驱动 怎么玩
    动态调试学习
    https://sysprogs.com/tutorials/wp-content/uploads/2018/02/13-floppy.png
    xsen
    xsen
    Mar 26, 2020
    12
    qtcreator,很久前看内核源码是用这个,现在 c/c++源码基本也是这个
    另外,添加源码的时候,不要把所有**_arch 都加到工程,只加关注的几个
    abutter
    abutter
    Mar 26, 2020
    13
    如果是驱动,就关心接口及其规范;如果是某个子模块,那就看设计文档。

    如果是单纯看某个 arch 的,你可以把内核的调试信息 dump 初来,把文件路径提取出来,然后 sed 工具处理一下,导入到某个特定的 IDE 里面。
    inwar
    inwar
    Mar 26, 2020 via Android
    14
    难道不是 sourceinsight?
    Chenamy2017
    Chenamy2017
    Mar 26, 2020
    15
    我用 sourcesight,然后会把 arch 下所有的体系架构的代码都删掉,只保留一个,比如 ARM,有时候还会把驱动目录下全删掉。
    我就是只想看内核的核心代码。
    season4675
    season4675
    Mar 26, 2020
    16
    arch 看一个就行了,driver 也看几个就行了,其他的都删了。
    woai110120130
    woai110120130
    Mar 26, 2020
    17
    clion
    Nitroethane
    Nitroethane
    Mar 26, 2020 via iPhone❤️1
    18
    neovim + ctags,然后用 vim 插件 leaderF,堪称搜索神器
    nightwitch
    nightwitch
    Mar 26, 2020❤️1
    19
    ctags + gtags
    控制一下要索引的目录,还算勉强能看。
    nevin47
    nevin47
    OP
    Mar 26, 2020
    20
    @season4675 #16
    @byaiu #10
    @Chenamy2017 #15

    现在就是类似这样玩的,但是很麻烦的是,我需要关注 4 个 arch 下的差异……所以遇到重载的时候还是很头疼
    james122333
    james122333
    Mar 26, 2020 via Android
    21
    自己写个 parser
    byaiu
    byaiu
    Mar 26, 2020
    22
    @nevin47 #20
    Eclipse 的快捷键多用用,ctrl+alt+h
    nevin47
    nevin47
    OP
    Mar 26, 2020
    23
    @byaiu #22 和 IDE 用法无关的,痛点在于全局搜索太慢了……
    byaiu
    byaiu
    Mar 26, 2020
    24
    那看来只能上 ssd 了哈
    nevin47
    nevin47
    OP
    Mar 26, 2020
    25
    @byaiu #24 已经是 M.2 了……我连 RamDisk 都试过了
    fuis
    fuis
    Mar 26, 2020
    26
    Rheinmetal
    Rheinmetal
    Mar 26, 2020
    27
    4 个 IDE 窗口( or 4 个屏)分别删得只剩一个 arch 如何?
    shujun
    shujun
    Mar 26, 2020 via iPhone
    28
    和 ramdisk 有啥关系

    先熟悉目录结构吧
    然后 source insight 就够了 创建工程的时候注意导入源码不要全部塞进去 arch 的选择一个 driver 的选择一部分自己关注的即可
    nmap
    nmap
    Mar 26, 2020
    29
    当然是神器 source insight 啊!
    nevin47
    nevin47
    OP
    Mar 26, 2020
    30
    @shujun #28
    @nmap #29

    现在感觉最快的就是 SI+RamDisk 了,但是 SI 的弊端就是必须要鼠标配合,同时在几个 Arch 中轮番换的时候,如果搜索限定为符号还好,但是有些接口必须要搜到 asm 或者.s 里面,这个时候搜索速度还是很慢了
    james122333
    james122333
    Mar 26, 2020 via Android
    31
    james122333
    james122333
    Mar 26, 2020 via Android
    32
    甚换系统 (滑稽
    james122333
    james122333
    Mar 26, 2020 via Android
    33
    甚至
    nevin47
    nevin47
    OP
    Mar 26, 2020
    34
    @james122333 #31 实际上如果在 Linux 上面,我可以开个 10G 的 Hugepage,然后自己做个驱动就有一个巨型 ramdisk 了,那这个问题基本就迎刃而解了。。。然而 Windows 上面并不支持这么做
    james122333
    james122333
    Mar 26, 2020 via Android
    35
    @nevin47
    这么厉害(滑稽)
    dlyxy
    dlyxy
    Mar 26, 2020
    36
    SourceInsight
    mingl0280
    mingl0280
    Mar 26, 2020
    37
    @nevin47 IMDisk Virtual Disk 可以挂很大的 ramdisk 。
    另外为什么不试试 vs 的打开文件夹呢 lol
    Mirana
    Mirana
    Mar 27, 2020
    38
    linux 内核细节太多 感觉不如看更简单点的内核 自己照着写一个
    oddtux
    oddtux
    Mar 27, 2020
    39
    这都 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
    哪里有问题可以回复我,有时间会帮忙看 )
    james122333
    james122333
    Mar 27, 2020 via Android
    40
    @oddtux
    ctags 还是可以用 毕竟支持语言多
    缺点就是能分析的少 看来自写 parser 好
    nevin47
    nevin47
    OP
    Mar 27, 2020
    41
    @mingl0280 #37 实测远不如 SI


    @oddtux #39 我搞整 Clion 的时候想过,不过 windows 上面我猜测因为 aux/文件重名等问题,生成 compile_commands.json 有点问题,我周末再试试这个办法

    @james122333 #40 ctags 应对相对不那么复杂的工程还好,但是 Linux Kernel 这种套了各种“魔法”的东东,ctags 还是有点无力了
    james122333
    james122333
    Mar 27, 2020 via Android
    42
    还有 lsp
    不过我想自己弄一个
    purplewall
    purplewall
    Mar 27, 2020
    43
    (删代码)
    arch 里面留下你用的那个架构,driver 删除,documentation 删除,script 删除,fs 留下目录文件和随便哪个 fs
    嫌速度慢可以装 grep 搜,
    内核里的间接跳转用函数指针了,似乎不能直接搜。
    oddtux
    oddtux
    Mar 27, 2020
    44
    @nevin47
    文件名的关系, windows 下很麻烦的, 还是 linux 下看吧. 双系统, 虚拟机, WSL2 都行的.
    sublime, vscode, atom 都有 clangd 的扩展, 不一定用 clion
    rockcat
    rockcat
    Mar 27, 2020
    45
    最好是带着特定的目标去看,否则通篇看下来估计要晕菜的。
    hyperion1
    hyperion1
    Apr 18, 2020
    46
    vim+global
    pmx1990
    pmx1990
    Jul 1, 2022
    47
    @woai110120130 打开项目一片红 怎么解决的~
    nevin47
    nevin47
    OP
    Jul 4, 2022
    48
    @pmx1990 #47 你要自己编译一份 compile_command_json(好像这个名字?)
    pmx1990
    pmx1990
    Jul 14, 2022
    49
    @nevin47 我 Mac 下直接 clion 导入,然后 makefile 报错,注释掉几个过不去的,基本上能看了,反正不能编译,不飘红就好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   951 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 19:51 · PVG 03:51 · LAX 11:51 · JFK 14:51
    ♥ Do have faith in what you're doing.