gpt4 book ai didi

linux - 在内核源代码树上使用 flycheck/flymake

转载 作者:太空狗 更新时间:2023-10-29 11:37:04 26 4
gpt4 key购买 nike

是否有一种简单/自动化的方法来配置 flycheck 或 flymake在文件上写入时显示错误注释在linux内核源代码树中?假设我正在工作fs/proc/cmdline.c 我想 flycheck 下来两个目录并执行“make fs/proc/cmdline.o”和然后注释结果。假设 ARCH 和 CROSS_COMPILE是外部设置的。

最佳答案

我一直在考虑自己做这件事 - 这就是我所拥有的:

您需要找到内核源代码树的基础,因此默认的 flymake 寻找 Makefile 的处理适得其反。我们将添加我们自己的文件,该文件兼作定位源库和包装普通内核 makefile 的功能:

将文件flymake.mk添加到内核源代码树的底部(根据您自己的交叉编译需要进行配置):

ARCH=mips
CROSS_COMPILE=mips-linux-gnu-

export ARCH
export CROSS_COMPILE

.PHONY: check-syntax
check-syntax:
make -f Makefile $(patsubst %_flymake.o,%.o,$(patsubst %.c,%.o,$(CHK_SOURCES)))

要点是去掉“_flymake.c”,只编译真实文件,构建真实文件,而不仅仅是语法。这避免了我们不小心创建了 file_flymake.o

我们需要说服 flymake 寻找 flymake.mk 并针对它运行 check-syntax - 将这些添加到您的 .emacs 中:

;; Build a custom command-line using flymake.mk
(defun flymake-get-kernel-make-cmdline (source base-dir)
(list "make"
(list "-s"
"-f"
"flymake.mk"
"-C"
base-dir
(concat "CHK_SOURCES=" source)
"SYNTAX_CHECK_MODE=1"
"check-syntax")))

;; Search for flymake.mk to locate kernel tree base
(defun flymake-kernel-make-init ()
(flymake-simple-make-init-impl 'flymake-create-temp-inplace t t "flymake.mk" 'flymake-get-kernel-make-cmdline))

;; Register against .c files under /linux/ or /kernel/
;; Since the list is parsed in order use `push`
(push '(".+/\\(linux\\|kernel\\)/.+\\.c$" flymake-kernel-make-init) flymake-allowed-file-name-masks)

限制:

  • 无法解析头文件
  • 无法解析 flymake 临时文件 source_flymake.c(确保忽略 flymake 标记,直到它运行完保存的文件)。我有一个强制重新运行 flymake 的击键。
  • 外部模块不支持flymake
  • 需要预先注册路径匹配器(参见上面的 push 行)——我对 flymake 的了解还不够多,无法让它一次性覆盖单个缓冲区。<

头文件、临时文件和外部模块的限制可以通过修补内核 Makefile 本身来克服,目前我想避免这种情况。

关于linux - 在内核源代码树上使用 flycheck/flymake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29709967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com