| 
 | 
	
 
 本帖最后由 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卡- sudo ~/make_sdimage.py  \
 
  
-       -f \
 
  
-        -Ppreloader-mkpimage.bin,u-boot-cyclone5.img,num=3,format=raw,
 
  
- size=10M,type=A2  \
 
  
- -P rootfs/*,num=2,format=ext3,size=1500M  \(根据实际大小改变)
 
  
- -P zImage,u-boot.scr,soc_system.rbf,socfpga.dtb,num=1,format=vfat,size=500M  \
 
  
- -s 2G \(根据实际大小改变)
 
  
- -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的路径,因此配置选项如下- ./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,*代表网络设备名字,以下是该文件内容:- [ethernet_0007ed260d8f_cable]
 
  
- Name=Wired
 
  
- AutoConnect=true
 
  
- Modified=2016-10-28T11:48:25.275755Z
 
  
- IPv4.method=manual
 
  
- IPv4.local_address=192.165.52.120
 
  
- IPv4.DHCP.LastAddress=192.165.52.115
 
  
- IPv6.method=auto
 
  
- IPv6.privacy=disabled
 
  
- IPv4.netmask_prefixlen=24
 
  
- IPv4.gateway=192.165.52.1
 
  
- ~
 
  复制代码 可以通过修改该文件进行网络配置,也可以使用connmanctl来进行配置- connmanctl config ethernet_0007ed260d8f_cable --ipv4 manual192.165.52.120 255.255.255.0 192.165.52.1
 
  复制代码 
 |   
 
 
 
 |