FIQ(快速中断请求)需要很少的功能,例如
claim_fiq
或 enable_fiq
在 asm/fiq.h
中声明并在 fiq.c
中实现。
此代码需要许多其他标头,例如 rwonce.h
或 init.h
.
到目前为止,我尝试构建访问这些函数的内核模块失败了。
内核模块Makefile:
obj-m += gpio_fiq.o
gpio_fiq-objs := fiq.o
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean
和 yocto 食谱:
SUMMARY = "Simple FIQ driver"
DESCRIPTION = ""
LICENSE = "GPL"
LIC_FILES_CHKSUM = ""
SRC_URI = "<uri to the driver>"
SRC_URI[sha256sum] = "<hash>"
SRCREV = "${AUTOREV}"
DEPENDS = "virtual/kernel"
S = "${WORKDIR}/git"
inherit module-base
EXTRA_OEMAKE += "ARCH=arm"
EXTRA_OEMAKE += "KERNEL_DIR=${STAGING_KERNEL_BUILDDIR}"
FILES:${PN} += "/lib/modules/${KERNEL_VERSION}/gpio_fiq.ko"
TOOLCHAIN_TARGET_TASK += "kernel-devsrc"
export KERNEL_SOURCES="${BASE_WORKDIR}/../../workspace/sources/linux-stm32mp"
CFLAGS:append = "-I${KERNEL_SOURCES}/include -I${KERNEL_SOURCES}/arch/${ARCH}/include -I${BASE_WORKDIR}/stm32mp1_rt-ostl-linux-gnueabi/linux-stm32mp/5.15.67.rt49-stm32mp-r1-r0/build/arch/arm/include/generated -I${BASE_WORKDIR}/stm32mp1_rt-ostl-linux-gnueabi/linux-stm32mp/5.15.67.rt49-stm32mp-r1-r0/build/include"
do_configure () {
# Specify any needed configure commands here
:
}
do_compile () {
${CC} ${CFLAGS} ${CFLAGS_MODULE} ${EXTRA_CFLAGS} -c ${KERNEL_SOURCES}/arch/arm/kernel/fiq.c -o fiq.o
oe_runmake
}
do_install () {
install -d ${D}/lib/modules/${KERNEL_VERSION}
install -m 0755 ${B}/gpio_fiq.ko ${D}/lib/modules/${KERNEL_VERSION}/
}
在此之后,我在构建 fiq.o 时遇到许多编译错误,从 rwonce.h 开始。 注意:它们似乎不相关,所以我没有复制它们。只要问我你是否想看几行。
定义
CFLAGS:append
的部分可能是错误的解决方案。
如何构建包含 FIQ 库的内核模块?
注意:这个问题是关于 Yocto 内部的构建过程,如何修复链接和包含错误。这个问题不是关于驱动程序本身如何实现的。