第1章
将你的ZED板卡用起来
欢迎大家来到Zynq的世界。对于这块业界首款ARM Cortex-A9双核与FPGA紧密融合的全可编程片上系统(All Programmable SoC),大家一定期待已久了。那么这款颠覆性构架的芯片到底能给我们带来怎样的惊喜呢?本章将通过两个简单的例子,使大家对Zynq的能力有一个大致的认识。还等什么,拿起你的ZedBoard跟我来吧。
1.1 GPIO LED动手玩
通常情况下,第一个实验的例子总是从如何点亮LED开始,ZedBoard也是如此,但是如果细心观察,将会发现特殊之处。在这个实验中,需要准备SD卡读卡器、USB-microUSB线。
1.1.1 安装SD卡
将Zedboard中的SD卡拔出,插入PC后格式化。在本书网盘或GitHub第1章路径中找到BOOT.BIN文件,将其复制到SD卡中。卸载SD卡,将其插入到ZedBoard上的SD卡插槽中。(注意:不要重命名BOOT.BIN文件,其后的章节会解释具体原因。)
1.1.2 跳线与外设连接
图1-1 SD卡启动跳线设置
在ZedBoard板卡的右上方可以找到五个跳线帽,这是用于设置ZedBoard的启动模式的,将五个跳线帽按如图1-1所示进行设置,表示其将从SD卡启动。
使用USB-microUSB线将ZedBoard与PC相连。注意,ZedBoard的连接口为板卡左上方的UART接口。打开串口监视软件(TeraTerm),设置参数如下:波特率115200,数据位8,停止位1,无奇偶校验位,无硬件控制流。
1.1.3 演示操作
打开串口终端及ZedBoard电源开关。Zynq将会根据启动模式设置其自动从SD卡中启动,并显示如图1-2所示的打印信息。
图1-2 SD卡启动后串口的打印信息
利用超级终端输入“1”,进入正常GPIO输入模式。此时,在ZedBoard上按下BTNU按键,LD9将会熄灭若干秒后亮起。
LED的实验到这里就结束了。如果仔细观察串口打印信息,你可能会感到疑惑:什么是普通的GPIO,难道还有不普通的GPIO么?EMIO又是什么东西呢?保持疑惑,在后面的章节中,我们将会一一解答。
1.2 Linaro Ubuntu动手玩
是不是觉得第一个实验太简单了,不能展现ZedBoard的魅力?那么下面这个实验将展现出ARM Cortex-A9双核的能力。在这个演示中,需要准备一台装有Linux系统的PC、HDMI线(或者HDMI-DVI线)、具有HDMI或DVI输入接口的显示器、USB Hub、网线、USB鼠标、USB键盘、USB摄像头(可选)。什么?你不会Linux,那可糟糕啦!众所周知ARM+Linux的嵌入式应用早已经铺天盖地地进入市场,就连炙手可热的Android也是基于Linux内核。来吧,打开你的电脑,装一个Linux跟我们一起玩吧!关于Linux系统版本的选择,本书推荐使用Ubuntu 12.04,这是一个LTS版本,对于日常开发使用而言足矣。如果不想安装双系统,那么可以先装一个虚拟机,比如VirtualBox,然后再安装Linux,一样可以和我们一起玩。
1.2.1 SD卡分区
在ZedBoard中自带SD卡的容量是4GB,当然更大容量的SD卡也同样可以。将SD卡格式化后,分为两个分区:FAT格式分区(500MB)和EXT4分区(至少3GB)。在Ubuntu 12.04环境下,可以使用Disk Unity工具实现。
首先将一张新SD卡挂载到Linux系统中,打开Disk Unity软件,单击USB Mass Storage Device选项,将显示如图1-3所示界面。
图1-3 SD卡挂载至Linux系统
单击Creat Partition选项,首先建立一个大小为500MB的FAT格式分区,具体设置如图1-4所示。
图1-4 设置FAT分区
同样,将剩余空间建立为EXT4格式的分区,具体设置如图1-5所示。
图1-5 设置EXT4分区
分区完成后,其分区结果如图1-6所示。
图1-6 分区结果
1.2.2 文件复制
在本书网盘对应章节的目录下找到linaro_demo.zip文件并将其解压后,将所有的文件都复制到SD卡的FAT分区下。此时会发现这当中也有一个BOOT.BIN文件。
将SD卡的EXT4分区挂载到/tmp/sd_ext4目录下。可以在Linux操作系统下打开一个命令行终端(Terminal),键入如下命令实现:
Sudo mkdir -p /tmp/sd_ext4 Sudo mount /dev/<SD card ext4 partition> /tmp/sd_ext4
在本书网盘对应章节的目录下找到linaro-o-ubuntu-desktop-tar-20111219-0.tar.gz文件将其复制到tmp目录下,并解压到sd_ext4中。以上操作可以使用如下命令实现。
Sudo cp linaro-o-ubuntu-desktop-tar-20111219-0.tar.gz /tmp/ cd /tmp Sudo tar zxf linaro-o-ubuntu-deskopt-tar-20111219-0.tar.gz cd /tmp/binary/boot/filesystem.dir/ sudo rsync -a ./ /tmp/sd_ext4 sudo umount /tmp/sd_ext4
操作完毕后卸载SD卡,并将其拔出。
1.2.3 外设连接
将SD卡插入ZedBoard,连接其他外设。将USB Hub通过USB转接头连上Zedboard的USB OTG,使用USB-microUSB线将ZedBoard与PC相连,将USB键盘、USB鼠标、USB摄像头(可选)接到USB Hub上,插入网线,使用HDMI线连接ZedBoard与显示器并插上电源,至此,外设连接就完成了。具体连接如图1-7所示。
图1-7 ZedBoard外设连接
1.2.4 可演示的效果
打开超级终端(在Linux平台下可以使用minicom)和ZedBoard电源,是不是很奇怪,怎么什么反应都没有?稍等片刻,大约十秒钟后,ZedBoard将亮起一盏蓝灯。这表示Zynq芯片已经完成了自我启动与配置。其后超级终端中将打印出Bootloader、Kernel的启动信息,同时显示器上将出现Linux标示性的logo——企鹅。
大约30秒后,显示器中将出现大家熟悉的Ubuntu登录界面,登录密码为linaro,输入登录密码后即可显示Ubuntu桌面了。其实,运行在ZedBoard上的这个Ubuntu版本是11.04的,也采用了unity界面,和我们使用的PC机一模一样。通过鼠标和键盘,我们可以像使用PC机一样使用它,在我们的一次展会上,拍到了如图1-8所示的一幕,一个小朋友都可以拿起鼠标进行操作了。
图1-8 ZedBoard上Linux运行结果
在上一个实例中,我们使用了串口与实体按键实现了控制板上的一个LED的亮灭。那么Ubuntu环境下,我们能否实现类似的功能呢?当然可以!
在超级终端中键入如下命令:
sudo mkdir /mnt/SD sudo mount /dev/mmcblk0p1 /mnt/SD cd /mnt/SD sudo /mnt/SD/led_test.sh
ZedBoard上的8个LED将会依次亮起,然后依次熄灭。
看到了LED上方的OLED了么?我们一样可以点亮它!只要键入如下命令:
sudo ./oled_test.sh
此时,如图1-9所示,ZedBoard的制造商Digilent公司的logo显示在了OLED上。
图1-9 控制OLED显示
如果有兴趣,可以用vi命令看看这两个脚本究竟做了哪些事情,使得控制外设变得如此简单。
还有更炫的展示!
当确保设备已经安装了USB摄像头,并且已经在Linux上自带了驱动后(检查方法为在/dev目录下查看是否有video0设备)。去Ubuntu在线软件库中下载VLC软件,也可以使用如下命令实现(请保证网络可以正常工作):
sudo apt-get install vlc
待软件安装完成以后,键入“vlc/dev/video0”,VLC中将会出现摄像头视频的实时显示。
在本章中,我们为大家简单地介绍了两个运行在ZedBoard的实例,展现了Zynq芯片强大的性能。如果已经一步一步完成了如上操作,相信已经亲眼目睹了ZedBoard的魅力所在。当然,也可能充满了疑惑:LED的控制到底是ARM控制的还是FPGA的逻辑实现?为什么Zynq能做高清的显示,里面的显卡在哪里?怎么设计?为什么Linaro Ubuntu启动时要经过这么长时间的FPGA配置才能够启动U-Boot?如果自己做了FPGA的外设,要怎么接入到Linux端?如果你抱有这些疑问,非常好,接下来的章节将一一做出解答。和我们一起开始真正的Zynq学习之旅吧!