如何在内核模块makefile中使用“shipping”

时间:2013-08-23 06:39:43

标签: makefile linux-kernel

我想通过链接一个构建的目标文件生成一个.ko文件。我读到了“kbuild”系统中提供的但没有足够的细节。

请帮忙。

1 个答案:

答案 0 :(得分:0)

Kbuild系统会根据*.o命令删除所有目标文件(make clean)。除非将其扩展名从.o更改为.o_shipped以保留,否则所有外部对象文件也会被删除。

以下示例Makefile演示了如何使用_shipped链接模块8123_bin.o_shipped中的对象文件8123.ko

ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m  := 8123.o
8123-y := 8123_if.o 8123_pci.o 8123_bin.o

else
# normal makefile
KDIR ?= /lib/modules/`uname -r`/build

default:
        $(MAKE) -C $(KDIR) M=$$PWD

# Module specific targets
genbin:
        echo "X" > 8123_bin.o_shipped
endif

基本上.o_shipped文件与.o文件相同,只是Kbuild系统知道它是一个按原样提供的二进制blob,其内容在内核中不可用/模块源目录。因此,即使清理了源,也会保留*.o_shipped二进制blob。

可以在 Documentation/kbuild/modules.txt

中找到更多详细信息