第1步:下载基本系统
从网站上下载Zybo基本系统设计并将其解压缩到我们的工作目录中(在本教程中,我们的工作目录称为教程)。有关硬件设计的更多信息,请参阅doc文件夹下的Project Guide。
步骤2:打开基本系统设计
获取Vivado 2014.1设置并使用Vivado Design Suite(vivado)打开设计。您将看到Vivado窗口弹出。
注意:Vivado工具集中有四个可用的设置文件:settings64.sh,可用于具有bash的64位计算机; settings32.sh,可在带有bash的32位计算机上使用; settings32.csh,用于在具有C Shell的32位计算机上使用;和设置64.csh,可在具有C Shell的64位计算机上使用。
步骤3:删除现有的LED内核
我们将首先从PS中的GPIO内核分离LED。因此,我们需要单击IP集成器并打开此步骤中第一张图所示的框图。然后,我们需要删除第二个图像中所示的当前LED IP。我们将在后续步骤中处理外部引脚位置配置(xdc文件)的修改。
注意:在图4中,有一个黄色栏表示需要升级。要升级热门节目的显示IP状态,请确保所有内容均已选中,然后点击“升级所选内容”。
步骤4:命名供应商
在开始实施myLed IP内核之前,我们需要命名将自动应用于IP打包程序中的供应商。在Vivado 2014.1中,不会自动为您完成此操作。为此,请首先转到窗口左侧项目管理器下的项目设置(图1),然后将弹出项目设置窗口。在“项目设置”窗口中,选择IP(图像2)。请注意,将供应商选择为(无),这将导致Vivado内部异常。您可以随意命名供应商(图3)。
步骤5:创建MyLed IP
《现在,我们可以开始实施myLed IP内核了。从菜单中单击工具-》创建和打包IP…(图像1)。将弹出“创建并打包新IP”窗口(图2),单击“下一步”。在下一个窗口中为新IP命名,然后再次单击下一步(图像3)。
步骤6:添加接口
下一个窗口将是“添加接口”窗口。这将为myLed外设创建AX14接口。确保接口类型为Lite,模式为Slave,数据宽度为32位,寄存器数量为4。将名称更改为S_AXI而不是S00_AXI。我们只需要1个寄存器,但是我们可以选择的最小值是4。然后单击下一步。
步骤7:编辑IP
下一个窗口将提示您完成创建IP的后续步骤。更改单选按钮以选择“编辑IP,然后单击完成”。我们需要向IP添加用户逻辑,以便我们的从设备连接到LED输出。
步骤8:
选择完成后,“创建和打包IP”窗口将消失,您将看到的下一个窗口是edit_myLed窗口。这是我们将添加用户逻辑的地方。
步骤9:MyLed_v1_0_S_AXI
在项目中管理员,点击myLed_v1_0旁边的圆圈,然后突出显示myLed_v1_0_S_AXI(图1)。这包含myLed IP内部的用户逻辑。我们需要添加两行代码来完成该模块的用户逻辑。首先,我们需要创建一个名为led的用户端口(图2)。接下来,我们需要将内部从设备连接到该用户端口。我们将连接slv_reg0 [3:0],因为我们有四个LED(图像3)。
步骤10:MyLed_v_0
接下来,我们需要将用户逻辑连接到myLed。在项目管理器中,选择文件myLed_v_0。要完成IP,我们需要在此文件中添加两行代码。在“用户在此处添加端口”的注释下,为LED添加一个端口(图1)。将前一个包含用户逻辑的文件的led输出连接到myLed(图像2)。
步骤11:程序包IP
现在,我们已经创建了IP,并定义了用户逻辑,我们需要打包IP。在窗口左侧的“项目管理器”下,选择“包IP”。将打开一个新的选项卡,称为“程序包IP”。在此水龙头的左侧有一系列标签。我们需要完成没有绿色复选标记的内容。
首先选择IP自定义参数。在该窗口的顶部,选择“从IP自定义参数向导中合并更改”的选项。
步骤12:端口和接口
下一步选择IP端口和接口。请注意,您的新LED IP在那里。
步骤13:IP GUI自定义
下一步选择IP GUI自定义。我们的IP GUI很好,因此我们在这里不会进行任何更改。
现在,我们可以查看和打包myLed IP。选择查看并打包IP,然后按重新打包IP按钮。我们的IP现在已完成并打包。
步骤14:添加MyLed IP
将我们的IP添加到我们的设计中。右键单击模块设计上的任意位置,然后单击添加IP(图1)。选择正确的IP myLed_v1.0,然后按Enter键(图像2)。
步骤15:运行连接自动化
myLed IP Core的AXI4-Lite总线需要连接到处理系统。在窗口顶部,单击显示运行连接自动化的蓝色文本。这将连接myLed IP内核的输入。您应该看到S_AXI现在已连接到AXI互连的第一个输出。
步骤16:创建LED端口
接下来,我们需要将myLed IP连接到外部端口。我们实现的myLed IP内核不会连接到现有的LEDs_4Bits端口,因此我们需要创建一个名为led的新外部端口。单击现有的LED端口,然后按Delete键。要创建新端口,请右键单击并选择创建端口。命名端口,选择输出,选择向量[3:0],然后按Enter。
步骤17:连接LED端口
下一步,通过单击端口并将led连接拖到myLed上,将led端口连接到myLed IP。
步骤18:修改XDC
最后一步是指定myled_0_LED_pin的引脚号,以将我们定制的IP内核物理连接到板载LED。在项目管理器中,展开“约束”部分,然后选择base.xdc文件(图1)。在该文件中,更改外部LED引脚的名称,以使其与我们的外部LED端口的名称匹配(图像2)。
步骤19:生成比特流
通过单击窗口左侧“程序和调试”下的“生成比特流”,为硬件设计重新生成比特流。
步骤20:U-Boot源代码
**注:使用主分支-下一分支直到另行通知
获取Digilent git存储库中U-Boot的源代码。有两种方法可以检索源代码:
使用git命令:
如果您的发行版中安装了git,则可以通过命令git clone https将存储库克隆到计算机上。 ://github.com/Digilent/u-boot-Digilent-Dev.g 。..整个Git存储库约为55MB,如图1所示。如果您想获得一个单独的分支,例如下一个分支图2.下一个包含尚未发布的u-boot。上面引用的克隆URL可以在Digilent git-hub页面上找到,如图3所示。
下载压缩包:
如果只想使用一次u-boot如果不想跟踪更新,也可以从github.com下载压缩包:https://github.com/Digilent/u-boot-digilent。转到显示分支的下拉框,然后选择标签。最新标签是zynq-beta-v2.2。 (图4)。
如果下载了tar.gz,则可以使用命令
tar zxvf u-boot-digilent-2012.04-digilent-13.01.tar.gz解压缩
如果下载了zip文件,则可以使用命令
unzip u-boot-digilent-2012.04-digilent-13.01.zip
步骤21:编译U-Boot
要编译U-Boot,我们需要Vivado 2014.1提供的交叉编译工具。这些工具在GCC工具链的标准名称前有一个前缀arm-xilinx-linux-gnueabi-。前缀引用所使用的平台。 Zybo板有两个臂芯,因此我们参考了臂。为了使用跨平台编译器,请确保已获取Vivado 2014.1设置。如果没有,请参考步骤2。要为Zybo配置和构建U-Boot,请遵循此步骤附带的映像。
步骤22:U-boot.elf
编译后,
生成的ELF(可执行和可链接文件)被称为u-boot。我们需要在文件名中添加.elf扩展名,以便Xilinx SDK可以读取文件布局并生成BOOT.BIN。在本教程中,我们将把u-boot.elf移到sd_image文件夹,并替换Zybo基本系统设计包随附的u-boot.elf。
步骤23:导出SDK的硬件
通过单击文件-》导出-》导出,将硬件设计(步骤I-16之后)导出到Xilinx SDK。 SDK的硬件…,如第一幅图所示。
将工作区保留为。确保已选中Launch SDK,然后单击“确定”,如第二幅图像所示。
注意:您可能必须导出两次。
步骤24:新建项目
SDK启动后,硬件平台项目已经出现在SDK主窗口左侧的Project Explorer中,如图1所示。现在,我们需要创建一个第一阶段引导加载程序(FSBL)。单击File-》 New-》 Project…,如图2所示。
步骤25:应用程序项目
在新建项目窗口,选择Xilinx-》应用程序项目,然后单击下一步。
步骤26:将项目命名为FSBL
我们将项目命名为FSBL。为目标硬件选择hw_platform_0,因为它是我们刚刚导出的硬件项目。为OS平台选择独立。单击下一步。
步骤27:创建Zynq FSBL模板
选择Zynq FSBL作为模板,然后单击完成。
步骤28:FSBL挂钩
对于Zybo,我们需要在fsbl挂钩中设置以太网的mac地址。我们希望关闭和打开Zybo板时以太网的mac地址保持不变。您可以将FSBL项目中的fsbl_hooks.c文件与Zybo基本系统设计中source/vivado/SDK/fsbl下的fsbl_hooks.c交换。
将更改保存到fsbl_hooks.c后,
该项目将自动重建自身。如果不重建,请单击Project-》 Clean清理项目文件,然后单击Project-》 Build All重建所有项目。编译的ELF文件位于zybo_base_system/source/vivado/hw/zybo_bsd.sdk/SDK/SDK_Export/FSBL/Debug
步骤29:创建启动映像
现在,我们已经准备好所有文件来创建BOOT.BIN。单击Xilinx工具-》创建Zynq引导映像。
第30步:添加FSBL,System.bit和U-boot.elf
在“创建Zynq引导映像”窗口中,单击“浏览”以设置FSBL elf的路径。单击添加以添加位于/zybo_base_system/source/vivado/hw/zybo_bsd/zybo_bsd.sdk/SDK/SDK_Export/hw_platform_0/的system.bit文件。单击添加以添加位于zybo_base_system/sd_image/的u-boot.elf文件。 。按顺序添加3个文件非常重要,否则FSBL将无法正常工作。将FSBL.elf设置为引导程序,将system.bit和u-boot.elf设置为数据文件也非常重要。在本教程中,sd_image文件夹被设置为BIN文件的输出文件夹。单击创建映像。
步骤31:Linux内核源代码
**注意:使用母版-Next分支直到另行通知
从Digilent git存储库获取Linux内核源代码。有两种方法可以检索源代码:
使用git命令:如果您的发行版中安装了git,则可以通过命令git clone https://github.com/将存储库克隆到计算机上。 DigilentInc/Linux-Digilent-Dev 。..整个Git存储库约为850MB,如图1所示。
下载压缩包:如果您只想使用一次u-boot,并且不想要跟踪更新,您还可以从github.com下载压缩包:https://github.com/DigilentInc/Linux-Digilent-Dev。单击页面右上角的标签。最新标签是zynq-dt-for-3.14(图2)。
如果下载了tar.gz,则可以使用命令
tar zxvf linux-digilent-v3.6-digilent-13.01.tar.gz
如果下载了zip文件,则可以使用命令将其解压缩
解压缩linux-digilent-v3.6-digilent-13.01.zip
第32步:配置内核
我们将开始使用Zybo的默认配置来配置内核。该配置位于arch/arm/configs/xylinx_zynq_defconfig。要使用默认配置,请遵循此步骤所附的图像。
步骤33:编译Linux内核
按照示例进行操作
步骤34:制作Uimage
编译后,内核映像位于arch/arm/开机/的zImage。但是,在这种情况下,内核映像必须是uimage(解压缩)而不是zimage。要使uimage跟随此步骤中的图像。
步骤35:可选的路径更改
注意:取决于您的分布在Linux上,您可能会得到有关mkimage路径的错误。如果是这种情况,您可以在此步骤中更改图像后的路径。
步骤36:制作Uramdisk
到在Zybo上启动Linux操作系统,您需要BOOT.BIN,Linux内核映像(uImage),设备树blob(DTB文件)和文件系统。在第三节中创建了BOOT.BIN,在第四节中编译了uImage。现在,我们将编译DTB文件。默认设备树源文件位于Linux内核源文件中的arch/arm/boot/dts/zynq-zybo.dts。
RAMDISK:对于zynq,只有虚拟磁盘映像必须包装在u中-boot标头,以便u-boot用它引导。该步骤显示在该图像中。
步骤37:生成DTB文件
按照图像中提供的示例进行操作
步骤38:将文件映像复制到SD卡
RAMDISK)复制BOOT.BIN,将devicetree.dtb,uImage和uramdisk.image.gz移至SD卡的第一个分区,如第一个映像– RamDisk中所示。
注意:SD卡的第一个分区已安装到/media/ZYBO_BOOT
步骤39:从SD卡启动
将SD卡插入Zybo。要从SD卡引导,需要按照Zybo板上所示为USB配置跳线7,并且必须将跳线5连接到SD。使用微型USB电缆将UART端口连接到PC,并将PC上的UART端子设置为115200波特率,8个数据位,1个停止位,无奇偶校验和无流量控制。板上电后,如果使用RamDisk,则应该在UART终端上看到控制台。有关此文件系统的更多信息,请参见《嵌入式Linux ZedBoard入门》。
步骤40:创建驱动程序目录
在Tutorial文件夹中创建一个名为drivers的目录,如本步骤中的图像所示。在drivers目录中,我们将构成myLed控制器的驱动程序。
步骤41:创建Makefile
我们需要一个Makefile,以便我们可以编译驱动程序。 Makefile在图像1中创建。
创建文件后,单击I更改为插入模式,然后在图像2中插入以下文本。请确保在适当的地方使用制表符。
步骤42:创建Myled.c
我们将从一个简单的驱动程序开始,该驱动程序在Linux/proc文件系统下创建一个名为myled的文件。可以通过在文件中写入数字来更改板载LED的状态。驱动程序被编码在最后四个图像中,并被附加
步骤43:编译驱动程序
编译并生成驱动程序模块使用make。不要忘记来源Vivado设置。
步骤44:将Myled添加到设备树
我们需要将myLed设备节点添加到设备树中。
在drivers文件夹中复制默认设备树源,然后根据第二个图像对其进行修改。节点的兼容性字符串与我们在驱动程序源代码中定义的字符串相同(myled.c:第182行)。 reg属性定义节点的物理地址和大小。如上图所示,此处的地址应与Vivado设计的地址编辑器选项卡中的myLed IP内核的地址匹配。
步骤45:重新编译设备树Blob
重新编译设备树blob,如所附映像所示。
步骤46:将驱动程序和修改后的设备树复制到SD卡
将这两个文件复制到SD的第一个分区卡,如该步骤中的图像所示。我们现在就可以在板上测试驱动程序了。
步骤47:从SD卡启动
插入SD卡进入Zybo,我们就可以开始测试驱动程序了。使用insmod命令将驱动程序模块安装到内核中。安装驱动程序后,将在/proc文件系统下创建一个名为myled的条目。将0x0F写入/proc/myled将点亮LED 0〜3。您可以使用rmmod命令删除驱动程序,也可以通过poweroff命令关闭系统电源。在这两种情况下,所有LED都将关闭,如图69和70所示。有关将终端与Zybo一起使用的说明。请参阅嵌入式Linux入门– ZedBoard中的步骤V-4或从SD引导部分。
步骤48:用户应用程序:Led_blink
在本节中,我们将编写一个用户应用程序,该应用程序通过写入/proc/myled来使LED闪烁
。如第一个图像所示,在Tutorial文件夹中创建一个名为user_app的目录。在user_app目录中,我们将组成led_blink.c,如第二和第三张图所示。
步骤49:创建Makefile并编译Led_blink
组成一个Makefile并将led_blink.c编译为led_blink.o,如本步骤中的三个图像所示。
步骤50:
将SD卡插入计算机,然后将二进制文件led_blink复制到SD卡的第一个分区。
步骤51:运行Led_blink
将SD卡插入ZYBO。使用insmod命令将驱动程序模块安装到内核中。运行led_blink,LED会开始闪烁。
责任编辑:wv
-
Linux
+关注
关注
87文章
11295浏览量
209346 -
软件
+关注
关注
69文章
4927浏览量
87407
发布评论请先 登录
相关推荐
评论