当前位置:首页 > 工业控制 > 电子设计自动化
[导读]Xilinx的开发环境我还是推荐Linux(这里默认都是64bit系统),Windows的综合和P&R的效率要比Linux低三分之一,这个不能忍,再就是petalinux的交叉编译用啥呢,cygwin?

做点东西不容易,我这种有强迫症的人也在这个环节屈服了。开发环境这两年真是换了又换,被搞的精疲力尽。Xilinx的开发环境我还是推荐Linux(这里默认都是64bit系统),Windows的综合和P&R的效率要比Linux低三分之一,这个不能忍,再就是petalinux的交叉编译用啥呢,cygwin?Linux发行版里面我用的是CentOS,Vivado推荐测试的那几个我试过CentOS和Ubuntu。先说Ubuntu,不好用,问题比较多。CentOS最好的版本是6.5,但是6.5已经在官网不支持了,替代的是6.6和7。先说7,Vivado的开发环境没有问题,但是petalinux的环境始终有问题,具体在这里,Unable to determine a suitable packaging system type。那最后就剩下6.6了,6.6也有一个小问题,是eclipse的一个bug,eclipse cairo bug。网上你能找到的方法是在eclipse的配置文件加上一句disable cairo的话,但是这个在Xilinx的工具链中不管用,我试了好多Xilinx的eclipse的config文件,都不行。别的解决的方法下面我会说。好,现在正是搭建环境:

 


 

开发平台环境搭建

上边说了,我们用CentOS 6.6 64bit。装的时候有个地方让你选平台的用处,你就选最后一个,software development。装别的也行,注意把一些开发环境和库的选项都选上。装好系统后可能会提示你更新,内核也被更新了,你就更新吧。然后我们装几个库1。

yum install dos2unix iproute gawk gcc git gnutls-devel net-tools ncurses-devel sftp-server zlib-devel flex bison libstdc++.i686 libgcc.i686 libgomp.i686 ncurses-libs.i686 zlib.i686 libselinux libselinux.i686

前边几个都是文档里面说的库,有些也用不到,比如tftp那个,你不用tftp调试就不用。后边也要装上,要不然petalinux编译的时候还是会有问题。然后我们再装两个库,解决上边说的那个eclipse的bug。去rpmfind.net下载下面的两个库:

cairo-1.10.2-3.el6.x86_64.rpm

cairo-devel-1.10.2-3.el6.x86_64.rpm

然后装上,

yum localinstall cairo*.rpm

Vivado工具链安装

这个简单,下载下来装上就行,记得勾上 Install Cable Drivers。这里我用的都是2014.4的版本,下边的Petalinux也是对应的。记得source setTIng文件。

Petalinux开发环境

这个开发环境我们可以参考Xilinx Wiki上说的那些方法,也可以直接用他们准备好的Petalinux SDK工具链。这里我们选择后者。安装也简单,去官网下载下来然后装上就好。BSP你可以下载下来装上玩玩,我们这里不用下这个,我们自己建一个就好。大家可以参看Xilinx的官方文档,ug1144,里面有详细的说明。我们也只是按照说明走一遍,然后给出一个例子,让大家快速上手。

一个例子

这里给大家展示一个例子,跟Zynq CTT ug873里面的差不多,但是这里我们用了Vivado,并且结合了Petalinux SDK的开发流程。不过我建议大家多看help,这里还有一个Petalinux的command reference供大家参考。我们开始:

建立一个petalinux的project

petalinux-create -t project --name poll

cd poll

在当前目录就会建立一个poll的文件夹,这就是我们的工作目录,后边的所有操作如果不特别指出,都是在这个工作目录的根目录进行的。里面还缺hardware platform,driver,还有我们的applicaTIon。我们一一补上。

创建一个hardware platform

这里我给大家准备了一个TCL文件,下载(戳这里下载),然后放到project的根目录。这里注意,我都是在Vivado 2014.4和ZC706环境下做的,要是你的环境不同,要做出适当的修改,板子不同改创建工程的那两句话。Vivado版本不同改所有IP的版本,或者你自己建一个也行,这个系统就是一个PS然后一个MicroBlaze,然后还有个BRAM。后边还得给MB写个程序。这里有个系统图你可以参考下,注意保证BRAM的起始地址是0x40000000,MB和ARM都得一样才行。?

 


 

最后运行:

vivado -mode gui -source ./system.tcl

然后Vivado就是启动,等右上角的那个进度条走完,bitstream文件就会生成好了。机器不同,时间可能不同,我的机器大约5分钟。

生成系统的时候看着特别爽吧,哈哈,duang duang的生成完了。Vivado比ISE增加了tcl,在自动化的时候还是很爽的,不用像原来ISE分析那个系统描述文件来自动生成系统。其实下边的SDK的过程也可以全程自动化,但是有点麻烦,需要修改SDK的xml文件然后调用xsdk去build就行。这里就不说了,爽到底就没意思了。

然后我们就可以File->Export->Export Hardware,记得勾上Include bitstream。然后File->Launch SDK,我们就进入到下一步了。

给MicroBlaze写个程序

