uboot 这种古老的项目,源码里面各个无关平台的代码太讨厌,查函数引用的时候跳出来一堆。
本身只关心 rk3568 相关的,找个函数引用,硬是出来一堆让你选。
网上各种找,发现 make 编译的时候可以生成 compile_commands.json,
即导出运行过的编译指令,包括文件名、编译指令、宏定义等等,
导出 compile_commands.json 后, 再结合 vscode 的 clangd 插件,阅读代码要方便得多。
如何生成 compile_commands.json?
1). 安装 bear (或 compiledb )
2). 改 uboot 的 Makefile,定位到 spl/u-boot-spl: 处,然后
将 $(Q)$(MAKE) V=1 obj=spl -f $(srctree)/scripts/Makefile.spl all
改为
$(Q) bear $(MAKE) V=1 obj=spl -f $(srctree)/scripts/Makefile.spl all
即:将 make **** 改为 bear make ***
这样编译后即可生成 compile_commands.json,相当于把无关的 .c 源码文件过滤掉了。
只留下会编译到的.c 文件的清单。
注:上面的修改,仅导出编译 spl 过程的 compile_commands,非整个 uboot 的。
如果在vscode中引用 compile_commands.json?
因为使用的是 WSL 虚拟机编译,所以 compile_commands.json 里面的路径全是 wsl 路径。
所以 vscode 先安装 remote-wsl,以便以类似 ssh 的方式远程打开wsl环境的目录。
remote-wsl 插件装好后,然后再:
1). 在 vscode 中安装 clangd 插件
2). 在 wsl 中安装 clangd
其它:
CLion 这个收费IDE,据说可以直接根据 compile_commands.json 来创建工程。
非常期待 vscode 也能在打开目录时有这样的过滤功能,那以后读代码就更加清爽了。