本文将介绍如何利用上节搭建好的交叉编译环境编译嵌入式Linux所需的文件,包括u-boot、uImage(内核)、uramdisk.image.gz(文件系统)和devicetree.dtb(设备树)。

原料:

u-boot-xlnx.git

linux-xlnx.git

device-tree-xlnx-xilinx-v2014.4.zip

编译

1. U-Boot

~$ mkdir ZYNQ

~$ cd ZYNQ/

~/ZYNQ$ mkdir buildxil2014.4

~/ZYNQ$ cd buildxil2014.4/

~/ZYNQ/buildxil2014.4$ git clone https://github.com/Xilinx/u-boot-xlnx.git //或者先下载好,直接copy、解压

cd u-boot-xlnx

在编译之前,先进行配置,配置文件在u-boot-xlnx/include/configs下,打开zynq_common.h可查看信息。包括所需要的几个文件的名称等

make zynq_zed_config

make

cp u-boot u-boot.elf

如果需要安装python:

sudo apt-get --reinstall install python-minimal

在u-boot-xlnx/include/configs下,查看zynq_common.h,zynq_zed.h(优先),决定了内核等文件的名称。

本例使用zynq_zed_config:

“ethaddr=00:0a:35:00:01:22\0” \

“kernel_image=uImage\0” \

“kernel_load_address=0x2080000\0” \

“ramdisk_image=uramdisk.image.gz\0” \

“ramdisk_load_address=0x4000000\0” \

“devicetree_image=devicetree.dtb\0” \

“devicetree_load_address=0x2000000\0” \

“bitstream_image=system.bit.bin\0” \

“boot_image=BOOT.bin\0” \

2. uImage

使用配置文件:xilinx_zynq_defconfig(arch/arm/configs)

cd ~/ZYNQ/buildxil2014.4

git clone https://github.com/Xilinx/linux-xlnx.git //或直接copy下载好的linux-xlnx-xilinx-v2014.4.tar.gz

cd ~/ZYNQ/buildxil2014.4/u-boot-xlnx-xilinx-v2014.4/ //需要先安装u-boot-tools

sudo apt-get install u-boot-tools

cd ~/ZYNQ/buildxil2014.4/linux-xlnx-xilinx-v2014.4

make ARCH=arm xilinx_zynq_defconfig

make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage

cp arch/arm/boot/uImage

3. uramdisk.image.gz文件系统

这里不进行编译了,直接使用官网的:http://www.wiki.xilinx.com/Build+and+Modify+a+Rootfs

或:

wget http://www.wiki.xilinx.com/file/view/arm_ramdisk.image.gz/41943558/arm_ramdisk.image.gz

修改根文件系统

cp arm_ramdisk.image.gz ramdisk.image.gz

gunzip ramdisk.image.gz

mkdir file_tmp

sudo mount ramdisk.image -o loop ./file_tmp/

这样可以在file_tmp目录中对文件系统进行修改,修改完成之后umount并重新压缩即可

sudo umount file_tmp/

gzip ramdisk.image

//添加u-boot头部

sudo apt-get install u-boot-tools

mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz

如果需要进行修改,可以先将uramdisk.image.gz解压为uramdisk.image,再挂载到指定目录

4. devicetree.dtb

建议:

建立一个devicetree目录,将/scripts/dtc/dtc工具copy过来,每次使用时在其下建立工程目录;

将所需要的dts,dtsi文件copy到其下的工程目录下;

然后对工程目录打开终端:../dtc -I dts -O dtb -o devicetree.dtb system.dts即可;

如果只有ARM,没有使用PL部分:

在linux-xlnx/arch/arm/boot/dts/下,找到zynq-zed.dts及相关dtsi文件,copy到上述devicetree/xil2014.4/下:

../dtc -I dts -O dtb -o devicetree.dtb zynq-zed.dts

为PL配置devicetree

自己写的PL程序对于ARM来说相当于是新的外设,在xil提供的Linux内核中的dts是没有的,需要自己制作匹配的dts文件。SDK提供了根据在vivado中的硬件设计文件来生成设备树的工具。也可以自己手工编写或作出调整。

使用SDK制作和PL相匹配的devicetree。

SDK设置

下载device-tree-xlnx-xilinx-v2014.4.tar.gz,解压将device-tree-xlnx-xilinx-v2014.4文件夹。

添加至:bsp repo=D:\Xilinx\SDK\2014.1\data\embeddedsw\lib\bsp下,

使用SDK添加下载好的目录:SDK Menu: Xilinx Tools > Repositories > New… (bsp repo) > OK

注:由于device-tree-xlnx-xilinx-v2014.4.tar.gz,但是有win下路径\的问题;重新在https://github.com/Xilinx/device-tree-xlnx下载,device-tree-xlnx-xilinx-v2014.4.zip(clone in desktop),解决

SDK使用

新建:SDK Menu: File > New > Board Support Package > Board Support Package OS: device-tree > Finish

在弹出的的对话框中修改参数;比如bootargs内核的命令行参数,内核启动时传给内核,可设置为:console=ttyPS0,115200 root=/dev/ram rw earlyprintk

编译完成后在工程的\HW\Lab2-LedIP\Lab2-LedIP.sdk\device_tree_bsp_0下可以找到system.dts文件

将所有的dts,dtsi文件copy到虚拟机下的buildxil2014.4/linux-xlnx-xilinx-v2014.4下,使用dtc工具生成devicetree.dtb

../dtc -I dts -O dtb -o devicetree.dtb system.dts

