Altera-SoC QSPI烧写指南

来源:互联网 发布:晨曦软件视频 编辑:程序博客网 时间:2024/05/30 22:45

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开始的位置写到Flash0xa0000的位置上

也可以使用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) 这样启动时就会自动执行初始化脚本了


原创粉丝点击