我正在尝试在使用premake5生成Makefile的大型项目的一部分中构建内核模块。但是,没有关于使用premake构建内核模块的文档。这在预制中是否可行?如果可能的话,我想在项目中使用Premake保持一致。
提前感谢您的任何见解。
到目前为止我的尝试:
project "mymod"
kind "ConsoleApp"
language "C"
location "./"
files { "**.h", "**.c" }
if _ACTION == "clean" then
os.rmdir("obj")
end
buildcommands {
"make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules %{cfg.buildcfg}"
}
rebuildcommands {
"make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules %{cfg.buildcfg} rebuild"
}
cleancommands {
"make clean %{cfg.buildcfg}"
}
buildoptions{ "-Wno-unused-value", "-Wno-sign-compare",
"-Wno-unused-parameter", "-Wno-unused-function",
"-Wno-missing-field-initializers"}
configuration {"Release"}
defines { "NDEBUG" }
flags { "Optimize", "ExtraWarnings", "FatalWarnings", "FloatStrict", "EnableSSE2" }
以下是用于构建内核模块的工作Makefile的示例。当然,它很短,可能看起来不值得使用Premake,但这是因为它缺少列表中的几个目标文件,目前必须手动输入。
# Note that multiple KBUILD_EXTRA_SYMBOLS Entries are space-separated
KBUILD_EXTRA_SYMBOLS=$(ETHERCAT_TOPDIR)/Module.symvers \
$(HOME_DIR)/shmdrv/Module.symvers \
# the output kernel module
obj-m := corert.o
# the object files used
corert-objs := ctsrt_main.o globals.o ProcessMain.o \
CtsSharedData.o ProcessData.o \
ProcessSdo.o ProcessSimulate.o \
FsmWrite.o
ETHERCAT_TOPDIR = /usr/local/src/ethercat
EXTRA_CFLAGS = -I$(ETHERCAT_TOPDIR)/include -ffast-math -mhard-float
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) \
modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean