MyFPGA Forum

 找回密码
 注册
搜索
查看: 2367|回复: 0

【转载】altera SOC学习总结

[复制链接]
发表于 2020-6-22 17:57:20 | 显示全部楼层 |阅读模式
本帖最后由 wyzhou 于 2020-6-23 09:29 编辑

版权声明:本文为CSDN博主「cgy0614」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cgy0614/article/details/53835889

SOC平台学习总结

最近通过对altera提供的CycloneV开发板进行熟悉掌握以及对相应的开发板的开发文档以及在线社区https://rocketboards.org/的文档进行阅读,逐步掌握了altera系列SOC启动流程及相应开发方法,现总结如下:

一.开发环境搭建
开发环境包括一下软件:

Quartus Prime16.1(逻辑工程 Qsys)

the Altera SoC Embedded Design Suite(EDS) (一些嵌入式开发工具)

the ARM DS-5 AE(仿真调试,主要初期调试板子系统)

交叉编译工具链:arm-linux-gnueabihf-

DiskImager(SD卡烧写镜像)

开发环境分为windows开发(altera系列的软件)和linux开发环境(主要是工具链以及一些源代码编译)

开发环境搭建中小提示:

1.    Quartus license 需要安装虚拟网卡然后设置为altera提供的license对应的MAC地址

2.    EDS安装一般是和quartus16.1安装在一个路径下的,在~/embedded有windows下的一些嵌入式工具以及开发板需要安装的相关驱动,example,以及底层API的源码和文档

3.    ARM DS5不提供license,需要自己用邮箱申请一个一月的授权


 
二.BOOT流程
针对CycloneV和ArriaV由于OCRAM空间小放不下uboot,所以需要Preloader

Arria 10则不需要Preloader这一环节

上手soc可以从该网址入手

https://rocketboards.org/foswiki ... LinuxBeginnerSGuide

BootROM存在于复位异常地址,通过reset触发,

SSBL是第二boot阶段,需要BSP(板级支持),这一阶段决定启动位置(SD QSPI NAND)需要配置bsp,具体根据网址对应步骤,最后生成preloader-mkpimage.bin

然后是uboot的配置及编译,主要关注uboot源代码目录下的include/configs/socfpga_cyclone5.h 相关的硬件配置,编译生成uboot.Img 可以把uboot阶段要执行的命令写成脚本uboot.scr

接着是linux所需要的dts,根据开发功能需求在altera提供的dts进行修改,然后使用dtc进行编译生成dtb二进制文件

然后进行kernel的配置编译,根据需求配置相应的驱动,功能支持,altera有提供每个开发板的默认配置make ARCH=arm socfpga_defconfig,编译生成zImage(注意使用正确的版本及长期支持版本ltsi)

然后是文件系统的配置编译,根据需求定制自己的工具,使用buildroot(提示:注意配置外置工具链以及prefix,以及要有root权限或者有fakeroot命令)生成rootfs.tar

