Altera-SoC QSPI燒寫指南

原文鏈接:http://blog.csdn.net/lzy272942518/article/details/50923102

一.preloader、Uboot生成以及燒寫

1) 在SoC EDS中輸入bsp-editor打開bsp編輯器

2) File->new bsp新建bsppreloader settings directory設置至Project Directory\hps_isw_handoff\*_qsys_hps_0文件夾

3) 勾選BOOT_FROM_QSPI,並設置QSPI_NEXT_BOOT_IMAGE地址(默認0x60000,即需要將u-boot放置在0x60000起始的存儲空間裏

4) 在sofware\spl_bsp文件夾下make,生成preloader鏡像preloader-mkimage.binmake ubootuboot-socfpga文件夾下生成u-boot.img

5) 在EDS下使用usb-blasterpreladeru-boot燒寫進qspi flash

a) Quatus_hps –c USB-Blaster –o PV -a 0 preloader-mkimage.bin

說明:-a即爲寫入的地址,quartus_hps工具要求寫入文件名爲.bin擴展

b) Quatus_hps –c USB-Blaster –o PV –a 0x60000 u-boot.img.bin

說明:將uboot.img重命名爲u-boot.img.bin否則可能會出錯

二. Linux kernel編譯及燒寫。 如果需要編譯內核驅動或者增添裁剪內核,需要重新編譯內核。

首先虛擬機聯網。然後獲取3.9版本內核,在虛擬機中解壓。

1) linux環境下安裝所需要的開發包,以CentOS爲例

Yum groupinstall “development”

Yum install ncurses-devel ncurses

2) 配置環境變量

Export ARCH=arm

Export CROSS_COMPILE=arm-linux-gnueabihf-

3) 到解壓後的kernal目錄,執行make socfpga_defconfig,目的是將內核按默認的socfpga參數進行配置。然後執行Make menuconfig 進入內核配置

4) Make

編譯完成後,可以在arch/arm/boot 下找到編譯好的zImage

關於kermal device tree的燒寫qspi flash地址,可以在板子的boot階段,通過printenv查看。

boot階段跟新Flash zimage步驟如下(提前打開tftpd32工具,將zImage放入basic directory

Sf probe #加載flash模塊

Tftp 0x1000000 zImage #zImage下載到內存16M位置

Sf update 0x1000000 0xa0000 0x390000 #將內存16M開始的位置寫到Flash 0xa0000的位置上

也可以使用usb-blaster,在EDS command下,用jtag燒寫到qspi flash,比較慢。

Quatus_hps –c USB-Blaster –o PV –a 0xa0000 zImage.bin


三. 修改文件系統。可使用yocto工具生成根文件系統(參考RocketBoards.orgUsing Yocto Source Package的敘述)。提供altera-gsrd-image-socfpga_cyclone5,altera-image-minimal-socfpga的壓縮包。

製作jffs2文件系統
mkfs.jffs2 –r ./fs –o fs_minimal.jffs2 –e 0x10000 –pad=0x7000000 –n

-r 文件系統源目錄

-o 輸出文件名

-e 擦除塊大小,參照芯片手冊,一般爲64kB

--pad 目標文件大小

boot階段跟新Flash文件系統步驟如下

Sf probe #加載flash模塊

Tftp 0x1000000 xxx.jffs2 #jffs2鏡像下載到內存16M位置

Sf update 0x1000000 0x1000000 0x7000000 #將內存16M開始的位置寫到Flash 16M的位置上

#Flash 大小爲128M,後面112M爲文件系統,在device tree中有定義

對於生成好的jffs2文件,也可以使用usb-blaster,在EDS command下直接燒寫到qspi(特別慢,不提倡用)。先重命名爲jffs2.bin,然後

Quatus_hps –c USB-Blaster –o PV –a 0x1000000 fs.jffs2.bin

四.Device tree修改、編譯及燒寫。

1) 編譯devicetree

Quartus工程編譯好之後,有個device tree文件夾,有dts文件,即爲device tree文件。修改其中的part0,part1。其中part1爲文件系統的flash地址,定義爲0x1000000,長度0x7000000.

part0: partition@0x0 {

label = "Flash 0 Raw Data"; /* appended from boardinfo */

reg = < 0x00000000 0x01000000 >; /* appended from boardinfo */

}; //end partition@0 (part0)

part1: partition@0x1000000 {

label = "Flash 1 Root Filesystem"; /* appended from boardinfo */

reg = < 0x01000000 0x07000000 >; /* appended from boardinfo */

}; //end partition@800000 (part1)

WindowsEDS下,Linux使用終端命令(首先安裝dtc工具)

Dtc –I dts –O dtb -o devicetree.dtb dtsfile.dts

(-I –O分別爲輸入輸出)

使用usb-blaster,在EDS command下直接燒寫到qspi

Quatus_hps –c USB-Blaster –o PV –a 0x50000 devicetree.dtb

五. 生成rbf文件以配置FPGA

Fileàconvert programming file

選擇RawBinaryFile Mode選擇Passive Parallel x8或者Passive Parallel x16.

選擇SOF Data項,Add File ,瀏覽至編譯好的sof文件。然後Generate


Linux下配置FPGA

a) 編程 dd if=/home/root/output_file.rbf of=/dev/fpga0 bs=1M。可以將此命令寫入腳本中。

b) 查看fpga狀態: cat /sys/class/fpga/fpga0/status

Linux啓動以後要確保啓動f-h,h-s橋使能,配置fpga

Linux下配置FPGA

dd if=/home/soc_system.rbf of=/dev/fpga0 bs=1M

cat /sys/class/fpga/fpga0/status

echo "enable bridges"

使能f-h,h-f

echo 1 > /sys/class/fpga-bridge/fpga2hps/enable

echo 1 > /sys/class/fpga-bridge/hps2fpga/enable

echo 1 > /sys/class/fpga-bridge/lwhps2fpga/enable

加載內核模塊

Insmod xxx.ko 將內核模塊加載到系統

Mknod /dev/xxx c 245 0 /dev/下創建設備文件節點。C 表示爲字符設備;後面兩項分別爲主設備號和次設備號,可以在模塊源碼中查到。一般提供的內核模塊(i2c)在加載時會自動創建設備節點

六.啓動腳本

一般Linux原始啓動腳本在/etc/init.d中,並在rcX.d下建立符號鏈接。以start_work.sh爲例可以通過以下方式加入啓動腳本。

a) 將start_work.sh複製到/etc/init.d中。在/etc/init.d文件夾下可以看到所有的啓動腳本,以及rcS腳本。rcS腳本中定義了啓動腳本的runlevelS,即將會依次執行/etc/rcS.d下的腳本。

b) 在rcS.d下建立指向start_work.sh的符號鏈接。/etc/rsS.d下的文件命名都爲S+數字+名稱的方式,文件名錶明瞭該腳本會在何時加載執行。初始化分爲00-99個階段,我們可以把我們的腳本放在第九十幾的階段上。例如:

Ln -s /etc/init.d/startwork.sh /etc/rcS.d/S91startwork.sh

c) 這樣啓動時就會自動執行初始化腳本了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章