我想通过链接一个构建的目标文件生成一个.ko文件。我读到了“kbuild”系统中提供的但没有足够的细节。
请帮忙。
答案 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。