SD卡生成及更新:

       主要使用altera提供的make_sdimage.py脚本生成sd bin然后通过diskImager烧写进SD卡
  1. sudo ~/make_sdimage.py  \

  2.       -f \

  3.        -Ppreloader-mkpimage.bin,u-boot-cyclone5.img,num=3,format=raw,

  4. size=10M,type=A2  \

  5. -P rootfs/*,num=2,format=ext3,size=1500M  \(根据实际大小改变)

  6. -P zImage,u-boot.scr,soc_system.rbf,socfpga.dtb,num=1,format=vfat,size=500M  \

  7. -s 2G \(根据实际大小改变)

  8. -n sd_card_image_cyclone5.bin
复制代码
Qspi flash以及NANDflash的启动主要是在bsp配置选择,ubootconfig.h配置选择,制作适合flash大小的文件系统,当然可以直接使用altera提供的文件系统,

然后可以通过三种方式烧写SPI flash,eds(比较慢);linux console 需要有mtd工具(altera提供的文件系统没有);uboot console,然后uboot配置启动环境变量,启动选择跳线选择SPI启动

三.编译开发
本节主要总结一下进行交叉编译开发遇到的问题,主要是安装ztools和编译EMR4.0应用程序(basic system的应用)

首先说安装ztools,因为是交叉编译,所以./configure需要额外选项,指定host,指定交叉编译工具,指定安装目录,即./configure--host=arm-linux --cross-prefix=$CROSS_COMPILE --prefix=/home/chuguangyang/opt

但是会遇到xml不支持,查找原因是因为tsana依赖于libxml库,所以必须指定libxml库的路径,所以要先交叉编译libxml,

因此去下载libxml2的源代码进行编译,同样先看./configure –h 查看需要哪些配置选项,同样host 交叉编译安装目录不可少,但是这样之后make又有了提示错误,提示lzma.h找不到,这是应该缺少lzma库的支持,后来查看./configure生成的输出check 发现libxml是需要有压缩算法支持的,可以选择zlib或者lzma,尝试下载安装lzma,但好像没有找到特定的源代码,因此放弃,选择使用zlib,下载zlib-1.2.8.tar.gz,

先配置,根据提示./configure --host=arm-linux-gnueabihf--prefix=/home/chuguangyang/opt,交叉编译时在—host后进行识别的

make make instsll,所需要的zlib库就被安装到/home/chuguangyang/opt目录下

然后回去编译libxml,配置时需要禁止lzma,指定zlib的路径,因此配置选项如下
  1. ./configure--host=arm-linux-gnueabihf CROSS_COMPILE=arm-linux-gnueabihf-CC=arm-linux-gnueabihf-gcc --prefix=/home/chuguangyang/opt--with-zlib=/home/chuguangyang/opt CFLAGS=-I/home/chuguangyang/opt/includeLDFLAGS=-L/home/chuguangyang/opt/lib --without-lzma --without-python
复制代码
是根据实际结果添加的CFLAGS以及LDFLAGS,如果这样不可行,还可以直接修改对应的Makefile修改zlib的加载路径。

好了现在又回归到ztools的编译,先注释掉需要xml的部分进行编译,在链接库时,提示找不到之前分别编译的lib.1.so,这种情况应该是A B->C(C 依赖A和B)C->D(D依赖C)然后编译D时没有找到A B的库,因此需要在编译D时添加A B的路径,当然可以通过-rpath-link指定,但是不太熟悉,使用的是笨办法直接在Makefile里添加LDFLAGS,然后编译成功

接着把xml禁止打开,同样修改Makefile修改libxml2的加载路径LDFLAGS +=-L/home/chuguangyang/opt/lib -lxml2,然后编译成功,将安装路径下的bin和lib拷贝到目标板上,放到对应的路径,使用ldconfig使得lib生效,然后就可以正常使用ztools了。

下面是在SOC上进行的性能测试

1.    在SOC上运行ztools选用一个138MB的ts节目,使用catts | tsana -err 监测运行时间10s,换算码率应该是109.6Mb/s,cpu占用情况catts占用20%,tsana占用50%(按照双核一起计算的)

2.    运行EMR4.0应用程序,正常跑裸壳

四.angstorm系统
系统自启动:系统不同于之前用的linux,采用systemd来管理一些服务的启动,systemd作为新一代linux的启动方式要用来替代之前的init.d的启动,具体介绍见https://linux.cn/article-5457-1.html,因此添加自启动主要是在/etc/systemd/system/multi-user.target.wants路径下添加自己的启动脚本*.Service,altera提供的例子altera-gsrd.service用来启动位于/usr/bin下面的altera-gsrd-init.sh(其中包括了上电检查ip地址并在液晶屏上进行显示)

网络管理主要是使用开源的connman来进行管理,服务的自启动也是有systemd来管理,然后connman的配置文件位于/var/lib/connman/*/settings,*代表网络设备名字,以下是该文件内容:
  1. [ethernet_0007ed260d8f_cable]

  2. Name=Wired

  3. AutoConnect=true

  4. Modified=2016-10-28T11:48:25.275755Z

  5. IPv4.method=manual

  6. IPv4.local_address=192.165.52.120

  7. IPv4.DHCP.LastAddress=192.165.52.115

  8. IPv6.method=auto

  9. IPv6.privacy=disabled

  10. IPv4.netmask_prefixlen=24

  11. IPv4.gateway=192.165.52.1

  12. ~
复制代码
可以通过修改该文件进行网络配置,也可以使用connmanctl来进行配置
  1. connmanctl config ethernet_0007ed260d8f_cable --ipv4 manual192.165.52.120 255.255.255.0 192.165.52.1
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-3-29 04:42 , Processed in 0.039506 second(s), 16 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表