https://blog.csdn.net/weixin_40604731/article/details/100690049
注意:以上參考限制了vivado的版本,應該為2018.1以上。
前言
實際項目中,往往存在PL端設計不斷迭代的過程。
一種是可以不斷生成新的fsbl合成BOOT.BIN文件,拷貝到SD卡,但涉及到每次需要生成BOOT.BIN插拔SD卡,比較難受。
有么有可以直接download到linux,通過linux的驅動層去更新PL端呢?
xilinx提供了FPGA manager(流程暫未驗證)。
linux為啥可以更新PL,主要是有驅動管理:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841847/Solution+ZynqMP+PL+Programming
流程
以下只是驗證PL的更新,不包含設備樹的DTO操作方法,詳情見參考鏈接。
1.有一個正常啟動的linux工程及硬件平台,不贅述。
2.在內核配置中啟用相關項:
(1)啟用部件
(2)配置連續DMA
2.在device tree中添加:
devcfg: devcfg@f8007000 { compatible = "xlnx,zynq-devcfg-1.0"; interrupt-parent = <&&intc>; interrupts = <0 8 4>; reg = <0xf8007000 0x100>; clocks = <&&clkc 12>, <&&clkc 15>, <&&clkc 16>, <&&clkc 17>, <&&clkc 18>; clock-names = "ref_clk", "fclk0", "fclk1", "fclk2", "fclk3"; syscon = <&&slcr>; }; fpga_full: fpga-full { compatible = "fpga-region"; fpga-mgr = <&&devcfg>; #address-cells = <2>; #size-cells = <2>; };
3.使用tcl腳本自動創建bit.bin文件:我的工程在dev,tcl腳本放在dev目錄即可:
############################################################## ####(1)使用tcl腳本自動生成ZYNQ PS端配置PL端所需的bit.bin文件 #### #### ############################################################## #設置bit文件名字 set bit_file_name radar_top #設置當前目錄 set dev_dir [pwd] cd ${dev_dir}/project_1.runs/impl_1 #在bit文件路徑下創建bif文件,w表示如果文件存在則清空文件內容,否則創建新的空文件 set f01 [open "Full_Bitstream.bif" w] #把字符串寫入文件中 puts $f01 "all:\n{\n${bit_file_name}.bit\n}" #關掉文件 close $f01 #執行bootgen創建bin文件bootgen命令不是tcl命令,使用exec在命令行中執行,-w on為如果bin文件存在則強制覆蓋 exec bootgen -w on -image Full_Bitstream.bif -arch zynq -process_bitstream bin #打印顯示完成 puts "Bin file create finish!"
4.把bin文件放到Linux下並執行:
注意:如果使用了PS和PL端通信的DMA,在PL升級后linux下的對應驅動需要重新掛載。
以上。