使用GNU EMACS开发Linux内核和uboot

配置GNU EMACS

package-install eglot RET
package-install company RET
package-install dts-mode RET

在GNU EMACS配置文件加入:

(add-hook 'c-mode-hook 'eglot-ensure) ;; 在C模式自动启用eglot
(add-hook 'c-mode-hook 'company-mode) ;; 在C模式自动启用company

编写 .clangd

由于内核开发一般是交叉编译,所以需要要让clangd忽略架构相关的编译器参数:

需要在linux/uboot的源码目录添加 .clangd 文件:

CompileFlags:
  Add: -Wno-unknown-warning-option
  Remove: [-m*, -f*]

生成 compile_commands.json

使用clangd补全代码需要 compile_comamnds.json 文件

linux内核

export ARCH=arch
export CROSS_COMPILE=arch-vendor-elf-
make xxx_defconfig
make compile_commands.json

uboot

export ARCH=arch
export CROSS_COMPILE=arch-vendor-elf-
make xxx_defconfig
make -j`nproc`
./scripts/gen_compile_commands.py

使用GNU EMACS编写linux/uboot 中的C代码

emacs drivers/xxx/xxx.c

emacs-and-linux-kernel.png

emacs-and-uboot.png

使用GNU EMACS编写设备树

emacs arch/xxx/boot/dts/xxx.dts

dts-mode提供了高亮和缩进支持:

emacs-and-devicetree.png

Last updated: 2024-08-29