您好,欢迎来到吉趣旅游网。
搜索
您的当前位置:首页ZedBoard移植嵌入式Linux教程

ZedBoard移植嵌入式Linux教程

来源:吉趣旅游网
ZedBoard移植嵌入式Linux教程(1,2)——软硬件环境与搭建硬件工程 由 技术编辑 于 星期五, 01/16/2015 - 15:49 发表

一、软硬件环境 硬ZedBo件ard 软操作系Window 7 SP1 x 件统 Ubuntu 12.04 LTS Vivado 2013.4 for windows 交叉编https://zedboard-book-source.googlecode.com/files/xilinx-20译工具11.09-50-arm-xilinx-linux-gnueabi.bin链 嵌入式https://github.com/Digilent/linux-digilent/releasesLinux(Digilet官方发布的Linux内核) uBoot https://github.com/Digilent/u-boot-digilentDevicehttps://github.com/Xilinx/device-tree-tree 其串口调Tera Term 他试 说明:有地方使用的linux版本是 https://github.com/Xilinx/linux-xlnx , Uboot是 https://github.com/Xilinx/u-boot-xlnx ,没有测试过。

二、搭建硬件工程

创建一个最简单的Zynq项目,如下:

选择Next

点击Next,我们不需要添加Verilog/VHDL源文件或者约束文件,勾选Do not specify sources at this time

点击Next,选择Boards,并选择ZedBoard Zynq Evaluation and Development Kit

点击Next

点击Finish完成创建向导,出现如下界面

先创建一个Block Design,点击如下地方

输入名称

等待创建完成

在Diagram视图中点击Add IP

在弹出的窗口中输入Zynq进行搜索,在结果中选择第一个

点击Run Block Automation,并选择/processing_system7_0完成自动连线

完成之后

双击ZYNQ进行自定义配置

出现

取消不需要的部分

首先点击Clock Configuration,展开PL Fabric Clocks,取消FCLK_CLK0

该时钟是PS提供给PL的时钟,在结构图中的如下部分

取消之后Diagram中的FCLK_CLK0会消失

另外,我们要取消掉如下引脚

对于TTC,我们点击如下部分,取消掉TTC

再点击

取消掉AXI GP0 interface

最后取消掉QSPI

点击OK完成

回到Block Design的sources视图

在System上右键选择Create HDL Wrapper

完成后点击左边Flow Navigator中的Generate BitStream

等待Vivado完成综合、实现、生成bitstream之后,出现如下

点击Cancel取消。点击File->Export->Export Hardware for SDK

勾选Launch SDK并点击OK。

到此,我们已经完成了所有的硬件配置。

ZedBoard移植嵌入式Linux教程(3)——制作First Stage Boot Loader

由 技术编辑 于 星期四, 01/22/2015 - 11:03 发表

在上一步中,我们已经到处硬件工程信息到SDK,如下

现在,我们需要创建一些项目用于启动linux。首先是First Stage Boot Loader(FSBL)。FSBL在linux启动过程中用于使用PS配置数据初始化CPU,使用bitstream配置PL,加载Second Stage Boot Loader(SSBL)和用户应用程序到内存并开始执行SSBL和用户应用程序(Linux启动可参考《The Zynq Book》)。、

在SDK中点击菜单File->New->Application Project

填写项目名称zed_fsbl(可以更改),点击Next

选择Zynq FSBL并点击Finish。之后SDK会自动编译FSBL代码,并在工程Debug下生成zynq_fsbl.elf目标文件。

ZedBoard移植嵌入式Linux教程(4)——创建设备树(Device-Tree)文件dts

由 技术编辑 于 星期四, 02/05/2015 - 16:36 发表

设备树用于硬件和软件之间的信息交互,也就是将ZedBoard的硬件信息传递给linux内核,避免在linux内核中硬编码而影响在其他平台上的可移植性。设备树一般以两种文件格式存在,一个是dts文件,也就是文本文件,便于阅读,另外一种是dtb文件,是二进制格式,是dts使用dtc编译器编译而来,由uboot展开并传递给linux内核。设备树的文件格式可以参考 http://www.devicetree.org/Device_Tree_Usage 和 http://xillybus.com/tutorials/device-tree-zynq-1

