技术标签: Linux驱动 vscode linux ide
clangd
插件用于代码语义分析、代码补全、跳转等。能做到代码精准跳转、精准自动补全,其根本原理是通过读取工程编译自动生成的compile_commands.json
文件来索引其中包含的源文件和关联的头文件,因此能避免索引非编译的代码造成解析时语义混乱。
compile_commands.json
文件就是由每个源文件的编译参数、路径等信息组成的一个json
文件,clangd
通过这个文件可以准确定位源文件需要引用的头文件从而准确的找到各种宏定义、函数、变量声明的准确值了。
那么问题来了,编译内核的时候也没有生成compile_commands.json
这个文件呀。这个文件在编译cmake
工程的时候可以自动生成,但是内核用的是make。这时候就需要另一个工具bear了,他就是专门用来生成这个的。clangd 阅读环境具体安装配置如下:
打开vscode后,点击左侧图标:
依次输入下列插件名字,安装:
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
高亮文字:shift + alt + z
取消高亮:shift + alt + a
Arm Assembly
Chinese
Hex Editor
One Dark Pro
Clangd--->代码跳转插件
Markdown All in One
Markdown Preview Enhanced
相关插件如下:
前面只是安装clangd插件,它的使用还需要一个clangd程序。
我们以后使用vscode打开C文件时,会提示你安装clangd程序,它会安装最先版本(版本15),但是这个版本有一些Bug,所以我们手工安装版本13。
在Ubuntu中使用浏览器打开https://github.com/clangd/clangd/releases/tag/13.0.0,下载Linux安装包:
把下载到的clangd-linux-13.0.0.zip放到/home/book目录下,执行解压命令:
cd /home/book
unzip clangd-linux-13.0.0.zip
在vscode界面按下图步骤打开setting.json文件:
在setting.json中写入如下内容(我们第1次打开源码目录后,这个文件可能被自动修改,你需要再次修改它):
{
"C_Cpp.default.intelliSenseMode": "linux-gcc-arm",
"C_Cpp.intelliSenseEngine": "Disabled",
"clangd.path": "/home/book/clangd_13.0.0/bin/clangd",
"clangd.arguments": [
"--log=verbose",
],
}
C/C++插件里的intellisense和clangd是冲突的,如果我们没有手工设置setting.json,当使用vscode打开C文件时时会提示禁止intellisense,点击鼠标即可禁止。它的本质也是修改setting.json,它会写入如下文字:
"C_Cpp.intelliSenseEngine": "disabled",
上面文件有Bug,其中的"disabled"应该改为"Disabled"。
在vscode中使用clangd,要实现精确跳转,需要使用bear分析源码生成compile_commands.json。
执行如下命令安装:
sudo apt instll bear
以百问网IMX6ULL_Pro开发板为例。
执行如下命令:
$ git clone https://e.coding.net/codebug8/repo.git
$ mkdir -p 100ask_imx6ull-sdk && cd 100ask_imx6ull-sdk
$ ../repo/repo init -u https://gitee.com/weidongshan/manifests.git -b linux-sdk -m imx6ull/100ask_imx6ull_linux4.9.88_release.xml --no-repo-verify
$ ../repo/repo sync -j4
执行如下命令:
gedit ~/.bashrc
在最后加入如下内容:
export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
重新关闭、打开终端。
执行如下命令:
$ cd /home/book/100ask_imx6ull-sdk/Linux-4.9.88
$ make 100ask_imx6ull_defconfig
$ make zImage -j4
bear命令用来生成compile_commands.json,它的用法如下:
bear make [其他make本身的参数] // bear 3.0之前的版本
bear -- make [其他make本身的参数] // bear 3.0之后的版本
bear --version //查看版本
注意:根据 ubuntu 版本的不同执行sudo apt instll bear
命令生成本执行规则有所不同
它会记录make过程编译文件时用到的命令。
编译内核时,使用如下命令:
// 如果之前曾经编译过内核,要清除掉
make clean
// 然后重新编译
bear make zImage -j 4
编译成功后就会在当前目录下得到文件compile_commands.json,bear 3.0前的版本生成的compile_commands.json需要如下修改:
在gedit中使用快捷键"Ctrl+H"即可如下操作
如果没有看到上述状态,可以如下处理:
在创建索引的过程中,可以使用如下命令查看.cache目录,它会不断变大(最终大小在60M左右):
参考链接:https://blog.csdn.net/thisway_diy/article/details/127426986?spm=1001.2014.3001.5501
https://zhuanlan.zhihu.com/p/558286384?utm_id=0
文章浏览阅读4.9k次。ftp服务器与共享的区别 内容精选换一换ר��������Dedicated Host��DeH������ָ�û��ɶ����ר������������Դ�������Խ��Ʒ���������������ר�������ϣ��������Ը����ԡ���ȫ�ԡ����ܵĸ���Ҫ��ͬʱ������������Ǩ��ҵ����ר������ʱ������ʹ��Ǩ��ǰ�ķ����������..._server u和共享文档的区别
文章浏览阅读9.1w次,点赞67次,收藏226次。深入理解Android之AOP格式更加精美的PDF版请到:http://vdisk.weibo.com/s/z68f8l0xTgCLK 下载一、闲谈AOP大家都知道OOP,即ObjectOriented Programming,面向对象编程。而本文要介绍的是AOP。AOP是Aspect Oriented Programming的缩写,中译文为面向切向编程。OOP和AOP是什么关系呢?首先:l OO_android日志aop函数
文章浏览阅读126次。这个问题在how to become a hacker一文中有很精辟的介绍。按照作者的观点,程序员应该学习的语言是:python,java,c/c++,perl,lisp。对于天朝的程序员来说,还应该加上english。
文章浏览阅读2.5k次。使用http方式访问api server的部署cat dashboard-controller.yaml apiVersion: extensions/v1beta1kind: Deploymentmetadata: labels: k8s-app: kubernetes-dashboard kubernetes.io/cluster-service: "true"_kubernetes v1.5.2适用哪个版本dashboard
文章浏览阅读1w次。主要有一下几步:1.导入需要的jar:freemarker-2.3.19.jar。2.根据需要作出导出模板3.在WebRoot下面建template文件夹,把制作的模板扔到这个文件夹下面4.编写核心代码具体实施细节:制作模板:_java freemark
文章浏览阅读545次。NoSQL数据库笔谈 转载 NoSQL数据库笔谈NoSQL数据库笔谈appdir , ssv , paper颜开 , v0.2 , 2010.2 序 思想篇 CAP 最终一致性 变体 BA..._颜开 道客云
文章浏览阅读137次。PCB是小型玩具或复杂计算机的任何电子设备的组成部分。其复杂的互连组件包括电阻器,二极管,电容器等,使器件能够串联工作。从某种意义上说,它就像是系统的“大脑”。在高可靠性系统中 - 尤其是石油钻井,太空卫星和其他故障可能会产生破坏性后果。这是至关重要的,因此PCB组装过程是完美无缺的,并且组装中常见的错误被注意到。以下是需要注意的一些因素:供应链管理 -为了能够创建高质量的PCB,需要整理的一件事..._组装耳机pcb问题注意事项
文章浏览阅读3.9k次。retrofit2.adapter.rxjava.HttpException: HTTP 504 Unsatisfiable Request (only-if-cached)03-31 10:57:21.473 5267-5267/com.moreunion.zhenghao W/System.err: at retrofit2.adapter.rxjava.OperatorMapResp..._retrofit2.adapter.rxjava2.httpexception: http 504 unsatisfiable request (onl
文章浏览阅读7.5k次。在Power BI报表中,堆积条形图的使用场景还是比较多的,比如下图的销售趋势图表中,既可以看到整体的销售趋势,又可以看到不同品牌(通过颜色来区分)的销售趋势。但是,如果想知道每一周的总体销售额,这张图中就只能手工将三个品牌的值加起来计算了。我们可以通过两种变通的方法,在图表中展示出”总计”功能:第一种方法比较简单:将”堆积条形图”切换成”折线和堆积柱形图”,把销售总金额字段拖到”Li...
文章浏览阅读217次。•用户属性 ( User Properties ) •有效载荷格式指示符和内容类型 ( Payload Format Indicator & Content Type ) •共享订阅 ( Shared Subscriptions ) •原因代码和原因字符串(Reason Codes & Reason Strings) •会话管理:会话到期和消息到期 (Session management: Session Expiry & Message Expiry)•在..._disconnect:notification
文章浏览阅读10w+次,点赞4次,收藏2次。在配置微信公众号时,我们经常先是用测试账户管理进行配置,毕竟是开发模式,往往会出现以下问题:config:fail,invalid url domain。注册微信服务报错,如何解决?解决:你配置的url是否正确?有没有把http去掉呢?正确 URL:hzwxgzh.s2.natapp.cc错误 URL:http://hzwxgzh.s2.natapp.cc需要在js接口安全域名以及功能配置那里进行..._config:fail,invalid url domain
文章浏览阅读15次。PoE技术的工作原理是在供电设备和接收设备之间进行电力传输的协商,以确保安全可靠的供电。同时,PoE技术还具有一定的电力保护功能,可以在电力超载或短路时自动停止供电,保护设备的安全。PoE供电系统的主要供电特性参数包括电压(典型值为48V)、允许最大电流(550mA)、典型工作电流(10到350mA),以及为供电设备提供的功率等级(最大不超过13W)。PoE供电(Power over Ethernet)是一种技术,它允许通过现有的以太网电缆为设备提供电力,同时该电缆也用于数据的传输。