精品博文关于zynq linux开发的一点收获
这两个月在专业方面落下了不少,下了班之后,基本都是玩。聊天、看视频什么,锻炼身体也不是很多。直到最近,一来是觉得自己有些不像话,有些事一拖再拖,二来是觉得玩得无聊,三是看到别人都那么努力,自己这样子实在不像样。所以又花些时间精力在zynq linux开发上,解决了一些困扰。
没有付出就没有回报啊,之前遇到一点小困难就知难而退,现在迎难而上才解决了问题。总的来说,还算蛮顺利的,做一个简单的总结吧。
对uboot和linux内核的理解又多了一些。从接触zynq linux开发,就一直被digilent为zedboard提供的出厂设计oob design限制着,好多学习都是基于当时提供的源码进行修改。但是,毕竟是n年前的东西了,一直用着老的很不爽,而且打印信息时不时就冒出来“zed”、“zedboard”。期间多次想花时间把这些打印信息全部更换掉,由于种种原因没有动手,一直拖到了现在…
截止到昨天,做了以下变更:
- 参照adi官网教程搭建了支持linux的vivado工程,版本为2015.2,2015.4应该也可以直接用,更新的版本未测试。
- 修改了uboot源码,将编译前配置指令改为make zynq_miz702_defconfig; 将串口终端打印提示符由“zynq>”改为“miz702>”
- 修改uboot设备树文件,将“zed”、“zedboard”等字眼替换掉
- 修改了linux内核源码和文件系统,将编译前配置指令改为make zynq_miz702_defconfig; 将串口终端打印提示符由“zynq>”改为“miz702>”
- 修改内核设备树文件,将“zed”、“zedboard”等字眼替换掉
- 使用了新的硬件平台和内核之后,之前调试成功的usb摄像头项目无法正常捕捉图像。分析并解决了该问题。
既然在新的平台上也能跑起来Ramdisk文件系统,下一步就要把之前做的GPIO demo移植过来了,然后再用Qt做个GUI操作GPIO驱动。
Zynq下linux系统搭建
引言
Zynq器件将arm和FPGA结合,利用了两者各自的优势,arm可以实现灵活的控制,而FPGA部分可以实现算法加速,这大大扩展了zynq的应用。比如深度学习加速,图像处理等等。PL侧表示FPGA的逻辑部分,PS侧为arm端以及一些AXI接口控制部分,二者实际上通过AXI接口实现通信和互联。PS可以通过AXI来对PL逻辑部分进行配置和控制,PL侧通过AXI和PS进行数据交互。本章基于zynq7020器件来搭建Linux系统,描述搭建Linux系统过程中PL侧的配置以及对u-boot,kenel,桌面系统的配置和编辑。
1 vivado工程创建
本文使用的是黑金的zynq7020开发板。搭建一个最基本的linux系统需要以下基本配置:
1)arm核的添加和配置。
打开vivado,新建工程。然后创建block,添加zynq processing system。图中iic是后边在开发IIC驱动时添加的,最基本的linux系统可以不适用IIC。
2) bankIO电压设置。
根据原理图设置bank IO的电压。如图1.2所示。SD卡配置。
Linux系统安装在SD卡中,所以需要完成SD卡配置,根据原理图选择SD卡的使用引脚。
图1.2 IO电压和SD卡配置
3) UART口配置。
需要用到串口进行调试,所以配置串口MIO引脚。
4) DDR配置。
内存是必须的。这里面已经有内存型号供你选择,不需要在对DDR参数做配置,只选择MT41J256M16RE-125就行了。
图1.4 DDR配置
这样就完成了一个Linux系统启动需要的最基本配置。接下来对工程进行综合和实现,生成bit,并在file菜单项中选择export/export hardware,选择include bitstream,点积OK就生成了linux系统需要的硬件工程。
接下来还需要生成启动u-boot的fsbl。这里简单说一下linux系统启动的基本过程:
FSBL(完成IO电压,SD卡,UART等硬件的检测和基本配置,然后启动u-boot。)->U-boot(这个主要完成arm硬件的一些更进一步检测和配置,然后去启动kernel)->kernel(这个是linux系统需要的所有驱动)->文件系统。
我们launch SDK,打开SDK生成fsbl和需要的设备树。
New->application project->zynq FSBL,然后进行编译,就生成了fsbl.elf文件。如果我们也已经生成了u-boot文件,就可以用SDK来制作boot.bin。我们可以选择fsbl的工程,右键create boot image,然后选择u-boot的路径,partition type选择dtafile。然后create image就会生成boot.bin了。我们在fsbl工程目录中的bootimage文件夹下看到boot.bin。
图1.5 选择u-boot路径
生成devicetree需要zynq的基本divecetree文件,可以在git上下载:https://github.com/Xilinx/device-tree-xlnx。下载的设备树文件添加到SDK中的repositories中:
图1.6 添加设备树文件来生成设备树
然后new->board support package project->device_tree,这样就生成了设备树源文件。源文件有以下几个:
Zynq-7000.dtsi,这个是zynq-7000的默认硬件配置,通常不需要修改。
pcw.dtsi,这个文件是针对自己的硬件平台进行进一步配置的。比如在zynq-7000中sdhci都是不使能的,在pcw.dtsi中就需要进行使能,并配置sdhci0的statue为okay。
System-top.dtsi,其配置一些别名,并配置chosen,这个主要是选择在启动硬件的时候如何和操作系统进行通信,比如stdout-path选择boot输出介质,一般都是串口输出。
用这三个文件就可以了。
图1.7 设备树源文件生成
以上就完成了linux系统启动的硬件工程搭建,设备树产生,以及fsbl产生。
2 u-boot编译
下载u-boot源码:https://github.com/Xilinx/u-boot-xlnx。
主要配置u-boot中的./configs/*_defconfig文件,这个主要是对arm端硬件进行配置。这里我们就使用zynq_zc702_defconfig,当然这里可以修改默认设备树文件和board_name. 比如将defconfig文件命名为board_name_defconfig,相应有文件./include/configs/board_name.h来描述板卡信息。
然后在./include/configs中复制一份zynq_zc70x.h为你想要的板级名称。这个时候我们需要修改zynq_common.h中的配置。由于我们的文件系统在SD卡的第二分区,所以需要修改宏定义:CONFIG_EXTRA_ENV_SETTINGS,去除了ramdisk的启动。
然后建立uEnv.txt,在其中设置环境变量。如图2.3所示。指定了文件系统所在位置为SD卡分区2。文件系统格式为ext3。
图2.1 defconfig文件,红框可以修改成为你的板卡的名字和设备树名字
图2.2 sdboot变量修改前和修改后
图2.3 uEnv.txt中设置
接下来就是编译u-boot了。需要用到交叉编译工具arm-xilinx-linux-gnueabi。目前的vivado工具中已经没有这个交叉编译工具了,可以到网上下载这个工具链。然后export PATH=$PATH: dir/bin。可以在Makefile中设置默认的编译工具:
图2.4 Makefile中设置编译工具
然后make board_name_defconfig进行配置,最后make就可以编译出u-boot了。根目录下的u-boot.elf正是我们需要的文件,用于合成boot.bin。在1节中已经介绍了。
3 编译kernel
Kernel可以到git上下载,kernel包含所有的驱动,如果进行驱动修改的话,可以在其中进行配置。比如筛选某些驱动。通常开发新的驱动,并不需要在其中进行修改。因为驱动可以通过命令行在系统启动后动态加载。所以只仅仅对驱动编译就行了,在Makefile中添加编译工具,这个核u-boot一样。然后make uImage LOADADDR=0x00008000就可以了。编译完成后再arch/arm/boot中产生uImage,这个是我们要用到的内核文件。
设备树文件的编译也很简单,就是通过设备树编译工具dtc将dtsi文件编为dtc文件就行了,这里注意dtc文件名称要和在u-boot中zynq-common.h中的设备树文件名称一样。通常都为devicetree。编译命令为:
dtc –I dtx –O dtb –o devicetree.dtb your.dts
文件系统可以使用linaro Ubuntu文件系统,从网上下载,解压。这个时候需要对SD卡进行分区,1区为fat格式,有200M就够了,存放boot.bin,uImage,devicetree.dtb,uEnv.txt文件。第二区用ext3格式,存放linaro Ubuntu文件系统。
4 linux系统启动过程
图4.1 fsbl启动
图4.2 fsbl完成
图4.3 u-boot启动:读取env,uImage和设备树
图4.4 启动kernel
图4.5 文件系统的启动
总结
本篇在zynq7000的基础上,制作一个最基本的linux系统。整个流程包括工程创建,fsbl和设备树生成,u-boot的配置和编译,kernel编译以及文件系统制作。
相关问答
Zynq -7000支持 Linux 环境开发吗?没错,现在的linux对中文支持都很好,只要装了中文支持用的字体都一样ukai,uming,wyq,最多就是动手改一下配置没错,现在的linux对中文支持都很好,只要装了中文...
pynq板包括什么?可以说PYNQ开发是ZYNQ开发的集大成,也可以说PYNQ是ZYNQ的全栈式开发,里面涉及到的内容不仅包括FPGA设计、PS与PL的协同交互、HLS、linux驱动开...
imax8 ev详细配置参数?据我了解,imax8ev是一款基于XilinxZynqUltraScale+MPSoC的增强视觉开发板。其配置参数包括:1.XilinxZynqUltraScale+MPSoCXCZ...
哪里有:低温弯曲试验台系统怎么选,试验台系统销量高不高??[回答]本书系统介绍了XilinxZynq7000SoC与嵌入式Linux设计方法与实践。全书以ZynqPS(ARMCortexA9)为核心,以ZynqPL(FPGA)为可编程外设,详细介绍了从底...