使用petalinux-build全编译驱动,效率很低;使用Makefile单独编译驱动,方法如下:
单独创建一个/workspace/drivers目录,其中创建test目录,添加新的Makefile文件,内容如下:
MODNAME:=test
obj-m:=$(MODNAME).o
PWD:=$(shell pwd)
#KERNELDIR=/home/xgxc/workspace/< project name >/build/tmp/work-shared/zynqmp-generic/kernel-build-artifacts
KERNELDIR=/home/xgxc/workspace/< project name >/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.15.36+git999-r0/linux-xlnx-5.15.36+git999
CROSS_COMPILE=/opt/Xilinx/PetaLinux/2022.2/sdk/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-
ARCH=arm64
all:
$(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KERNELDIR) M=$(PWD) modules
cp $(MODNAME).ko ~/workspace/
clean:
@rm -f *.o *~ core .depend .*.cmd *.ko *mod* *symvers
.PHONY: all clean
make命令编译,如下图:
补充说明:
sysroot路径生成:
- 安装petalinux工具完成后,在其安装路径下即/opt/Xilinx/Petalinux/2022.2/,是没有sdk这个文件夹的,需要在一个编译ok的工程下执行下述命令来生成。
- 构建sdk:petalinux-build --sdk,构建时间有些长,如果有报错,多数跟根文件系统有关,例如某某安装包没勾选上之类的。构建完成后,会在<proj_root>/images/linux/下生成文件sdk.sh
- 安装sdk:petalinux-package --sysroot -s -d ,用此命令令将 SDK 提取到指定的目录中,一般放在petalinux安装路径下,方便后续单独模块编译。
备注:arm和arrch64的sdk需要各自生成