Fast Development Kit(FDK)是本人实践中总结的一套开发工具,包括了常用的工具集,已经制作好发布在根文件系统中,目前支持Xilinx zynq,Xilinx zynqmp,NXP t2080,海思 hi3531d等。
参考
固件部署
启动板卡有很多配置项,这些固件如何部署到板卡上,
- zynq平台由于MIO数量不足,有个别项目emmc放在PL EMIO上,对于这类项目的PL的配置文件只能放在qspi nor flash中,正常情况下emmc在MIO上,配置文件在emmc的文件系统中。还有的平台只有一片nand,没有emmc。
- 对于板卡上有多片FPGA的项目,不如zynq/zynqmp+FPGA或者t2080+FPGA的项目,FPGA一般有自己的配置flash,或者动态下载bitstream进去,对于有配置flash的项目,添加FPGA作为一个可选的配置项。
- boot对于zynq/zynqmp,是由xilinx的bootgen工具生成的,包括fsbl+uboot/fsbl+pmu+atf+uboot,对于t2080就是uboot。
- 对于t2080,有独有的rcw和fman需要配置。
- 通用平台可实现一键部署,特殊平台需要联系FAE适配。
固件/平台 | Xilinx zynq(qspi+emmc) | Xilinx zynqmp(qspi+emmc) | NXP t2080(nor) |
---|---|---|---|
app | emmc-ext4(path: /home/root) | emmc-ext4(path: /home/root) | nor flash-ubifs(path: /home/root) |
boot | qspi flash(mtd label: boot) | qspi flash(mtd label: boot) | nor flash(mtd label: boot) |
pl | qspi flash(mtd label: pl) or emmc-ext4(path: /boot) | emmc-ext4(path: /boot) | no |
kernel | emmc-ext4(path: /boot) | emmc-ext4(path: /boot) | nor flash-ubifs(path: /boot) |
dtb | emmc-ext4(path: /boot) | emmc-ext4(path: /boot) | nor flash-ubifs(path: /boot) |
rootfs | emmc-ext4(path: /) | emmc-ext4(path: /) | nor flash-ubifs(path: /) |
FPGA | qspi nor flash/nor flash(mtd label: xxx) | qspi nor flash/nor flash(mtd label: xxx) | qspi nor flash/nor flash(mtd label: xxx) |
fsbl | emmc-ext4(path: /boot) | emmc-ext4(path: /boot) | no |
rcw | no | no | nor flash(mtd label: rcw) |
fman | no | no | nor flash(mtd label: fman) |
接上,
固件/平台 | Xilinx zynq/zynqmp(nand) | Xilinx zynq/zynqmp(nor) | no |
---|---|---|---|
app | nand flash-ubifs(path: /home/root) | nor flash-ubifs(path: /home/root) | no |
boot | nand flash(mtd label: boot) | nor flash(mtd label: boot) | no |
pl | nand flash(mtd label: pl) or nand flash-ubifs(path: /boot) | nor flash(mtd label: pl) or nor flash-ubifs(path: /boot) | no |
kernel | nand flash-ubifs(path: /boot) | nor flash-ubifs(path: /boot) | no |
dtb | nand flash-ubifs(path: /boot) | nor flash-ubifs(path: /boot) | no |
rootfs | nand flash-ubifs(path: /) | nor flash-ubifs(path: /boot) | no |
FPGA | qspi nor flash/nor flash(mtd label: xxx) | qspi nor flash/nor flash(mtd label: xxx) | no |
fsbl | nand flash-ubifs(path: /boot) | nor flash-ubifs(path: /boot) | no |
rcw | no | no | no |
fman | no | no | no |
出厂时的固件首先由下载器部署uboot,然后使用uboot完成其余固件下载,通常配置项的文件名如下,特殊文件名需联系FAE。
固件/平台 | Xilinx zynq | Xilinx zynqmp | NXP t2080 |
---|---|---|---|
app | fdk.elf | fdk.elf | fdk.elf |
boot | boot.bin | boot.bin | u-boot.bin |
pl | download.bit | download.bit | no |
kernel | uImage | Image | uImage |
dtb | system.dtb | system.dtb | system.dtb |
rootfs | rootfs.ext4.gz.uboot | rootfs.ext4.gz.uboot | rootfs.ext4.gz.uboot |
FPGA | *.bin | *.bin | *.bin |
rcw | no | no | PBL.bin |
fman | no | no | fsl_fman_ucode_t2080_r1.1_106_4_18.bin |
zynq/zynqmp(qspi+emmc)平台出厂部署
- 硬件人员测试好硬件,关闭看门狗(若为软件控制,请参考下文)。
- 板卡上有多片FPGA的项目,若存在配置Flash,下载配置文件。
- 使用xilinx下载器,下载zynq/zynqmp
boot.bin
文件,2015以后版本的vivado需要提供fsbl
才能下载。 - 重启,此时应该有u-boot的串口打印,否则联系FAE。
- u-boot起来之后,连续发送
****
可进入u-boot命令行,可以通过u-boot命令关闭看门狗,设置板卡序列号,配置板卡mac地址,板卡序列号,板卡IP地址,tftp server ip地址,网关地址。 - 在服务器上,将fdk编译出的固件放入tftp server目录,将zynq/zynqmp pl的配置文件重命名为
download.bit
,放入相同tftp server目录。 - 对于PL的配置文件在qspi flash中的项目(没有专门说明,则跳过此命令),执行命令
run update_fpga
完成部署。 - 执行命令
run ext4_bringup
,完成板卡部署(部分老版本执行run ext4_kernel_bringup
,新版u-boot也保留了对老命令的支持)。 - 重启。
- 部署应用。
zynq/zynqmp(nand/nor)平台出厂部署
- 硬件人员测试好硬件,关闭看门狗(若为软件控制,请参考下文)。
- 板卡上有多片FPGA的项目,若存在配置Flash,下载配置文件。
- 使用xilinx下载器,下载zynq/zynqmp
boot.bin
文件,2015以后版本的vivado需要提供fsbl
才能下载。 - 重启,此时应该有u-boot的串口打印,否则联系FAE。
- u-boot起来之后,连续发送
****
可进入u-boot命令行,可以通过u-boot命令关闭看门狗,设置板卡序列号,配置板卡mac地址,板卡序列号,板卡IP地址,tftp server ip地址,网关地址。 - 在服务器上,将fdk编译出的固件放入tftp server目录,将zynq/zynqmp pl的配置文件重命名为
download.bit
,放入相同tftp server目录。 - 对于PL的配置文件在nand/nor flash中的项目(没有专门说明,则跳过此命令),执行命令
run update_fpga
完成部署。 - 执行命令
run ext4_bringup
,完成板卡部署(部分老版本执行run ext4_kernel_bringup
,新版u-boot也保留了对老命令的支持)。 - 重启。
- 部署应用。
t2080平台出厂部署
- 硬件人员测试好硬件,关闭看门狗(若为软件控制,请参考下文)。
- 板卡上有多片FPGA的项目,若存在配置Flash,下载配置文件。
- 使用nxp codewarrior tap下载器,下载
u-boot.bin
,PBL.bin
,fsl_fman_ucode_t2080_r1.1_106_4_18.bin
。 - 重启,此时应该有u-boot的串口打印,否则联系开发人员。
- u-boot起来之后,连续发送
****
可进入u-boot命令行,可以通过u-boot命令关闭看门狗,设置板卡序列号,配置板卡mac地址,板卡序列号,板卡ip地址,板卡tftp访问server ip地址,板卡网关。 - 在服务器上开启tftp server服务,将fdk编译出的固件放入tftp server目录。
- 执行命令
run ubifs_bringup
完成板卡部署。 - 重启。
- 部署应用。
固件升级OTA
根据上面的固件部署特点,设计一个配置文件,用于在操作系统下进行固件升级,下面是一个模板,可增加或删减配置文件,升级时,利用上位机将升级包上传到板卡,板卡固件升级程序根据配置文件,执行升级动作。
# zynq_fw.config
name device fs label/path file
boot mtd no boot boot.bin
pl mtd no fpga download.bit
kernel emmc yes /boot uImage
dtb emmc yes /boot system.dtb
v7 mtd no v7bin v7.bin
# zynqmp_fw.config
name device fs label/path file
boot mtd no boot boot.bin
pl emmc yes /boot download.bit
kernel emmc yes /boot Image
dtb emmc yes /boot system.dtb
v7 mtd no v7bin v7.bin
# t2080_fw.config
name device fs label/path file
boot mtd no boot u-boot.bin
kernel emmc yes /boot uImage
dtb emmc yes /boot system.dtb
v7 mtd no v7bin v7.bin
rcw mtd no rcw PBL.bin
fman mtd no fman fsl_fman_ucode_t2080_r1.1_106_4_18.bin
比如,
(1)获取升级文件,比如内核文件为mwm193_uImage,设备树文件system_mwm193.dtb
(2)编写配置文件,mwm193_uImage对应的name为kernel,kernel emmc yes /boot mwm193_uImage
,
system_mwm193.dtb对应name为dtb,dtb emmc yes /boot system_mwm193.dtb
,最终的配置文件为,
name device fs label/path file
kernel emmc yes /boot mwm193_uImage
dtb emmc yes /boot system_mwm193.dtb