如何在Petalinux项目中添加hwspinlock Linux驱动模块?
为Petalinux项目添加Xilinx HWSpinlock驱动模块的两种方法
你的需求翻译
我希望为我的Petalinux项目添加一个类似stm32_hwspinlock的hwspinlock驱动,用来控制FPGA上的Xilinx互斥锁。我已经通过ioremap实现了一个简单的互斥锁控制模块,但不清楚该如何将hwspinlock驱动作为模块添加到项目中——是需要克隆内核源码并把驱动文件放到/root/drivers/hwspinlock目录?还是有像petalinux-create -t module...这样更简便的方法?
方法一:用Petalinux外部模块工具快速创建(推荐)
这是最简便的方式,无需修改内核源码树,直接创建独立的外部模块:
- 在Petalinux项目根目录执行:
该命令会在petalinux-create -t module --name xilinx_hwspinlock --enableproject-spec/meta-user/recipes-modules/xilinx_hwspinlock路径下生成模块模板文件。 - 将你基于hwspinlock框架编写的驱动代码(参考stm32_hwspinlock逻辑适配Xilinx硬件)替换模板中的
xilinx_hwspinlock.c。 - 修改同目录下的
xilinx_hwspinlock.bb文件,添加必要编译依赖,例如:
同时确保编译时能正确找到内核hwspinlock框架的头文件路径。DEPENDS += "linux-hwspinlock" - 执行编译:
编译完成后,驱动ko文件会生成在# 单独编译该模块 petalinux-build -c xilinx_hwspinlock # 或全量编译项目 petalinux-buildimages/linux/modules目录下。
方法二:整合到内核源码树(适合需要纳入内核子系统的场景)
如果需要将驱动整合到内核hwspinlock子系统中,按以下步骤操作:
- 找到Petalinux项目的内核源码路径,可通过
petalinux-config -c kernel进入配置界面后,从底部提示获取,一般为build/tmp/work-shared/<你的平台>/kernel-source。 - 将你的驱动文件
xilinx_hwspinlock.c复制到内核源码的drivers/hwspinlock目录下。 - 修改
drivers/hwspinlock/Kconfig,添加配置项:config HWSPINLOCK_XILINX tristate "Xilinx HW Spinlock driver" depends on ARCH_XILINX || COMPILE_TEST help This driver supports the Xilinx hardware spinlock controller present on some FPGA designs. - 修改
drivers/hwspinlock/Makefile,添加编译规则:obj-$(CONFIG_HWSPINLOCK_XILINX) += xilinx_hwspinlock.o - 进入内核配置界面启用该驱动:
依次找到petalinux-config -c kernelDevice Drivers -> Hardware Spinlock drivers,将Xilinx HW Spinlock driver设置为模块(选M)或内置(选Y)。 - 重新编译内核及模块:
petalinux-build
注意事项
- 无论哪种方法,都需要根据你的FPGA硬件寄存器定义,调整驱动代码中的锁数量、寄存器地址、锁的置位/清除逻辑,确保适配Xilinx互斥锁硬件。
- 驱动代码需正确调用内核hwspinlock框架的API(如
hwspin_lock_register、hwspin_unlock等),才能与内核子系统协同工作。
内容的提问来源于stack exchange,提问作者mjkpolo
相关产品推荐
相关产品推荐

