Petalinux驱动开发以及代码框架解读
一、引言
Petalinux是Xilinx提供的Linux开发工具链。通过Petalinux,可以很轻松的完成Xilinx SOC的Linux系统定制,驱动和应用开发。本文主要从驱动开发角度,基于petalinux2022.2版本,介绍如何同通过Petalinux开发自己的驱动。
二、步骤
安装Petalinux以及使用Vivado创建SOC工程,这些基础步骤,网上由太多教程,这里就不累述了。这里假设大家已经安装好了Vivado,Petalinux,并已经通过Vivado工程导出了硬件描述文件(.xsa文件)。
2.1 创建PetaLinux工程
petalinux-create -t project --name zynq_gpio_demo --template zynq
cd zynq_gpio_demo
2.2 配置硬件描述文件
- 将Vivado生成的
system.xsa文件复制到工程目录。 - 导入硬件配置:
petalinux-config --get-hw-description=.
2.3 设备树配置
在project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi中添加GPIO节点:
/ {
custom_gpios {
compatible = "customGpioExport";
status = "okay";
gpios = <&gpio0 54 GPIO_ACTIVE_HIGH>, // EMIO GPIO0
<&gpio0 55 GPIO_ACTIVE_HIGH>; // EMIO GPIO1
};
};
- 关键属性:
compatible:驱动匹配标识符。gpios:指定GPIO控制器、引脚号和激活电平。
2.4 建立驱动框架
petalinux为用户开发自己的驱动建立了完整易用的驱动框架,可以通过petalinux-create -t modules命令创建,如下所示:
petalinux-create -t modules --name customGpioExport --enable
通过上述指令,就会在{petalinux project}/project-spec/meta-user/recipes-modules/目录下生成custom_gpio_export 目录,在该目录下,自动生成了custom_gpio_export .bb文件以及files文件加,在files文件夹下,成了驱动框架文件customGpioExport .c以及Makefile,以下是目录结构图:
{petalinux project}/
└── project-spec/
└── meta-user/
└── recipes-modules/
└── customGpioExport/
├── customGpioExport.bb
└── files/
├── customGpioExport.c
└── Makefile
2.5 编辑 .bb 文件
打开{petalinux project}/project-spec/meta-user/recipes-modules/customGpioExport下的customGpioExport.bb文件并修改内容如下:
# 配方基础配置
SUMMARY = "Custom GPIO Export Driver"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
# 定义模块名称和源码路径
MODULE_NAME = "customGpioExport"
SRC_URI = " \
file://${MODULE_NAME}.c \
file://Makefile \
"
# 指定源码目录(默认为当前目录)
S = "${WORKDIR}"
# 继承内核模块构建类
inherit module
# 定义模块编译参数
EXTRA_OEMAKE:append = " \
KERNEL_SRC=${STAGING_KERNEL_DIR} \
KERNEL_VERSION=${KERNEL_VERSION} \
"
# 安装目标(将模块复制到 rootfs 的 /lib/modules/ 目录)
do_install() {
install -d ${D}/lib/modules/${KERNEL_VERSION}/extra
install -m 0644 ${B}/${MODULE_NAME}.ko ${D}/lib/modules/${KERNEL_VERSION}/extra/
}
# 定义模块依赖(可选)
# DEPENDS = "virtual/kernel"
关键配置解释
-
SRC_URI
指定驱动源码路径。此处假设源码文件为customGpioExport.c和Makefile,位于files子目录。
若源码文件名为customGpioExport.c,需同步修改:SRC_URI = " \ file://customGpioExport.c \ file://Makefile \ " -
inherit module
继承内核模块构建类,自动处理模块编译和签名(如需 Secure Boot)。 -
EXTRA_OEMAKE
向make命令传递额外参数:KERNEL_SRC:指向内核源码目录。KERNEL_VERSION:内核版本号(自动填充)。
-
do_install
定义模块安装逻辑,将生成的.ko文件复制到 rootfs 的/lib/modules/$(uname -r)/extra/目录。
2.6 编写驱动文件
根据自己需要以customGpioExport.c为基础框架,增加自己模块需要的功能实现即可,不在这里累述。
2.7 编写 Makefile
确保 files/Makefile 内容如下(适配内核模块编译):
obj-m := custom_gpio_export.o
KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean

最低0.47元/天 解锁文章
1390

被折叠的 条评论
为什么被折叠?



