You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译dump_stack.ko时Makefile报错‘commands commence before first target’如何解决

内核模块编译报错修复方案

问题现象

编译调用dump_stack()的内核模块时失败,执行make命令触发如下错误:

kesl@kesl-1080Ti:~/Downloads/trace$ make
Makefile:6: *** commands commence before first target.  Stop.

已排查一整天,当前环境为Ubuntu 20.04、Kernel 5.18.0-rc6、make 3.81,切换make版本(从4.2.1降至3.81)问题依旧,用同格式Makefile编译hello.c也报相同错误。

相关代码

dump_stack.c

#include <linux/module.h>                                                                                                                                                            
#include <linux/kernel.h>

static int myinit(void)
{
        pr_info("dump_stack myinit\n");
        dump_stack();
        pr_info("dump_stack after\n");
        return 0;
}

static void myexit(void)
{
        pr_info("panic myexit\n");
}

module_init(myinit)
module_exit(myexit)
MODULE_LICENSE("GPL");

原问题Makefile

obj-m+= dump_stack.o

        KERNEL_DIR = /lib/modules/$(shell uname -r)/build                                                                                                                            
        PWD = $(shell pwd)

        all:
        $(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules

        clean:
        $(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) clean

修复方案

错误根源是Makefile的格式违反了语法规则:

  • 变量定义、目标声明的行开头不能有空格
  • 目标下的命令行必须用Tab键缩进(不能用空格替代)

修正后的Makefile如下:

obj-m+= dump_stack.o

KERNEL_DIR = /lib/modules/$(shell uname -r)/build
PWD = $(shell pwd)

all:
	$(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules

clean:
	$(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) clean

核心修正点:

  • 移除obj-m、KERNEL_DIR、PWD、all:、clean:所有行开头的空格
  • 将all、clean目标下的命令行开头替换为Tab键(注意是单个Tab,不是多个空格)

重新执行make命令即可正常生成dump_stack.ko内核模块。

内容的提问来源于stack exchange,提问作者DongSeok Son

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:42:22