ZedBoard移植Linux(精简版)及BOA服务器的搭建

2019-07-12 23:51发布

一、移植之前 官方资源链接: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-bootmake 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