一、移植之前
官方资源链接:
http://www.wiki.xilinx.com/
官方源码链接:
https://github.com/Xilinx
Xilinx提供了可用于ZedBoard的现成的嵌入式Linux(可在第一个链接找到),主要包含四个文件:boot.bin、devicetree.dtb、uImage和uramdisk.image.gz。
另外,ZedBoard自带SD卡的Demo系统主要包含四个文件:BOOT.BIN、devicetree_ramdisk.dtb、zImage和ramdisk8M.image.gz。
其中,uImage和zImage文件可由Linux源码编译得到,BOOT.BIN由下文的方法生成。此外,.dtb文件是设备树文件,可采用官方pre-built;ramdisk是根文件系统,也可以采用官方的pre-built。(uImage是uboot专用的映像文件,它是在zImage之前加上一个长度为 64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。)
【注意】
有一个包含全部移植Linux所需文件的“全家桶”:petalinux-v2015.2.1-final-installer.run。采用此“全家桶”可省去从git下载u-boot、Linux等源码的步骤,比较方便。为方便起见,下文相关操作采用此包进行。因此,读者需要先安装此包。
安装方法:终端中输入以下内容:
$ mkdir<安装目录>
$ <包的目录>
/petalinux-v2015.2.1-final-installer.run <安装目录>
二、移植环境
Ubuntu15.10(其他版本也可以,如12.04等)
Vivado 2014.2(其他版本也可)
Xilinx SDK 2014.2(其他版本也可)
三、移植步骤
(1)安装Ubuntu并搭建交叉编译环境
1)安装32位库【如果PC安装的是32位的Linux,可省去此步骤
】
由于这个环境是为32位系统设计的,所以64位系统需要先安装32位库。在Ubuntu终端(Ctrl+Alt+T打开终端)中进入root权限(输入
su root,输入UNIX密码即可[如果事先没有设置密码,先通过
sudo passwd root设置UNIX密码])。
Ubuntu12.04及更老的版本可以在终端中输入
apt-get install ia32-libs。Ubuntu12.04之后ia32-libs被取消了。12.04之后的版本可以输入
apt-get install libgtk2.0-0:i386试试。
2)将dash改成bash
在终端输入
dpkg-reconfigure dash,选择
no。
3)下载并安装xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
链接:
https://pan.baidu.com/s/1qWWv6Cs,提取密码
65nw。下载完成后,将其放到/home/user目录下,在终端中输入
./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,如果执行失败,先输入
chmod
+xxilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,将其转换为可执行程序,再输入
./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin。
4)设置环境变量
在终端中输入
gedit/etc/bash.bashrc指令打开bash.bashrc文件,在末尾增加内容:
export ARCH=arm
exportCROSS_COMPILE=arm-xilinx-linux-gnueabi-
exportPATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH
并运行
source /etc/bash.bashrc指令使设置立即生效。通过
echo $PATH指令可以看到我们刚才设置的路径arm-xilinx-linux-gnueabi-gcc-v。如果可以打印出交叉编译器的版本信息,说明设置成功了。还可以在终端中输入
arm-xilinx,按下TAB键,看看有没有东西出来:arm-xilinx-linux-gnueabi-。
5)测试交叉编译环境
找个地方新建一个hello.c文件,用gedit编辑,代码如下:
#include
int main(
void)
{
printf(
"HelloZedBoard!
");
return 0;
}
在C文件所在目录下,在终端输入
arm-xilinx-linux-gnueabi-gcc hello.c,然后将生成的a.out文件拷到U盘上,插到ZedBoard搭USB OTG上。用micro USB线把ZedBoard的UART口连到电脑USB。板子上电后,打开串口调试工具(如SecureCRT),等板子自带系统启动之后,(如果未出现出现zynq>,回车即可),在串口工具中输入:
mount /dev/sda1 /mnt/
/mnt/a.out
将看到如下结果:
图1 测试交叉编译环境
(2)编译U-BOOT
在安装好的“全家桶”中,把u-boot拷贝出来,依次在终端中输入
cd u-boot和
make zynq_zed_config配置u-boot,最后输入命令
make,编译u-boot,成功后出现
“configuration written to .config”的提示信息。
在u-boot目录下可以看到新生成的文件u-boot。将文件u-boot添加后缀.elf(或通过命
mv ./u-boot ./u-boot.elf)并保存好。生成的u-boot.elf可用于生成BOOT.BIN。
【注意】为了后续生成uImage文件,
cd到U-BOOT源码目录下的tools目录下,执行
cp mkimage
/usr/local/bin将生成uImage的工具mkimage拷贝到/usr/local/bin目录下。
(3)编译Linux内核源码
从安装好的“全家桶”中,把linux源码拷出来。
cd进源码目录。输入
make ARCH=arm xilinx_zynq_defconfig以配置内核,成功后将看到以下信息,如图2所示:
图2 配置内核成功
配置成功后,输入
make ARCH=armUIMAGE_LOADADDR=0x8000 uImage以编译内核(中间的UIMAGE_LOADADDR=0x8000必须加上,不然生成的uImage不能正常启动)。
内核编译完毕后,可在源码目录的/arch/arm/boot/子目录下找到uImage文件并自行保存好。如果找不到,将整个源码目录删除,重新将源码拷出来,重新编译(重新编译前先
cd出源码目录,再重新
cd入源码目录)。
(4)硬件环境搭建
首先,创建zynq工程,如图3所示:
图3 创建zynq工程
点击next,选择RTL Project,并勾上“Do not specify sources at this time”。继续next,选择板子,如图4所示:
图4 选择ZedBoard
点击左边的Create Block Design以新建设计,如图5和图6所示:
图5 Create Block Design
图6 输入工程名
然后,点击Add IP,如图7所示:
图7 添加IP核
在搜索框中输入zynq,选择结果列表里的第一个,如图8所示:
图8 选择处理器
然后点击Run Block Automation,在弹出的对话框中直接点OK,得到图9所示的界面:
图9
双击ZYNQ的模块,在弹出的对话框中,点击左边的ClockConfiguration,取消FCLK_CLK0前面的勾,如图10所示:
图10
然后,分别取消TTC、QSPI、32b GP AXI Master Ports,如图11所示:
图11 取消TTC、QSPI、32bGP AXI Master Ports
取消办法(以TTC为例):图11中点击TTC,取消图12中Timer0前面的勾:
图12 取消TTC
全部取消完毕,点击OK,回到图13中所示的界面:
图13 取消完毕
在source中,Design Sources下的system上右击选择“Create HDL Wrapper”,在弹出的对话框中选择OK即可。生成HDL后如图14所示:
图14 生成HDL
接着,生成比特流文件system.bit并保存好。弹出来的对话框选择Cancel,如图15所示:
图15
点击File->Export->Export Hardware,确保“Include bitstream”已勾上。点击OK,如图16所示:
图16 导出硬件
导出完毕后,点击File->Launch SDK,弹出的对话框直接OK即可。然后,在SDK中新建Xilinx ApplicationProject,如图17所示:
图17 新建ApplicationProject
点击next,工程名输入fsbl,其他不用改,继续next。选择Zynq FSBL工程,点Finish。如图18所示:
图18 选择ZynqFSBL
在新建的Application Project上右击选择Build,如图19所示。
图19 Build Application Project
Build成功后,在ZYNQ工程目录下将刚生成的system.bit文件、fsbl.elf文件拷贝出来。在SDK中,点击Xilinx Tools->Create Zynq Boot Image,如图20所示:
图 20 点击“Create Zynq Boot Image”
选择好.bif路径和输出BOOT.BIN的路径后,依次添加u-boot.elf、fsbl.elf和system.bit文件,点击Create Image生成BOOT.BIN文件,如图21所示:
图21 生成BOOT.BIN
至此,uImage和BOOT.BIN文件生成完毕。将它们连同官方pre-built的devicetree.dtb和uramdisk.image.gz一同拷贝到SD卡,插入ZedBoard卡槽,上电后可从串口调试工具看到Linux的启动信息,如图22所示。其中,默认用户名和密码均为root。
图22 启动Linux
【注意】由于此移植使用ramdisk作为根文件系统,因此开发板掉电后,对文件系统的所有修改将丢失。
WebServer的搭建参考
http://blog.csdn.net/xzyiverson/article/details/13614117