• 【环境配置笔记】基于clang15搭建liunx内核代码阅读环境


    环境:

    1. Toolchain(yocto导出)
    2. Linux5-15,arm64
    3. VS code
    4. clangd15.0.3

    1. VScode配置

    在VS code / VS code server中配置以下插件:

    • Clangd
    • C/C++
    • C/C++ Extension Pack
    • C/C++ Snippets
    • Code Runner
    • Code Spell Checker
    • compareit
    • DeviceTree
    • Tabnine AI Autocomplete
    • Bracket Pair Colorization Toggler
    • Rainbow Highlighter

    2. clangd配置

    2.1 下载clangd

    从clangd的github(https://github.com/clangd/clangd/releases)下载最新的clangd工具:

    image-20221116113013594

    然后将其解压到/home/xxx目录下:

    unzip clangd-linux-15.0.3.zip
    
    • 1

    2.2 配置clangd

    根据下图的步骤打开json文件,我这里演示的是远程服务器端的配置,如果你本身是linux环境,则需要先点击【用户】,再按第四步来。

    image-20221116113419779

    打开setting.json文件后,填入以下内容:

    这里的"Disabled"

    {
        "C_Cpp.default.intelliSenseMode": "linux-gcc-arm64",
        "C_Cpp.intelliSenseEngine": "Disabled",
        "clangd.path": "/home/xxxx/clangd_15.0.3/bin/clangd",
        "clangd.arguments": [
            "--log=verbose",
        ],
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    C/C++插件里的intellisense和clangd是冲突的,如果我们没有手工设置setting.json,当使用vscode打开C文件时时会提示禁止intellisense,不要点击!!!!!因此点击了会有Bug,其中的"Disabled"会被改成"disabled"。

    2.3 安装bear

    在vscode中使用clangd,要实现精确跳转,需要使用bear分析源码生成compile_commands.json。

    执行如下命令安装:

    sudo apt instll bear
    
    • 1

    3.使用bear编译内核【必须先编译】

    由于我们使用的是Yocto导出的Toolchain,在激活工具链后需要先使用unset LDFLAGS,然后使用以下命令:

    bear -l /usr/lib/x86_64-linux-gnu/bear/libear.so make -j12
    
    !!!!!!!!!For ubuntu22.04!!!!!!!!!
    bear --library  /usr/lib/x86_64-linux-gnu/bear/libexec.so -- make -j8
    
    • 1
    • 2
    • 3
    • 4

    由于此时我们使用的是Yocto SDK,里面不包含bear的库,因为我们需要手动指定库的位置。

    编译完会生成compile_commands.json。

    3.索引Linux源码

    在索引源码之前,还需要再Linux文件夹中新建.clangd文件,并填入以下内容:

    CompileFlags:
        Remove:
        [
            -mabi=lp64,
        ]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    clangd索引失败的原因大部分都是CompileFlags的问题,你可以在索引失败的clangd日志中查看出错的原因,并添加需要移除的CompileFlags。

    现在用VS code打开Linux文件夹,打开任意c文件触发索引,你会看到下面的索引进度:

    image-20221116122847067

    4.跳转测试

    这里以main.c进行测试,找到start_kernel函数:

    image-20221116123504718

    Ctrl+鼠标点击setup_arch函数,可以看到能够正确跳转到arm64架构下的setup_arch函数。

    image-20221116123950283

    参考:在Ubuntu中搭建嵌入式Linux开发环境

  • 相关阅读:
    浏览器从输入URL到展示的流程
    ServiceStack.Redis的源码分析(连接与连接池)
    git多人运动产生冲突该怎么解决
    java计算机毕业设计网上汽车售票系统源码+数据库+lw文档+系统+部署
    美国服务器能不能部署个人站或论坛站?
    C/S架构学习之基于TCP的本地通信(客户机)
    Hive的介绍及部署搭建
    猿创征文|零基础python学习之旅(简短又漫长)
    【C++内存管理侯捷】---学习笔记(下)malloc/free,loki allocator,other issue
    R语言、Meta分析、MATLAB在生态环境领域里的应用
  • 原文地址:https://blog.csdn.net/qq_38131812/article/details/127883517