zynq linux环境移植,ZYNQ 7030 Linux 系统移植
ZYNQ 7030 Linux系统移植
手上有一块 ZYNQ-7030的演示板,是仿照Xilinx Zedboard设计的,但是与Zedboard又有所不同,因此花时间移植一下Linux系统。记录下这个过程,希望能够帮助到有类似需要的朋友。自己动手移植Zedboard Linux系统的过程和这个类似。
(0)准备SD卡
首先应当准备一张SD卡(8G即可),并利用分区工具分成两个区。
Linux上比较好用的分区工具是GParted.
至于Windows的话,可以使用Partition Manager.
第一个区大小为1G,FAT32格式,卷标为BOOT,存放引导文件Boot.bin和linux内核镜像uImage。实际上这个分区用到的大小是很小的,只有10M左右的样子。但是考虑到以后我们可以在这里备份一些源码的压缩包,所以设定为1G。
第二个区利用剩余的空间,划分为EXT3/EXT4格式,卷标为rootfs,用来存放根放文件系统。
玩过linux的同学可能都知道BootLoader,例如U-BOOT就是一种经常用到的BootLoader,那么BOOT.BIN是什么呢?其实BOOT.BIN是包含UBOOT的一种BootLoader。
ZYNQ芯片和其他纯ARM芯片有所差异,是ARM+FPGA的结构,所以上电后除了在ARM(称为PS端,Processing System,处理器系统)引导操作系统之外,还要做FPGA(称为PL端,Programmable Logic)的一些操作。
Boot.bin的构成如下:
FSBL(第一阶段启动代码,用来完成全局初始化和硬件配置)
[system.bit](可选,用来配置PL端,若不添加此项,可启动后由软件配置)
u-boot(用来初始化ARM端,引导linux操作系统)
(1)硬件位流(BitStream)生成
硬件位流决定了总体的系统结构。虽然说位流文件主要是用来配置PL端的,实际上和PS端关系也十分密切,FSBL的生成依赖于具体的硬件(主要是依赖于hdf文件(Hardware Definination File)),所以这里首先要生成硬件位流。
新建一个Vivado工程,选择合适的器件(我这里是xc7z030fbg484-3),然后建立原理图文件。把zynq添加进来。
点击Run Block Automation,自动连接DDR和FIXED_IO。把FCLK_CLK0连接到M_AXI_GPO_ACLK上。
在原理图上Creat HDL Wrapper,综合,生成位流文件。这样就完成了zynq的“最小系统”设计,并生成了比特流。
然后将我们的硬件设计(虽然我们没加什么硬件模块进来)导出到SDK。方便起见,直接选择File->Export->Export Harware。SDK工程直接和Vivado共享一个工程根路径。
选择OK。
(2)第一阶段启动代码BootLoader(FSBL)生成
不要关闭刚才的Vivado工程。选择File->Lauch SDK。OK。基于Eclipse的SDK就启动了。可以看到硬件配置信息都导入进来了。
新建一个应用工程,工程名字叫zc703_fsbl,类型选择StandAlone,选择下一步。
在工程模板中选择fsbl工程。
为了方便调试,可以查看fsbl阶段的打印结果。可以通过查看fsbl阶段打印输出,结合JTAG调试排查问题所在。
具体做法是在fsbl_debug.h文件中增加宏定义
#define FSBL_DEBUG_INFO
然后生成zc703_fsbl.elf.
(3)U-boot生成
从xilinx 官方下载uboot源码。
https://github.com/Xilinx/u-boot-xlnx
在linux系统里面解压。
当然Linux系统里面要提前配置好arm-xilinx-linux-gnueabi- 交叉编译环境。
解压好之后,进入uboot-xlnx-master目录,
修改一下Makefile.为了方便起见,直接修改ARCH和CROSS_COMPILE的设置。在250行左右,修改成下图:
保存。
然后拷贝一份zc702的配置文件。
在configs目录下,cp zynq_zc702_defconfig zynq_zc703_defconfig,然后把702相关的内容改成703。
可以通过make menuconfig配置一下选项,也可以不修改。试你的硬件而定。
这时候默认生成的uboot默认使用的是ramdisk作为文件系统。我们使用sd卡上的文件系统,所以还需修改一下 include/configs/zynq-common.h
我是通过sd卡启动的,所以把sd卡启动处的ramdisk代码删掉了一行,并且修改了bootm命令执行的内容。
然后拷贝到windows系统中来。
还要修改一下设备树(zynq_zc702.dts)里面的启动配置,默认是没有的,需要自己添加:
bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0";
具体的rootfstype根据你格式化的格式来。不过选ext4是可以兼容ext3的。
make
等待大概2分钟,就可以生成uboot了。
修改u-boot的文件名为u-boot.elf
mv u-boot u-boot.elf
同时把dts目录下生成的dt.dtb拷贝到windows系统中,改名为devicetree.dtb
可能有一部分开发人员想要限制PS端使用的内存大小,以往的修改方式是修改zynq_xxxx.h头文件里面的一个宏定义(CONFIG_SYS_SDRAM_SIZE),并且修改设备树的memory分支。在新版本的u-boot里面,把这个宏定义删掉了,所以直接修改设备树即可,但必须在编译u-boot的时候修改,否则单独编译设备树是不会起到实质性的作用的。按照我的理解,应该是u-boot编译的时候参照设备树的一些定义生成了一些配置,具体机制尚不明了,还希望有大牛能够多多指教~
(4)生成引导文件Boot.bin
在SDK中,选择Xilinx Tools->Create Boot Image,依次将生成的zc703_fsbl.elf、zc703_test.bit(可选)和u-boot.elf添加进来。即可生成BOOT.BIN文件。
(5)Linux内核定制
从xilinx Git下载内核源码,运用与u-boot类似的方法,即可编译内核。解释一下为什么这里选zc702,这是由于zc703与zc702的ARM核心是相同的,而且不像zedboard在板上集成了那么多外设。具体的配置可以根据你自己的硬件来。
注意生成uImage时,命令为:
Make uImage LOADADDR = 0x8000
这个loadaddr可以根据需要进行修改。
将Boot.bin、devicetree.dtb、uImage拷贝到sd卡的boot分区。
(6)解压根文件系统
在linux系统下,将其解压到rootfs分区。
解压命令:
tar -xvf --strip-components=1 liaro-[tab] /media/rootfs
即可。
但是要做一个软链接,否则执行可执行文件会出现如下错误(No such file or directory):
执行如下命令,即可:
ln -s /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3
(7)测试
将SD卡插入板卡,连接好串口,打开串口终端,即可看到启动信息:
FSBL启动信息:
Uboot启动信息:
linux启动过程:
剩下的时间,尽情享受开发的乐趣吧~~
zynq linux环境移植,ZYNQ 7030 Linux 系统移植相关推荐
- Linux环境变量:不可或缺的系统组成部分
目录标题 引言(Introduction) Linux环境变量的概念(Concept of Linux Environment Variables) 环境变量的作用与重要性(Roles and Imp ...
- QT在linux环境下读取和设置系统时间
QT在linux环境下读取和设置系统时间 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:Fedora12 开发软件:QT 读取系统时间 ...
- 林世霖. linux环境编程图文指南,linux环境编程图文指南
linux环境编程图文指南是一本linux编程环境配置指南,由林世霖.钟锦辉和李建辉三人共同编著.本书定位Linux环境编程入门与提高,全书拥有近400余幅案例图表,200多篇源代码,作者很多编程初入 ...
- Linux环境高级编程函数,Linux环境高级编程--出错处理(CLStatus)
很多程序库对外提供若干类,每个方法出错时如何告知调用者是否出错,以及出错码(在Linux上在error.h中的全局errno就是保存我们Linux程序执行的出错码的)?方法很多,为了简化起见,函数将返 ...
- linux 环境变量详解,Linux 环境变量详解及实例
Linux环境变量 ~/.bash_profile && ~/.bashrc 用户登陆Linux操作系统的时候,"/etc/profile", "~/.b ...
- linux环境下添加定时任务,linux下添加定时任务。
这周要做一个定时增量更新Elasticsearch索引的功能,以前没有做过定时更新,所以请教了下同事,使用crontab添加linux下的定时任务. 一.linux下定时执行任务的方法 在linux中 ...
- linux环境下查看进程,Linux下查看进程(程序)启动时的环境变量
背景: 因最近试安装Linux下的jira,有一个中文插件安装后,一旦设置开机启动后,它是英文,而在终端再重新启动一次后呢,似乎插件生效,它又恢复为正常中文界面,我首先想这这涉及到一个环境变量的问题, ...
- linux环境搭建实践总结,linux实习心得体会
linux实习心得体会 linux实习心得体会1 学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者 ...
- linux环境编程从应用,linux环境编程:从应用到内核
<UNIX环境高级编程>(简称APUE)几乎是Linux领域程序员人手必备的一本书.但在掌握和理解APUE的内容后,又该如何继续提高自己的技能,如何更深入地理解Linux环境编程及其背后的 ...
- linux环境变量设置方法,Linux环境变量设置指南
以配置java环境变量为例 [编辑]修改/etc/profile文件 此法对所有用户生效 在文件末尾加入以下内容: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAV ...
最新文章
- 差点被人类消灭的疾病,科学家说是苏联让它重新肆虐全球?
- mysql及mybatis知识点_MyBatis知识点详解
- Jenkins中切换devtoolset
- 二倍图三倍图什么意思_香港读研,图什么?
- System.Web.HttpException: 无法验证数据解决办法
- 应用统计学比上比不上计算机,计算机技术在医学统计学教学中应用的思考
- c++学习————VC报错解决方案(vc2013)
- 关于利用DEM生成水系图
- flash动画转html5 效果,一键把SWF转HTML5 canvas动画的工具-Fanvas
- Linux下进行微信小程序开发
- 华硕的主板装的服务器系统改win7,华硕主板win10改win7系统怎么操作
- 生成二维码并将Bitmap保存成图片
- java判断图片相同_java 识别图片相似度及图片是否相同
- Spring Boot修改启动神图
- shell脚本的坑坑洼洼
- 重新启动网卡时出错: failed because the control process exited with error code.
- k8s之pod资源管理
- 如何在局域网服务器部署网站,局域网如何对服务器配置
- 几款市面上的网管软件比较
- 从人工智能到人工心灵