如果你已经下载了最开始提到的linux-digilent内核源码,你可以在arch/arm/boot/dts/目录中找到digilent-zed.dts文件。这个dts文件包含比较丰富的硬件结构,但是不适合我

们前面配置的最小系统。所以,我们需要自己来创建一个适合我们自己平台的dts文件。但这并不意味着我们需要使用文本编辑器从头按照繁琐的格式来编写。参考Xilinx Wiki上的一篇教程 http://www.wiki.xilinx.com/Build+Device+Tree+Blob ,我们可以轻松创建需要的设备树。

首先下载device tree generator,安装到SDK

下载方式一:使用git

# For SDK 2014.1 (or earlier) use this repo:

git clone git://github.com/Xilinx/device-tree.git bsp/device-tree_v0_00_x # Otherwise for SDK 2014.2 use this repo:

git clone git://github.com/Xilinx/device-tree-xlnx.git

下载方式二:直接下载压缩文件: https://github.com/Xilinx/device-tree

https://github.com/Xilinx/device-tree-xlnx/releases

下载的文件必须包含以下两个文件 device_tree.mld device_tree.tcl

然后重命名(注意此处版本号一定不能是其他的) device-tree_v2_1_0.mld device-tree_v2_1_0.tcl

新建一个repo的目录,我将它放在SDK工程目录下(其他路径亦可,注意路径不能有空格)我的是

C:\\Users\\dc\\vivado\\Test_Digilent_Linux\\Test_Digilent_Linux.sdk\\SDK\\SDK_Export\\device_tree_repo

这个路径就是我们后面需要的

再在其中创建多层子目录bsp\\device-tree_v0_00_x\\data

将刚才的两个文件放进去,如下

\"C:\\Users\\dc\\vivado\\Test_Digilent_Linux\\Test_Digilent_Linux.sdk\\SDK\\SDK_Export\\device_tree_repo\\bsp\\device-tree_v0_00_x\\data\\device-tree_v2_1_0.mld\"

在SDK中操作点击菜单: Xilinx Tools > Repositories

在Local Repositories中添加我们刚才的路径并点击OK

点击菜单File > New > Board Support Package

如果前面没有配置正确,出现的对话框的Board Support Package OS部分就只有standalone而没有device-tree选项,这时候需要重头检查自己的配置,最好检查前面文件的路径是否有空格,还有推荐用管理员权限打开SDK,当然最重要的是检查文件是否完全按照规则放置和命名(此处有惨痛教训)。

如果配置正确,则出现如下的窗口

如果至此没有问题,继续

配置启动参数(定义串行终端和系统镜像位置等)和标准输出

其中bootargs必须是

console=ttyPS0,115200 root=/dev/ram rw initrd=0x800000,8M earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0

Console_device选择ps7_uart_1

可以看出,我们使用串口ttyPS0(不是ttyS0)作为终端并配置波特率为115200,操作系统镜像在ram中,并从0x80000启动,ramdisk大小为8M(因为我们后面制作的根文件系统是8M大小)等。注意里面的“initrd=0x800000,8M”不能漏掉,否则启动linux时会出现如下错误并卡死

启动参数配置也可以参考前面提到的digilent-zed.dts中的bootargs一行。

我们在此配置的启动参数会覆盖掉linux内核中默认配置的digilent_zed_defconfig中的CONFIG_COMDLINE。

完成之后项目会在SDK中自动编译。编译过程中如果出现下面的错误 ERROR:EDK -

C:\\Users\\dc\\vivado\\LinuxHw\\LinuxHw.sdk\\SDK\\SDK_Export\\device-tree_bsp_0\\syste

m.mss line 5 - Cannot find MLD file device-tree_v2_1_0.mld for the os device-tree 0.00.x

INFO:EDK - Directories Searched : -

C:\\Users\\dc\\vivado\\LinuxHw\\LinuxHw.sdk\\SDK\\SDK_Export\\device-tree_bsp_0\\bsp/devi