注:这种方法在测试的时候有效,可以使用;但是在做HDMI的时候不能用了,没搞明白怎么回事。只有手工编写dts文件了。

小结

至此,已经编译了xil2014.4-Linux所需的文件了。当然现在还不能启动Linux,还需要制作BOOT.bin文件。这些方法适用于其他硬件,需要确定合适的配置文件。 在实际操作的过程中,由于工具版本、源代码出处及版本等问题,折腾了很多次才选择这种方法,而且经过后续验证有效。在参考陆佳华的书、前辈博客、各种论坛的过程中,遇到过xilinx、xup、zedboard、digilent、AD等出的源码或者编译好的文件,有的是面向ISE的(比如ISE、Vivado的设备树定义不一样,甚至vivado2014.1和2014.4都不完全一样),在参考资料和手头源码加个人关于这块不甚了解的情况下,经历了N次痛苦的过程。 由于时间问题,个中细节就不再详述了,看错误信息、查论坛一般可以解决。

linux下vivado编译卡死,vivado+zedboard之Linux编译相关推荐

  1. Windows/Linux下引用jar包,并用javac/java编译运行

    Windows/Linux下引用jar包,并用javac/java编译运行,有需要的朋友可以参考下. 1> Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, ja ...

  2. 手把手教你如下在Linux下如何写一个C语言代码,编译并运行

    文章目录 手把手教你如下在Linux下如何写一个C语言代码,编译并运行 打开Ubuntu终端 创建 helloworld.c 编译C文件 手把手教你如下在Linux下如何写一个C语言代码,编译并运行 ...

  3. FAT12文件系统镜像查看工具linux下的实现(nasm、g++联合编译

    FAT12文件系统镜像查看工具linux下的实现(nasm.g++联合编译) 简介 构思简介 附加链接 最终实现截图 代码 Makefile代码 my_print.asm代码 main.cpp代码 简 ...

  4. linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...

    linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...

  5. 在linux下vcd光盘提取,linux下抓取Vcd的视频文件[Linux安全]

    赞助商链接 本文"linux下抓取Vcd的视频文件[Linux安全]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判 ...

  6. linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案

    linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案 参考文章: (1)linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案 (2) ...

  7. linux中替换文件中的内容,linux下批量替换文件中的内容linux操作系统 -电脑资料...

    对于单个文件,使用sed命令很容易做到, grep命令可以查找单个文件或文件夹下文件中的内容,使用参数"r"或"-R"可以递归查找指定文件夹下的所有文件:参数& ...

  8. linux下如何使用configure/make/make install命令编译安装卸载程序

    源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install).安装成功的源码就是所谓的可执行文件,在你不需要的时候,也是可以删除/卸载(remove/u ...

  9. linux下安装codeblocks及写完程序之后编译成功但无法运行的原因

    一:在软件中心输入codeblocks,然后点击安装,等着装完就行了. 再按ctrl+alt+t 打开终端 输入 sudo apt-get install gcc 而后再输入sudo apt-get ...

  10. 解决linux下图形界面卡死不能操作的问题

    由于linux系统bug很多,所以有时候用着用这就会发生图形界面卡死不能操作的情况 具体解决方法如下 1.按住ctrl+alt+f2 然后进入了一个黑色的shell界面 注:linux下共有六个虚拟控 ...

最新文章

  1. autojs微博_js实现微博发布小功能
  2. MongoDB之在mac上设置环境变量
  3. MOON.ORM 3.5 MYSQL的配置及使用方法(最新版免费下载使用.欢迎加盟)
  4. 有关PHP、HTML单引号、双引号转义以及转成HTML实体的那些事!
  5. vfp:数据库中表间关系的参照完整性
  6. RuntimeError: Python is not installed as a framework 错误解决方案
  7. css入门自学笔记1
  8. [android 游戏源码]-体育游戏-疯狂足球源码
  9. android移动商城源码,o2o移动社区Android端app开源源码
  10. uniapp 跳转公众号获其他小程序
  11. 倒看北斗星---念霍去病
  12. KubernetesAPI审计日志方案
  13. 浙江大学计算机专业博导大牛,重磅!官方公布的“最强人脉高校”,校友全是大牛!...
  14. SumGNN部署实验lmdb.ReadonlyError: mdb_dbi_open: Permission denied
  15. webhook是什么_敏锐度调度,Webhook和使整个业务按计划进行
  16. “国防七子”经费暴增,清华足足362亿元,甩第二名101亿 |全国高校2022预算大公开...
  17. AutoCAD2016硬件加速不识别GTX970M独立显卡的解决方法
  18. 2017华为校招硬件逻辑工程师
  19. 华氏温度转化为摄氏温度
  20. 利用AFL进行模糊测试

热门文章

  1. HTML+JS好例子集锦
  2. S-function入门及案例详解(1)——S-function基础介绍及基本案例
  3. 斑马打印机-RFID打印机 ZT411R最全攻略,从0上手 通过【JAVA生成ZPL指令+ts24.lib+ip:端口】的方式调用打印,无须安装驱动
  4. 电商系统架构全链路解析
  5. python:base64与图片的互转
  6. c语言中开方,C++_详细解析C语言中的开方实现,关于C语言中的开方计算,首先 - phpStudy...
  7. 360签名工具 linux,360签名工具-360apk签名工具(qihoo360 apk signer)下载 v1.0官方版--pc6下载站...
  8. 中小学电教信息计算机管理员职责,中小学电教教师岗位职责
  9. ENVI实验教程(2)遥感图像预处理—辐射校正
  10. K60学习笔记(二)——FTM多功能定时器模块