0

我正在尝试在一个较大的项目中构建一个内核模块,该项目使用 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
4

0 回答 0