ce-tree_v0_00_x/data -

C:\\Users\\dc\\vivado\\LinuxHw\\LinuxHw.sdk\\SDK\\SDK_Export\\device_tree\\bsp/device-tre

e_v0_00_x/data

- C:\\Xilinx\\SDK\\2013.4\\sw\\lib\\bsp/device-tree_v0_00_x/data

- C:\\Xilinx\\SDK\\2013.4\\sw\\XilinxProcessorIPLib\\bsp/device-tree_v0_00_x/data - C:\\Xilinx\\SDK\\2013.4\\sw\\ThirdParty\\bsp/device-tree_v0_00_x/data INFO:EDK - Check the following for possible causes of not finding MLD: - If OS_VER is specified in MSS, it must follow literal form X.YY.Z - There is no OS with given name - OS exists but not that version

- OS and version (directory) exist but no MLD is available

ERROR:EDK - Errors occured while creating Software System. make: *** [ps7_cortexa9_0/lib/libxil.a] 错误 2 make: 由于错误目标“all”并未重新创建。

我在网上找了很久的答案,下面这个不符合我的情况

这个才是靠谱的解决方法:

http://forums.xilinx.com/t5/Embedded-Development-Tools/Error-build-devic...

意思是说,我们刚才下载的device-tree generator是新版本才会出现以上错误,要下载旧版本进行替换,下载地址

http://forums.xilinx.com/xlnx/attachments/xlnx/EDK/32408/1/device_tree_o...

将前面的两个文件device-tree_v2_1_0.mld和device-tree_v2_1_0.tcl换成旧版本之后,clean一下project,再次自动编译,编译成功,会生成xilinx.dts,文件在device-tree_bsp_0\\ps7_cortexa9_0\\libsrc\\device-tree_v0_00_x下。

最后,后面会提到一个启动错误,是由于devicetree文件中默认生成的compatible不一致产生的,将下图中的zynq-7000改成zynq-zed

为了不每次都修改生成的dts文件,我们可以对

device_tree_repo\\bsp\\device-tree_v0_00_x\\data中的device-tree_v2_1_0.tcl文件进行修改,因为该文件是生成dts文件的tcl脚本,由SDK调用,搜索“7000”(只有一处)改成“zed”即可,下次我们就不用修改dts文件了。

至此,我们的设备树xilinx.dts文件也生成好了。

ZedBoard移植嵌入式Linux教程(5)——安装交叉编译工具链

由 技术编辑 于 星期五, 02/27/2015 - 11:47 发表

交叉编译工具链用于编译uboot和linux内核,也可以用于编译linux的应用程序。

在地址

https://zedboard-book-source.googlecode.com/files/xilinx-2011.09-50-arm-... 下载前面提到的交叉编译工具arm-xilinx-linux-gnueabi,并按下面的方式安装。

安装之前需要在 Ubuntu下打开一个终端,输入命令 “sudo dpkg-reconfigure dash”,然后出现下图,选择“否”,退出。

将“xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin\"此文件拷贝到”主文件夹“下面,

打开一个终端,运 行“sudo ./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin\"。然后出现安装界面,一步一步向下安装即可。

安装时的设置都默认即可。

ZedBoard移植嵌入式Linux教程(6)——编译uboot(Second Stage Boot Loader/SSBL)

由 技术编辑 于 星期二, 03/03/2015 - 15:07 发表

我们使用Digilent公司提供的uboot作为Second Stage Boot Loader(SSBL)。SSBL用于加载压缩的linux内核镜像,设备树文件,根文件系统到内存中,并解压linux镜像,初始化并将CPU控制权交给linux内核。

在前面提供的地址 https://github.com/Digilent/u-boot-digilent 下载uboot。如果是在windows中下载,请在下载完成之后拷贝到ubuntu中。 以下操作都在ubuntu中进行。请提前安装好Ubuntu 12.04 LTS。

我将下载的uboot压缩文件u-boot-digilent-master放在/home/dc/Desktop/zedboard/目录中

