【问题标题】:Makefile for kernel kecho command issue内核 kecho 命令问题的 Makefile
【发布时间】:2015-02-16 09:55:09
【问题描述】:

这是一个用于编译内核模块的makefile。

# Makefile – makefile of our first driver
#  
# if KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq (${KERNELRELEASE},)

 obj-m = first-driver.o

# Otherwise we were called directly from the command line.
# Invoke the kernel build system.
else
KERNEL_SOURCE := /lib/modules/2.6.32-504.8.1.el6.x86_64/build
PWD := $(shell pwd)
default: 
        ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules
        @echo kernel first-driver is ready
        @$(kecho) 'Kernel: $@ is ready' 

clean:
        ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
endif

.PHONY : install remove

install :
        sudo insmod first-driver.ko

remove :
        sudo rmmod first-driver

在这里,我根据内核 makefile 文档使用了 echo 和 kecho,但它给出了以下错误:

make -C /lib/modules/2.6.32-504.8.1.el6.x86_64/build SUBDIRS=/home/betatest/Device-Driver-Test modules
make[1]: Entering directory '/usr/src/kernels/2.6.32-504.8.1.el6.x86_64'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory '/usr/src/kernels/2.6.32-504.8.1.el6.x86_64'
kernel first-driver is ready
make: Kernel: default is ready: Command not found
Makefile:16: recipe for target 'default' failed
make: *** [default] Error 127

我正在使用 GNU make 版本 4.1 和 gcc 版本 4.4.7 我哪里出错了。谢谢.....

【问题讨论】:

  • 您可以在@echo kernel first-driver is ready 行之后执行echo $(kecho) 并发布输出吗?
  • kecho 在 makefile.include 文件中定义为 kecho = echo
  • 我的解决方案是否解决了您的问题,或者您在上面的 makefile 中包含了 makefile.include 文件?
  • makefile.include 位于内核头文件中,编译内核模块时默认包含该文件。

标签: linux makefile kernel


【解决方案1】:

kecho 变量分配给什么?在@$(kecho) 'Kernel: $@ is ready' 行中kecho 的值为null,因此make 通常只考虑@$(kecho) 'Kernel: $@ is ready'

您是否忘记将 kecho 分配给文件开头的某些内容?喜欢

kecho='echo'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多