MB的这个程序主要的功能就是不断的把BRAM中一个地址的数值传到另一个地址,后边在ARM运行的Linux会把这个BRAM当做一个外设,然后要对其写个driver。不要MB也行,有个好玩嘛,异构系统,heterogeneous,多高大上。。。哈哈。给MB建一个空的ApplicaTIon Project,名字叫poll吧,然后添加一个main.c的文件到工程中,main.c里面复制上这些代码:

/*

* main.c

*/

#define BRAM_ADDRESS 0x40000000

int main(void) {

volaTIle int *bram = (int *)BRAM_ADDRESS;

while (1)

bram[1] = bram[0];

}

然后保存下,SDK就编译好啦。下面要做的事情就是把编译生成的ELF文件和系统生成的bitstream文件组合在一起。这样bit文件下载到板子里面,这个程序就可以直接运行了。这里有个简单的方法,选Xilinx Tools->Program FPGA。把下面的ELF File to Initialize in Block BRAM 选择成我们生成好的poll.elf,下拉下就找到了,一般在Debug下边(大就忍了吧)。然后点那个Program,然后出来下一个对话框后,点Cancel。这样,我们就骗SDK把我们要的那个download.bit文件生成出来了,然后我们不用这个下载。你们注意下边的Console选项卡,会有刚才这个合成调用的命令updatemem,原来是data2mem,不过模糊有印象哪里说过前者会更好一些。

配置一下Petalinux

刚才创建的Petalinux project是没有硬件的描述信息的,这会我们就把我们生成的硬件描述信息配置到Petalinux里面去。很简单,运行这个:

petalinux-config --get-hw-description=./hardware/hardware.sdk/system_wrapper_hw_platform_0

然后会出来个配置界面,我们直接选Exit,然后保存配置就可以了。系统会被自动配置好。详细的说明看上边说的那个reference guide。

创建Linux Kernel Module

接下来我们需要对刚才创建的那个PL上要program的硬件系统写一个驱动,主要就是对那个BRAM的两个location进行的访问。先创建一个module的工程吧:

petalinux-create -t modules --name poll_driver --enable --force

创建好的module的模板会在components->modules->poll_driver。这里已经有一个poll_driver.c,然后还要建一个poll_driver.h文件。下载这个zip文件,里面有这两个dirver文件和下一步要用的app文件。(戳这里下载)。都是参考CTT写得啦,他们也参考了另一个网站,上边给了比较简明的教程,写了个char的device driver。

创建Linux Application

这一步我们就创建个在petalinux上运行的程序,然后会调用刚才的那个driver。还是先建个app的工程:

petalinux-create -t apps --name poll_app --enable --force

app的模板会在components->apps->poll_app。把上一步那个压缩包里面的poll_app.c替换到这个生成的app目录里面。好啦,到目前为止所有的软硬件的创建工作就完成了,下面就得编译fsbl,device_tree, uboot,kernel,module和app了。我也不会分开弄了,Xilinx Wiki上的是分开弄的,好复杂的说。

编译生成所有image文件

上边说了那么复杂,Petalinux SDK里面好简单的。

petalinux-build

可能需要点时间,等一会,哈哈!再修改编译就快了。

生成image文件会在./image/linux里面,modules和apps会在./build/linux/rootfs/modules和./build/linux/rootfs/apps里面。但其实./image/linux下面的rootfs (或者kernel image,我不确定)里面已经有我们编译好的modules和apps了。

生成boot文件

这一步得生成启动需要用得boot文件:

petalinux-package --boot --fsbl ./image/linux/zynq_fsbl.elf --u-boot --force

生成pre-built文件夹

这一步主要是方便后面的boot的,其实上一步已经生成了我们可以boot zynq的所有文件了,但是养成好习惯,我们生成一个pre-built文件夹,把image和bitstream文件都包含进来。

petalinux-package --prebuilt --fpga ./hardware/hardware.sdk/system_wrapper_hw_platform_0/download.bit --force

好了之后可以看到工程根目录下生成了一个pre-built,然后./pre-built/linux/images和./pre-built/linux/implementation下分别是软件和硬件的文件。

启动zynq board

好啦,终于倒数第二步了,所有的文件都已经生成完了,启动zynq有好多种方法,因为我们有bitstream文件,所以介绍两种可以下载bitstream文件的方法,也是两种启动linux kernel的方法。就是SD和JTAG,还有些别的方法,参看文档。我就不用了,无论哪种方法先把板子上的SW4配置成 off和on。其实SD卡启动不用,但是方便就都配置成这样就行了。在这之前还得装一个看UART的小工具,用minicom就挺好。

yum install minicom

第一次运行su模式minicom -s,配置一下Serial port setup,Serial Device改成/dev/ttyUSB0(我的是0,你的不一定)。然后115200 8N1。Hardware Flow Control设置成No就可以输入字符到zynq上啦,我会乱说。

第一种SD卡引导啦(加粗显得正式一些。。)

先格式化一张SD卡成FAT格式,然后把这三个文件都考到SD卡上的第一个分区。

./pre-built/linux/images/image.ub