解压

解压完成后,进入目录

我们修改默认的uboot配置文件,文件在目录include/configs/zynq_zed.h

我们可以配置Zedboard的ip地址,终端提示符,以及启动的zImage,devicetree,ramdisk的文件名等。

不过默认也可以。

接下来我们使用上一章安装好的交叉编译工具编译uboot。

使用如下命令进行默认配置

make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_zed_config

使用如下命令编译

make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-

一定要指定目标平台和交叉编译器,以免出现不必要的错误。

编译完后,使用mv命令将u-boot重命名为u-boot.elf

至此,uboot制作完成。

ZedBoard移植嵌入式Linux教程(7)——制作boot.bin

由 技术编辑 于 星期二, 03/10/2015 - 15: 发表

我们前面已经准备好了FSBL、bitstream和SSBL,现在我们使用这三个文件创建一个启动镜像boot.bin。

Zynq启动过程

Boot.bin文件格式

我们转到SDK下,点击菜单Xilinx Tools > Create Zynq Boot Image

首先设置BIF文件路径。BIF文件用于指定当前boot.bin制作过程中用到的三个文件的路径,相当于一个项目配置文件。

设置好后我们先按顺序添加三个文件,显示FSBL文件

FSBL的在弹出对话框中的Partition type是bootloader,而bitstream和uboot都是datafile。此处一定要注意,否则会出现问题,比如我们把bitstream当成init类型,就会出现以下错误:

添加正确的话,修改输出路径中文件名为boot.bin(也可以不修改)

点击Create Image创建boot.bin,成功的话会在输出路径生成相应文件。

ZedBoard移植嵌入式Linux教程(8)——编译Linux内核

由 技术编辑 于 星期三, 03/18/2015 - 15:53 发表

在前面提到的地址下载linux内核源码并放到ubuntu中,我将linux-digilent-master压缩文件放到/home/dc/Desktop/xilinx/中。

与编译uboot过程一样,linux内核也有默认配置digilent_zed_defconfig,在目录arch/arm/configs/目录中,可以使用vim查看

我们同样不需要做任何修改,直接使用如下命令应用默认配置 make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- digilent_zed_defconfig

使用如下命令进行编译

make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-

等待编译完成后,会在内核源码目录下生产vmlinux(未压缩的镜像),而我们需要的是arch/arm/boot/目录下的zImage

至此,内核镜像编译完成。

ZedBoard移植嵌入式Linux教程(9,10)——编译设备树dts为dtb,制作根文件系统

由 技术编辑 于 星期三, 04/29/2015 - 14:30 发表

九、编译设备树dts为dtb

前面的linux内核源码目录中已经包含了设备树编译器Device Tree Compiler(dtc),在目录arch/arm/boot/dts/目录下。

将前面生成的xilinx.dts文件拷贝到ubuntu下,使用如下命令进行编译 dtc -I dts -O dtb -o devicetree.dtb xilinx.dts

上面Dtc编译器有几个选项和参数: -I是输入文件格式,在本文中是dts

-O是目标文件格式,在本文中是dtb -o是目标文件路径

最后一个参数是输入文件路径

编译之后会在目标文件路径生成一个dtb文件,这个文件名必须按照前面uboot默认配置中的文件进行命名,本文中是devicetree.dtb。

至此,dtb文件生成完成。

十、制作根文件系统

为了发挥linux的强大功能,必须要挂载一个文件系统到linux上,嵌入式linux只挂载一个根文件系统,并不再挂载其他的文件系统。

根文件系统可以基于busybox进行制作,过程比较繁琐,本文不再赘述,读者可以在网络上查找资料。

为了正常进行实验,本文使用ZedBoard配套SD卡中自带的ramdisk8M.image.gz。

读者可以使用gzip -d ramdisk8M.image.gz解压ramdisk镜像并挂载在某个目录下,在其中添加需要的功能后,再使用gizp -9 ramdisk8M.image 压缩回来。

文章来源:DC的陋室

声明:本文为授权转载文章,如需转载请联系作者,谢谢!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务