天天看點

國産之路:複旦微調試筆記3:環境配置

燒寫步驟:

  Xilinx:基本流程為邏輯在vivado中配置開發生成hdf,不帶操作作業系統時直接用sdk線上或者參考之前固化篇,帶作業系統時用petalinux配制,生成BOOT.bin(含fsbl,自己生成的bit檔案和uboot)和image.ub(預設檔案系統,kernel和裝置樹的打包)(如果用jffs2檔案系統需要設定将檔案系統單獨出來,再生成一個rootfs.jffs2)

  複旦微:基本流程為procise下生成hdf或者導入vivado的.bd和.xci檔案,裸機正常用IAR軟體,linux的話需要導出FSBL和裝置樹檔案。裝置樹檔案放置在linux編譯環境中,build all,生成uboot和image.ub,将之前導出的FSBL檔案,邏輯的bit檔案,和剛剛生成的uboot檔案image.ub打包成一個BOOT.bin燒錄

開發環境

  和進口的晶片比,開發環境的變化

   需要用到三個軟體,vivado ,procise,IAR 。

PL:

  (1)Procise:

   生成裸跑程式的bsp ,可以在export hardware 時選擇多個裸跑模闆,主要包括fsbl ,以及生成psoc 裝置樹的頂層,有基礎的memory和lwip測試。

  (2)IAR :

   用來編譯和調試裸跑應用程式的,因為 ps 是全新設計,外設位址和寄存器定義都 不同,ps 的裸跑bsp 完全重新設計的,是以完全不相容xilinx的SDK。

   IAR+Procise的部分功能相當于xlinx的sdk

   (3)Vivado:

   主要和之前xilinx的一樣,還是邏輯工程師配置pl側的工具,可以生成bit,也可以用vivado 調試,但必須在獨立模式下。

   from vivado 流程是為了友善移植現有的ps 工程,不用在procise 裡重新配置

PS:

   Petalinux :主要用來生成pl.dtsi,利用vivado 裡的hdf 生成pl.dtsi 檔案。 會更新 device-tree/hwplatform/pl.dtsi 檔案内容,它會根據 hdf 檔案裡的 PL 部分設計變化, 一般需要有寄存器通路的 IP 才需要生成 pl.dtsi,即需指定–hdf 參數。

  Petalinux 生成的檔案系統可以在psoc 上使用,目前已經測試過2018.2 和2018.3 的

  檔案系統可以在psoc 上運作。

   Linux 應用程式可以通過網口利用SDK 調試,這個調試也是相容的

文檔;

   DS101 和DS102 兩個文檔相當于xlinx的ug585。

   UG102 是差異文檔。

   UG201 是硬體設計指導

   UG202 是軟體設計指導開發文檔,

記憶體大小

   Rootfs :buildroot 預設最小配置為9.8MB,如果要放到qspi flash 的話,可以jffs2 或者ubi 檔案系統。

   Image.ub:4.9MB,包括zImage 和devicetree。

   Boot.bin:732KB,加環境變量空間大約1MB

   Bit: 不壓縮的話大小13MB。

  總計大小:10MB+4.9MB+1MB+13MB=29MB,建議32MB

調試序列槽

  PS測共有兩個調試序列槽,差別于xilinx的petalinux中簡單直接的圖形界面配置而言,FMQL更需要靈活去單獨配置,一共有三個階段的序列槽列印

Fsbl階段:

  為了在 FSBL 中使用 UART1 來列印輸出。

  第一步, 在 Procise 工程中勾選 UART1,使用的 MIO/EMIO 則根據電路闆設計選擇。

國産之路:複旦微調試筆記3:環境配置

  第二步, 在demo導出樣例中, 重新導出 FSBL 和 DeviceTree。

國産之路:複旦微調試筆記3:環境配置

第三步, 打開 FSBL 的工程,在 fmsh_ps_parameters.h 中可以确認 FSBL 選擇的列印序列槽為 UART1。

國産之路:複旦微調試筆記3:環境配置

  注 1: UART0 的基位址為 0xE0004000, UART1 的基位址為 0xE0023000。

  注 2:如果 Procise 中同時勾選了 UART0 和 UART1, FSBL 預設的列印序列槽将是 0xE0004000。使用者如果仍需使用 UART1 就要手動修改為 0xE0023000。

  确認無誤後,編譯 FSBL 得到 FSBL.out。

u-boot 階段

  為了在 u-boot 中使用 UART1 來列印輸出。

  第一步, 将 1.1 節導出的 DeviceTree 檔案夾複制到 LinuxSDK 所在的 Linux 作業系統中。

  第二步, 如下圖所示,修改” FMQL-Linux-SDK/device-tree/hw-platform/ fmsh-psoc.dtsi”檔案。将其中的“stdout-path = “serial0:115200n8”;”改為“stdout-path = “serial1:115200n8”;”

國産之路:複旦微調試筆記3:環境配置

  第三步, 重新編譯 DTB(裝置樹)和 u-boot。 最後驗證,如下圖所示, u-boot 可以正常列印且顯示其使用的序列槽為“0xE0023000”,即 UART1。

國産之路:複旦微調試筆記3:環境配置

kernel 階段

  為了在 kernel 中使用 UART1 來輸出列印。

  第一步,先執行make fmsh_fmql_defconfig 修改 kernel 的配置, 參照下圖,将“kernel hacking”中的 debug uart 更改為 UART1。

然後重新編譯 kernel,打包進 image.ub 中。

國産之路:複旦微調試筆記3:環境配置

  注:當選擇 UART1 後,下面的實體和虛拟位址應分别更新為 0xe0023000 和 0xf1023000, 如果未自動更新,需要手動修改。 如有疑問,可以檢視.config 檔案确認此項修改是否生效,如下圖所示。

國産之路:複旦微調試筆記3:環境配置

  第二步, 啟動開發闆,進入 u-boot 後停下, 依次輸入(實際上沒配置也直接過了,如果沒自動配置好的時候在手動配):

setenv bootargs console=ttyPS0,115200 noinitrd earlyprintk root=/dev/mmcblk0p2 rootwait9
rw
mmc rescan && fatload mmc 0:1 0x2000000 /image.ub
bootm 0x2000000
           

  之後就可以看到正常的啟動列印了(uboot的調試序列槽會預設uart0為控制台序列槽,如果實際是則無需更改,若實際為uart1,但是隻修改 kernel 中的配置使 debug uart 為 UART1, 未在 u-boot 的 bootargs 中配置“console=ttyPS1”,将導緻啟動的後半段 log 通過 ttyPS0(UART0) 列印出來,因為它被作為預設的控制台序列槽。 而如果 Procise 沒有勾選 UART0,則啟動流程将 pending)

starting kernel 後的 early printk 列印也會相應正常

繼續閱讀