./pre-built/linux/images/BOOT.BIN

./pre-built/linux/implementation/download.bit

然后配置一下板子上的SW11成00110,0就是开关掰到下边,1就是上边。这样板子就进入了SD卡启动的模式。把SD卡插进去,重启电源就行啦!然后启动minicom,用户名和密码都输入root就进入系统啦!

第二种方法JTAG

调试的时候用JTAG了,不用一遍一遍的插拔SD卡了,多方便。发行的时候用SD卡模式了。同样,SW11先配置成00000。然后重启下zynq的电源,清空原来运行的系统,要不然会有错误哦,你又知道了。。然后我们执行:

petalinux-boot --jtag --prebuilt 3

稍等片刻,download.bit会先被下载到板子里面,然后kernel会被加载。然后输入用户名密码,系统又进去了。迭代开发的时候要记得生成pre-built啊,还得重启zynq电源啊。

Finally!!下载PL,加载module,运行我们的程序了

终于最后一步了,肚子好饿。如果上一步你用的JTAG启动,就不用再下载bitstream了,如果SD卡启动,我们先把bitstream下载到板子里面。进入到Petalinux的系统之后,运行这个,很神奇的。

mount /dev/mmcblk0p1 /mnt

cat /mnt/download.bit > /dev/xdevcfg

下载完啦。。用得是zynq上得PCAP啊。

接下就是加载我们的module:

insmod /lib/modules/`uname -r`/extra/poll_driver.ko

一般会输出printk里面的东西了,如果没有就运行:

dmesg

或者

cat /var/log/dmesg

最后就可以看到kernel的输出了。这里要看的是中间有那么一句话,我们需要知道module加载被分配的major device number。我这里是245,还要再创建一个设备节点,后边的app会用到。

mknod /dev/poll_dev c 245 0

然后/dev/poll_dev就被创建出来了。

最后的最后了。。运行我们创建的程序:

很简单,很简单。。

/bin/poll_app

整个流程终于结束了。。。

后记

万里长征第一步而已,入个门。还有很多的问题,比如debug,大家多多交流。

最后,推荐一本书Embedded Linux Primer: A Practical Real-World Approach,作者:Christopher Hallinan。 资深工程师写得书,通俗易懂,入门必选。

Petalinux Tools Documentation Reference Guilde:UG1144的page 9-10推荐的库。

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

视频流媒体市场总额将从2021年的61个Billion一路增长,至2028年达到213个Billion。流媒体大涨的背后技术挑战来自新一代的交互模型,会是“多对多”的形式。这种交互模型的变化,将会彻底改变基础设施的部署模...

关键字: AMD Xilinx 加速卡 VPU Alveo MA35D

深圳2022年8月26日 /美通社/ -- 8月17日 – 深圳,AMD Xilinx举办为期一天的线下技术日活动,在AMD Xilinx主办下宜鼎国际作为合作伙伴的身份被邀...

关键字: AMD Xilinx AGENT 嵌入式系统

来源:硬件十万个为什么版权归作者 【全球总体规模】根据统计以及预测,在2013年全球FPGA的市场规模在45.63亿美元,至2018年全球FPGA的市场规模缓步增长至63.35亿美元。但随着目前5G时代的进展以及AI的推...

关键字: FPGA 英特尔 Xilinx ACTEL

对比基于元器件或模块,工程设计人员们往往更青睐于使用灵活易用的单板计算机进行设计开发。这是因为单板计算机可以让硬件关键路径最小化,并尽可能地简化库存管理,从而让测试变得更方便,更快完成设计项目。

关键字: 世健 单板计算机 Xilinx

赛灵思FPGA平台出色的性能和简洁易用的 Vivado™开发工具,助力小鸟科技将业界领先的专业音视频解决方案性能提升1.5倍,并提前半年推向市场

关键字: 小鸟科技 Xilinx FPGA

日前,外媒消息显示,当地时间6月30日欧盟宣布,AMD(超威半导体)收购Xilinx(赛灵思)获得无条件批准。值得注意的是,当地时间6月29日,英国竞争和市场管理局官网放出消息表示,这一收购案也得到了英国批准。

关键字: AMD Xilinx

2021年6月28日 – 专注于引入新品并提供海量库存的电子元器件分销商贸泽电子 (Mouser Electronics) 即日起备货Xilinx的Kria™ KV260视觉AI入门套件。

关键字: 贸泽电子 Xilinx AI

在 5G 商业化持续发展之际,对于 5G 能给我们这个日益互联的世界带来哪些影响,人们充满憧憬。事实上也正是如此,随着 5G 技术得到更广泛的部署,预计今后十年我们将看到消费者、企业和经济的面貌,将被 5G 功能重塑一新...

关键字: Xilinx 异构计算 5G

最近,赛灵思为市场带来了自适应计算的新的方法,同时也在芯片业务之外延伸出了一个新的生产就绪的板卡解决方案的业务。这就是赛灵思最新推出的自适应系统模块(SOM)产品组,首款问世的Kria K26 SOM和Kria KV26...

关键字: 赛灵思 Xilinx SOM Kria
关闭
关闭