Menu Close

petalinux 下 驱动程序中添加多个文件方法

Xilinx petalinux 2018.3 下,怎样在驱动程序中添加多个文件。

 

如何在petalinux 2018.3 下, 我们使用petalinux-create命令,只能产生一个文件,但在实际的项目中, 我们需要在驱动程序中添加多个文件。

在petalinux 工程下, 用户可以添加自己定制的驱动程序,方法是:

petalinux-create -t modules –name  [用户的驱动程序名字]

举例:创建自建的驱动程序,名字为key-irq-drv

petalinux-create -t modules –name key-irq-drv

注意在创建自建驱动程序时:名字需要使用‘-’ 而不是‘_’, 当然, 如果用户创建的名字中没有使用’-‘, 也是可以的。 如果使用‘_’, 系统编译的时候会报错,停止编译。

当用户创建了自己的驱动程序后, 在petalinux 的工程目录下会看到相应的驱动程序目录:

%title插图%num

打开key-irq-drv目录:

%title插图%num

key-irq-drv.bb 文件中会包括相应的编译文件,这些文件之后会被petalinux-build 编译。

打开key-irq-drv.bb文件:

SUMMARY = “Recipe for build an external key-irq-drv Linux kernel module”
SECTION = “PETALINUX/modules”
LICENSE = “GPLv2”
LIC_FILES_CHKSUM = “file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e”

inherit module

SRC_URI = “file://Makefile \
file://key-irq-drv.c \
file://COPYING \

S = “${WORKDIR}”

# The inherit of module.bbclass will automatically name module packages with
# “kernel-module-” prefix as required by the oe-core build environment.

 

其中,我们会发现 中间有 一行为key-irq-drv.c, 这个文件名字和工程目录的名字相同,

假设我们所写的驱动程序是:

key-irq.c

key-msg.c

key-msg.h

所以,我们需要修改key-irq-drv.bb 文件,(添加我们的驱动文件):

SUMMARY = “Recipe for build an external key-irq-drv Linux kernel module”
SECTION = “PETALINUX/modules”
LICENSE = “GPLv2”
LIC_FILES_CHKSUM = “file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e”

inherit module

SRC_URI = “file://Makefile \
file://key-irq.c \
file://key-msg.c \
file://key-msg.h \
file://COPYING \

S = “${WORKDIR}”

# The inherit of module.bbclass will automatically name module packages with
# “kernel-module-” prefix as required by the oe-core build environment.

保存这个文件就可以了。

接下来,我们要添加自建的驱动程序文件了,

进入files 目录:

%title插图%num

删除之前的key-irq-drv.c 文件,添加我们的自建驱动程序文件:

key-irq.c

key-msg.c

key-msg.h

同时我们需要修改当前目录下的Makefile 文件, 打开当前的Makefile文件:

obj-m := key-irq-drv.o

SRC := $(shell pwd)

all:
$(MAKE) -C $(KERNEL_SRC) M=$(SRC)

modules_install:
$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install

clean:
rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
rm -f Module.markers Module.symvers modules.order
rm -rf .tmp_versions Modules.symvers

其中key-irq-drv.o 文件是最终输出的文件,经过petalinux-build 编译后,会在工程目录下的/build/tmp/sysroots-components/plnx_zynq7/key-irq-drv/lib/modules/4.14.0-xilinx-v2018.3/extra$

生成key-irq-drv.ko文件。

修改Makefile文件后:

obj-m := key-irq-drv.o
key-irq-drv-y := key-irq.o key-msg.o

SRC := $(shell pwd)

all:
$(MAKE) -C $(KERNEL_SRC) M=$(SRC)

modules_install:
$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install

clean:
rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
rm -f Module.markers Module.symvers modules.order
rm -rf .tmp_versions Modules.symvers

 

我们需要添加 key-irq-drv-y := key-irq.o key-msg.o ,蓝色部分和最终输出的驱动名字相同,后面是用户添加的key-irq.c key-msg.c 所生成的.o 文件

保存Makefile 文件。

接下来我们需要修改 rootfs 配置,执行:

petalinux-config -c rootfs

%title插图%num

%title插图%num

选择save 后, 退出。

接下来,就可以正常编译了:

petalinux-build

输出最终的文件,把相应的文件copy 到sd 卡上:

petalinux-package –boot –fsbl ./images/linux/zynq_fsbl.elf –fpga –u-boot –force

 

到此, 驱动程序添加完成了。

Posted in IC, Linux开发与应用, SoC, 文章

发表评论

相关链接