作者:賽靈思工程師 stephenm,文章來(lái)源:Xilinx開(kāi)發(fā)者社區(qū)
PetaLinux 是一個(gè)強(qiáng)大的實(shí)用工具,支持設(shè)計(jì)人員輕松創(chuàng)建 Linux 鏡像并在自己的目標(biāo)平臺(tái)上運(yùn)行。
PetaLinux 還能創(chuàng)建帶有模板 Makefile 和 BB 文件的用戶(hù)應(yīng)用和模塊,以便它們能夠編譯并添加到 rootfs 中。
但對(duì)于嘗試開(kāi)發(fā)模塊的用戶(hù)而言,從命令行執(zhí)行創(chuàng)建、構(gòu)建和部署可以加速整個(gè)流程。
在本篇博文中,我們將探討如何在 PetaLinux 流程外創(chuàng)建模塊,然后編譯并部署在 ZCU104 評(píng)估板上。當(dāng)用戶(hù)確認(rèn)模塊正常工作后,即可將其添加到 rootfs 中。
構(gòu)建 Linux 鏡像:
petalinux-create -t project -s <path to bsp>.bspcd
PetaLinux 使用 TMP 目錄來(lái)存放階段文件。通常后續(xù)會(huì)移除這些文件以便節(jié)省磁盤(pán)空間。
但此處我們不希望移除這些文件,因此需要在 build/conf/local.conf 中注釋掉以下行。
首先,運(yùn)行 petalinux-build 命令,然后使用 Ctrl + c 將其停止。這樣即可為您創(chuàng)建這些文件。
請(qǐng)注意 TMP 目錄的位置。
可通過(guò)如下方式找到此位置:
petalinux-config
TMPDIR Location
Yocto Settings

現(xiàn)在,構(gòu)建 PetaLinux 工程:
petalinux-buildcd images/linuxpetalinux-package --boot --fpga system.bit --u-boot
創(chuàng)建模塊:
我有一個(gè)很簡(jiǎn)單的模塊可用于演示,如下所示
static int __init hello_start(void){printk(KERN_INFO "Loading hello module...\n");printk(KERN_INFO "Hello world\n");return 0;}static void __exit hello_end(void){printk(KERN_INFO "Goodbye!! \n");}module_init(hello_start);module_exit(hello_end);
?創(chuàng)建 Makefile:
export ARCH:=arm64export CROSS_COMPILE:=aarch64-linux-gnu-CC=$(CROSS_COMPILE)gccobj-m = test_module.oKVERSION = /tmp/xilinx-zcu104-2020.1-2020.10.23-10.47.08-32S/work/zcu104_zynqmp-xilinx-linux/linux-xlnx/5.4+gitAUTOINC+22b71b4162-r0/linux-zcu104_zynqmp-standard-build/PWD := $(shell pwd)all:make -C $(KVERSION) M=$(PWD) modulesclean:make -C $(KVERSION) M=$(PWD) clean
請(qǐng)注意 TMPDIR,即通過(guò)上述方法所獲取的位置。
構(gòu)建模塊:
然后,只需調(diào)用要構(gòu)建的 makefile 即可:
在硬件上執(zhí)行測(cè)試:
用戶(hù)可以啟動(dòng) Linux 并使用 SSH 將此模塊復(fù)制到 rootfs,或者可將其復(fù)制到 SD 卡上。
我這里使用了 insmod 和 rmmod 來(lái)添加然后移除該模塊。
