前段时间在zedboard上进行zynq平台的开发验证,发现这方面的文档讲的不太清楚,中间走过很多弯路。准备记录下来,对前段时间工作的整理。记录的内容主要是Linux部分的开发,不包括FSBL、U-boot、FPGA。包括开发环境构建、内核、devicetree编译等。本来想整理详细些,结果总没时间,概述一下吧。
1.主机操作系统
我选择了vbox虚机,在ubuntu 12.04,和centos6.5下都进行了测试,都可以正常使用。我的感觉是ubuntu运行的快一些。我使用的是32位系统,64位系统还需要额外的准备。
2.开发包选择
思路:最开始拿到zedboard开发板,我是到www.zedboard.org上找资料。这个网站资料大部分是关于这个开发板硬件的,没有开发包。后来发现SD卡release文件是digilent网站制作的,在http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,1028&Prod=ZEDBOARD页面下载了release包(http://www.digilentinc.com/Data/Products/ZEDBOARD/ZedBoard_OOB_Design.zip)。但我的最终目的不是只在开发板上玩玩,我需要自己能够编译内核,能够定制系统。后来在xilinx的wiki网站找到了xilinx linux源码包。一开始只看到内核是支持xilinx官方的zc702开发板,后来验证知道,zedboard可以与zc702使用同样的内核(后来发现microzed也可以使用这个内核)。到此,确定了开发的主要方向是依靠xilinx维护的源码进行。安装方法:
1)下载开发包
根据http://www.wiki.xilinx.com/Install+Xilinx+Tools的说明,到http://www.xilinx.com/support/download/index.htm页面,选择选择了2013.4下载All OS Vivado and SDK Full Installer (TAR/GZIP - 6.81 GB)。下载过程不是很方便,单个文件太大,无法上传到百度云盘,谁有云盘vip,分享一下最好。我最早开发时是2013.4,现在已有更新的版本。
2)在虚机中安装开发包
vbox虚机文件共享操作不在此描述。重点说明安装过程中的问题。
将下载的安装包解压后,直接运行xsetup默认安装会有问题。我的方法是在终端中运行:sudo chmod 777 /opt。然后再运行xsetup,按照默认选项安装即可。
疑问:不知道为什么,使用sudo xsetup安装不能成功。只好修改/opt目录权限。
3.安装软件:
1)根据需要安装开发过程需要的组件
安装组件:libncurses
sudo apt-get install libncurses5-dev
这个组件是make menuconfig时需要的。
2)svn
我使用的是subversion:
ubuntu12.04的源svn是1.6版本,这个不习惯,升级到1.7
svn1.6升级到1.7:
卸载原来的svn1.6:sudo apt-get remove subversion
添加PPA源
vim /etc/apt/sources.list
deb http://ppa.launchpad.net/dominik-stadler/subversion-1.7/ubuntu precise main
deb-src http://ppa.launchpad.net/dominik-stadler/subversion-1.7/ubuntu precise main
sudo apt-get update
安装新版svn:sudo apt-get install subversion
确认安装版本:svn --version
问题:
a)
提示:Password for '(null)' GNOME keyring:
解决:svn和gnome的一个key冲突了,只要删除就可以了:rm ~/.gnome2/keyrings/login.keyring
b)
删除svn记住的密码:删除 ~/.subversion/auth (命令:rm -rf ~/.subversion/auth
4.uboot
1)下载uboot
在https://github.com/Xilinx/u-boot-xlnx/releases
下载xilinx-v14.7标签中tar.gz格式的文件(zip格式的文件好像有问题):
u-boot-xlnx-xilinx-v14.7.tar.gz
进入u-boot目录下tools目录,添加路径到环境变量:
u-boot-xlnx$ cd tools
tools$ export PATH=`pwd`:$PATH
不然编译内核生成uImage和制作ramdisk时会提示错误。
2)进入uboot所在目录,编译:
make ARCH=arm zynq_zed_config
make ARCH=arm
编译后的u-boot为elf格式,u-boot.bin为二进制格式。
5.Linux
1)下载linux --xilinx
https://github.com/Xilinx/linux-xlnx/releases
下载3.10版本内核:linux-xlnx-xilinx-v14.7.tar.gz
设置环境变量后:
make ARCH=arm xilinx_zynq_defconfig
make ARCH=arm menuconfig
make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage
6.devicetree
下载zedboard开发包中的devicetree.dts到..../linux-xlnx/arch/arm/boot/dts
编译devicetree:
make ARCH=arm dtbs
zynq-zed.dtb是我们需要的文件,改名为devicetree.dtb
也可以只编译这一个文件:make ARCH=arm zynq-zed.dtb
make modules_install ARCH=arm INSTALL_MOD_PATH=../rootfs