V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
nevin47
V2EX  ›  Linux

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

  •  1
     
  •   nevin47 · Mar 26, 2020 · 10514 views
    This topic created in 2236 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
        1
    abutter  
       Mar 26, 2020
    能问一下你读 Linux 内核代码的目的是啥吗?
    reus
        2
    reus  
       Mar 26, 2020
    ctags..
    scriptB0y
        5
    scriptB0y  
       Mar 26, 2020   ❤️ 1
    scriptB0y
        6
    scriptB0y  
       Mar 26, 2020   ❤️ 4
    我勒个去,为啥有三个人在几秒内一起回这个。。。
    nevin47
        7
    nevin47  
    OP
       Mar 26, 2020
    @wsy2220 #3
    @abcdabcd987 #4
    @scriptB0y #5

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

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

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

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

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

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


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

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