首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
阿里云
nevin47
V2EX  ›  Linux

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

  •  1
     
  •   nevin47 · 4 天前 · 2898 次点击

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

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

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

    45 条回复    2020-03-27 14:17:30 +08:00
    abutter
        1
    abutter   4 天前
    能问一下你读 Linux 内核代码的目的是啥吗?
    reus
        2
    reus   4 天前
    ctags..
    scriptB0y
        5
    scriptB0y   4 天前   ❤️ 1
    scriptB0y
        6
    scriptB0y   4 天前   ❤️ 4
    我勒个去,为啥有三个人在几秒内一起回这个。。。
    nevin47
        7
    nevin47   4 天前
    @wsy2220 #3
    @abcdabcd987 #4
    @scriptB0y #5

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

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

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

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

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

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


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

    @james122333 #40 ctags 应对相对不那么复杂的工程还好,但是 Linux Kernel 这种套了各种“魔法”的东东,ctags 还是有点无力了
    james122333
        42
    james122333   3 天前 via Android
    还有 lsp
    不过我想自己弄一个
    purplewall
        43
    purplewall   3 天前
    (删代码)
    arch 里面留下你用的那个架构,driver 删除,documentation 删除,script 删除,fs 留下目录文件和随便哪个 fs
    嫌速度慢可以装 grep 搜,
    内核里的间接跳转用函数指针了,似乎不能直接搜。
    oddtux
        44
    oddtux   3 天前
    @nevin47
    文件名的关系, windows 下很麻烦的, 还是 linux 下看吧. 双系统, 虚拟机, WSL2 都行的.
    sublime, vscode, atom 都有 clangd 的扩展, 不一定用 clion
    rockcat
        45
    rockcat   3 天前
    最好是带着特定的目标去看,否则通篇看下来估计要晕菜的。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4014 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:50 · PVG 17:50 · LAX 02:50 · JFK 05:50
    ♥ Do have faith in what you're doing.