在SoCEDS環境下編譯和更新preloader和uboot程序的方法
前面有介紹preloader在HPS boot過程中的的作用,接下來講述下用戶在SoCEDS環境下改如何編譯preloader和uboot程序!以及如何去更新BOOT SD卡中的preloader和uboot!
從Terasic網站下下載的SD image是在13.1環境下編譯出來的preloader和u-boot,這里會在14.0環境下重新編譯並更新到SD卡中!並在inux系統下更新preloader和u-boot到SD卡中。(嵌入式linux 開發的還是需要一台linux 機器的,不管是虛擬機還是單獨的linux系統機器!特別的在Compile linux kernel的時候)使用Quartus 14.0打開DE1_SoC_ghrd工程,進入Qsys打開HPS器件。相對於13.0主要變化是有了HPS Clocks窗口分為了Input Clocks 和Output Clocks!對比如下圖: ![]()
Quartus 13.0 HPS Clocks窗口
![]()
Quartus 14.0 HPS Clocks窗口
14.0 軟件中Cyclone V 器件MPU 默認時鍾為925Mhz,而13.1版為800M。這里編譯不改變MPU的Clock,所以去掉usedefault MPU clock frequency選項!不用改其他的選項,Clock即為800MHz。重新generate 關閉就好了。使用Quarut編譯編譯完成后會有hps_isw_handoff中的文件會更新,這些文件時連接HPS硬件配置與preloaderr軟 件接口文件。 打開14.0中的command shell把工作目錄轉換到ghrd中,使用make -j8 sof開始編譯硬件。(-j8 選項可以不帶,只是為了多打開幾個線程編譯比較快,但是需要四核的CPU支持)。 使用bsp-editor.exe打開bsp-editor工具,選擇file->New BSP。把Preloader settingdirectory指定為ghrd中的hps_isw_handoff/soc_system_hps_0。點擊OK關閉。再點擊Geneate生成BSP后exit BSP Editor。此時應該可以在GHRD中看到software目錄了。接下來需要注意的是要把GHRD中的makefile用\embedded\examples\hardware\cv_soc_devkit_ghrd的Makefile換掉(13.0下編譯不用替換)。然后使用 make uboot 命令會把preloader 和uboot文件都編譯出來。如果只需要編譯preloader,就使用make prelaoder好了。過程比較漫長,這里會重新編譯一遍硬件工程。 編譯完成后在software\preloader\uboot-socfpga 目錄下會找到u-boot.img文件,在software\preloader\uboot-socfpga\spl下會找到u-boot- spi.bin。為了方便,在GHRD下建立目錄preloader,把這兩個文件復制到該目錄! u-boot-spi.bin為binary格式的文件,按照Altera的要求要按照特定格式添加文件頭!需要使用到的工具為mkpimage工具。切 換工具目錄為剛剛建立的preloader目錄,使用命令mkpimage -o preloader_de1_soc.img u-boot-spl.bin 。此時文件夾下會產生一個preloader_de1_soc.img。 可以用於更新SD image中的preloader。 ——————————————————————————————————————————————————— 在更新之前,還是先說SoCEDS14.0中的一個工具alt-boot-disk-util.exe。在Command Shell 中輸入這個名稱就可以看見使用方法。 #Wirte BOOTLoader and PREloader to disk driver 'E' alt-boot-disk-util -p preloaer -b bootloader -a write -d E 我的SD Card 被識別為I盤,所以我使用的命令為: alt-boot-disk-util -p preloaer_de1_soc.img -b u-boot.img -a write -d I 不給我目前使用都會遇到device open error的錯誤。不知道是環境問題還是其他原因。所以還是在Linux 系統下去更新preloader。 ———————————————————————————————————————————————————— (個人使用的ubuntu linux 機器,其他版本應該類似) 把兩份文件復制到linux 機器上,並掛載啟動SD card。使用fisk -l 查看SD card 對應的節點編號。比如我的SD card 為8G,會看到這樣的一條信息:Disk /dev/sdb: 7948 MB, 7948206080 bytes 。說明這個節點為 /dev/sdb。 linux 工作目錄切換到preloader放置的地方后。分別使用下面兩條命令更新preloader和 uboot。
再使用下sudo sync 命令就可以彈出SDcard 了。 使用這張SD boot,你會發現打印出Clock 相關的信息。這個是14.0中添加的打印。另外注意到時間戳應該與編譯時間對應 ![]() |