如何在zynq上挂linux_第二章
零基础学习ZYNQSOCLinux开发
零基础学习ZYNQSOCLinux开发
说到学习ZYNQ+SOC+Linux开发,我认为主要应该细分为lian两大点:zynq,soc合为一个点,linux为一个点。
下面我就给大家介绍学习的流程和路线。
二,如果各位能按部就班的阅读并自己动手编写测试《ZYNQ+SOC修炼秘籍-最全面的pdf》里面的内容,我相信大家对于zynq的硬件部分已经足够了解,并且能够写出基于FPGA+ARM构架的裸奔程序应用了。
那么接下来,我们就应该学习管如何在zynq平台上搭建Linux操作系统了。
三,在完成了u-boot的编译,kernel的编译,设备树的编译,文件系统的编译挂载后,一个完整的Linux系统就搭建成功了。
不过我相信在过程中肯定会遇到或多或少的各种各样的问题,在此本人为大家分享一些在过程中遇到的问题以及解决方法,水平有限望大神勿喷。
(4)以上问题都解决了后,自然是想自己动手编写Linux下的驱动咯。
只有有了驱动才能使得FPGA为Linux所用,那么接下来给大家分享几个编写Linux下的axi dma驱动的资料供大家参考。
四,以上介绍大部分均为本人在学习,做项目时的总结,在此分享给大家,希望对广大的学习群体有所帮助,本人水平有限,在此希望各路大神们勿喷。
接下来就靠大家自己努力加油了!。
ZYNQ:使用PetaLinux构建Linux项目
ZYNQ:使⽤PetaLinux构建Linux项⽬参考⽂档:ug1144-petalinux-tools-reference-guide.pdf环境安装tofrodos iproute2 gawk gcc g++ git make net-tools libncurses5-dev tftpd zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libgli 创建⽬录:su rootmkdir /opt/envchown -R huangshuchao:embd /opt/env/#chown -R huangshuchao:embd /opt/env/# 2016.4以后的petalinux不能以超级权限去安装,必须在$下安装petalinux。
安装./petalinux-v2018.3-final-installer.run /opt/env/petalinux/2018.3Ubuntu bashdpkg-reconfigure dash--> NO使⽤每次都需要:source /opt/env/petalinux/2018.3/settings.sh导⼊硬件拷贝design_1_wrapper_hw_platform_0到Linux创建项⽬petalinux-create --type project --template zynq --name 项⽬名称(⽬录)INFO: Create project: ax_petaINFO: New project successfully created in /home/huangshuchao/ax_peta导⼊硬件信息输⼊以下命令:硬件信息包:design_1_wrapper_hw_platform_0_test.tgz(来⾃13_vdma_to_qspi_sd)petalinux-config --get-hw-description ~/hw-vivado/design_1_wrapper_hw_platform_0_test配置优化我们这⾥再做⼀些优化⼯作,以⽅便我们的使⽤:离线编译注意,修改镜像时,填⼊的路径是以file://开头的。
ZYNQFLASH+EMMC手动移植LINUX启动
ZYNQFLASH+EMMC⼿动移植LINUX启动前⾔虽可使⽤Petalinux进⾏移植,简单⽅便,但为了更清楚明⽩的了解整个流程,还是尝试了⼀波⼿动移植。
参考资料流程对于⼿动移植,所需的⽂件为:BOOT.bin(FSBL+fpga_bit⽂件+u_boot.elf)、uImage、devicetree.dtb、uEnv.txt、⽂件系统⽂件放置位置说明:FLASH:BOOT.bin(FSBL+fpga_bit⽂件+u_boot.elf)EMMC:第⼀个分区放置:uImage、devicetree.dtb、uEnv.txt第⼆个分区放置:⽂件系统启动流程为:板⼦设置为QSPI启动模式,FSBL执⾏调u-boot执⾏,u-boot根据uEnv.txt调EMMC分区1中的内核执⾏,内核最后跳到分区⼆中的⽂件系统。
FSBL、bit⽂件、uImage、⽂件系统都可复⽤SD卡移植模式下的内容:参考参考资料第⼀个链接。
本⽂章主要讲述的重点在于:u-boot、设备树、uEnv.txt的更改部分板⼦主要信息说明:板⼦芯⽚:ZYNQ7035,板⼦的调试打印串⼝为PS0,板⼦上有SD卡(SD0)、EMMC(SD1),板⼦上有FLASH。
其他外设不赘述。
u-boot移植说明:NOTE:u-boot xilinx-v2018.3版本的zynq-common.h跟xilinx-v2018.1版本的不⼀样,这⾥检出v2018.1版本使⽤。
主要是CONFIG_EXTRA_ENV_SETTINGS环境变量不⼀致。
默认的如下所⽰:/* Default environment */#ifndef CONFIG_EXTRA_ENV_SETTINGS#define CONFIG_EXTRA_ENV_SETTINGS \"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" \"loadbit_addr=0x100000\0" \"loadbootenv_addr=0x2000000\0" \"kernel_size=0x500000\0" \"devicetree_size=0x20000\0" \"ramdisk_size=0x5E0000\0" \"boot_size=0xF00000\0" \"fdt_high=0x20000000\0" \"initrd_high=0x20000000\0" \"bootenv=uEnv.txt\0" \"loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0" \"importbootenv=echo Importing environment from SD ...; " \"env import -t ${loadbootenv_addr} $filesize\0" \"sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0" \"preboot=if test $modeboot = sdboot && env run sd_uEnvtxt_existence_test; " \"then if env run loadbootenv; " \"then env run importbootenv; " \"fi; " \"fi; \0" \"mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. && " \"mmcinfo && " \"load mmc 0 ${loadbit_addr} ${bitstream_image} && " \"fpga load 0 ${loadbit_addr} ${filesize}\0" \"norboot=echo Copying Linux from NOR flash to RAM... && " \"cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} && " \"cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} && " \"echo Copying ramdisk... && " \"cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"qspiboot=echo Copying Linux from QSPI flash to RAM... && " \"sf probe 0 0 0 && " \"sf read ${kernel_load_address} 0x100000 ${kernel_size} && " \"sf read ${devicetree_load_address} 0x600000 ${devicetree_size} && " \"echo Copying ramdisk... && " \"sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"uenvboot=" \"if run loadbootenv; then " \"echo Loaded environment from ${bootenv}; " \"run importbootenv; " \"fi; " \"if test -n $uenvcmd; then " \"echo Running uenvcmd ...; " \"run uenvcmd; " \"fi\0" \"sdboot=if mmcinfo; then " \"run uenvboot; " \"echo Copying Linux from SD to RAM... && " \"load mmc 0 ${kernel_load_address} ${kernel_image} && " \"load mmc 0 ${devicetree_load_address} ${devicetree_image} && " \"load mmc 0 ${ramdisk_load_address} ${ramdisk_image} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; " \"fi\0" \"usbboot=if usb start; then " \"run uenvboot; " \"echo Copying Linux from USB to RAM... && " \"load usb 0 ${kernel_load_address} ${kernel_image} && " \"load usb 0 ${devicetree_load_address} ${devicetree_image} && " \"load usb 0 ${ramdisk_load_address} ${ramdisk_image} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; " \"fi\0" \"nandboot=echo Copying Linux from NAND flash to RAM... && " \"nand read ${kernel_load_address} 0x100000 ${kernel_size} && " \"nand read ${devicetree_load_address} 0x600000 ${devicetree_size} && " \"echo Copying ramdisk... && " \"nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"jtagboot=echo TFTPing Linux to RAM... && " \"tftpboot ${kernel_load_address} ${kernel_image} && " \"tftpboot ${devicetree_load_address} ${devicetree_image} && " \"tftpboot ${ramdisk_load_address} ${ramdisk_image} && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_norboot=echo Copying Image from NOR flash to RAM... && " \"cp.b 0xE2100000 0x100000 ${boot_size} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_nandboot=echo Copying Image from NAND flash to RAM... && " \"nand read 0x100000 0x0 ${boot_size} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_qspiboot=echo Copying Image from QSPI flash to RAM... && " \"sf probe 0 0 0 && " \"sf read 0x100000 0x0 ${boot_size} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_sdboot=echo Copying Image from SD to RAM... && " \"load mmc 0 0x100000 ${boot_image} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \"rsa_jtagboot=echo TFTPing Image to RAM... && " \"tftpboot 0x100000 ${boot_image} && " \"zynqrsa 0x100000 && " \"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \DFU_ALT_INFO \BOOTENV#endif可以看到其上定义了⼀堆的东西及不同的启动指令。
基于Zynq7000高清视频采集处理系统Linux移植与应用程序设计
2、系统实现
(1)硬件实现
本系统的硬件平台采用Xilinx Zynq-7000开发板,以ZYNQ-7000为核心,连 接摄像头、SD卡、网口等外部设备进行系统搭建。其中,摄像头通过CAMIF接口 与FPGA相连,实现图像采集;SD卡通过SDIO接口与ARM Cortex-A9处理器相连, 实现数据存储;网口通过EMAC接口与FPGA相连,实现千兆以太网传输。
Zynq7000是Xilinx公司推出的一款基于ARM Cortex-A9内核的FPGA芯片。它 具有高度的可编程性和灵活性,同时集成了丰富的外围设备和高性能的内部资源。 在数字图像处理方面,Zynq7000具有PS和PL可编程性,用户可以通过编程来实现 各种数字图像处理算法,同时其DDR3存储器可以提供快速的数据存储和读取。
移植过程
在Zynq7000高清视频采集处理系统上移植Linux操作系统主要包括以下几个 步骤:
1、获取Linux内核源码并修改配置:根据硬件平台的需求,修改Linux内核 源码的配置文件,以支持Zynq7000硬件平台的特性和需求。
2、编译内核:使用交叉编译器编译修改后的Linux内核源码,生成可在 Zynq7000上运行的Linux内核映像文件。
Zynq7000是Xilinx公司推出的一款基于ARM Cortex-A9架构的FPGA处理器, 它同时集成了高性能的DSP和FPGA可编程逻辑单元,可以满足各种复杂算法的运 行需求。Zynq7000具有高速的DDR内存接口,可以大大提升数据处理速度,此外, 其内置的DMA引擎和高速串行接口也可以满足各种数据传输需求。
2)本系统的架构设计合理,能够满足图像采集处理的实时性要求。
3)本系统的软件实现采用了驱动程序、图像处理算法程序和应用程序三个 层次的结构,具有可维护性和可扩展性强的特点。
Xilinx Zynq 开发手册
如何在zynq上挂linux_第二章
上一章讲到这么一个网页:/resources/tools-software/linux-drivers/platforms/zynq 你打开看看,密密麻麻好多英文啊还有各种链接本人时间确实有限,简略讲点要紧的部分吧。
这个网页讲了三大部分1,u-boot,uImage,和dtb文件的编译2,BOOT.bin的生成3,UI界面下载和释放教程第一章有这么一个图:其实要启动一个linux,你需要的就是以下四个文件:BOOT.bindevicetree.dtbuImage和uramdisk.image.gzBOOT.bin(来自于编译得来的u-boot文件和网页提供的参考设计)devicetree.dtb(编译得来)uImage(编译得来)和uramdisk.image.gz(教程第一章里已经讲了怎么来的,xilinx网站之直接下载下来就行)所以,在linux下要编译的是这几个文件:u-bootuImagedevicetree.dtb然后你就需要一台linux的电脑了VNC接入工作站也行,虚拟机也行,或者你干脆装一台linux。
有两点注意:我试过14.04版的Ubuntu,在解压缩一个zip包的时候会出错,提示文件名过长。
我也试过一个桌面版的RHEL 6.4,结果里面没装GCC,而GCC在编译过程里是必须有的。
(查看装没装GCC的办法之一是进/usr/bin看一下有没gcc文件)最后搞成功的是一台装了GCC的RHEL 6.3桌面版。
现在准备下载一堆东西吧第一样,交叉编译环境安装包/member/mentor_codebench/xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 141M大小,去下载吧。
开个迅雷或者QQ炫风的会员会很快的。
第二样,u-boot编译环境下载页面:https:///Xilinx/u-boot-xlnx点右边的“Download ZIP”就开始下载,然后你可以指定下载目录。
linux与开发板挂接详细教程
linux与开发板挂接详细教程虚拟机下的linux与开发板挂接详细教程由于自己的笔记本没有串口,要跟开发板进行串口通信就需要一个USB转串口的线,因而笔记本需要安装一个USB转串口线的驱动。
本教程以64位win7为例。
32位的机器自己去网上找相应的ch340_win7_32位的驱动程序。
1、解压ch340_win7_x64_专用驱动.zip到一指定文件夹。
然后右键我的电脑——管理——设备管理器——端口(COM和LPT)——USB2.0**,你们这里应该是可以看到一个黄色的感叹号。
我的安装好了,因此不是显示的USB2.0了。
如图1图12、然后右键那个带黄色感叹号的USB2.0——更新驱动程序软件——浏览计算机以查找驱动程序软件,然后点那个浏览,找到你第一步把驱动解压到的那个文件夹。
那个包括子文件夹要勾上。
如图2图23、点下一步。
稍等一会那个USB转串口线的驱动就装好了。
装好好感叹号没了,那个括号写的COM5每个人都不一样。
可能是COM4、COM7、等都不一样。
4、没连接的将开发板与笔记本连好,上电。
5、打开虚拟机。
确保已经添加串口,并且确认是否将启动时连接勾上,下一栏选择自动检测。
默认的应该是已经配好了的。
如图3图36、打开终端,输入minicom——回车,若连不上可以复位。
正常的话是能连上的。
如图4、图47、现在我们先配置下我们的开发板ip。
如图输入命令:ifconfig eth0 192.168.128.24,回车。
这样我们的开发板的ip就配置成了192.168.128.24。
如图5图58、设置我们的虚拟机。
如图6。
选择编辑——虚拟网络编辑器,在出来的菜单选项中按图7进行设置,然后应用——确定。
图6图79、在选择虚拟机中菜单栏中的的虚拟机——设置——网络适配器,然后如图8设置。
图810、然后配置我们的linux的ip。
重新打开一个新终端。
输入命令setup,选择网络设置,选择你的网卡(不知道那块是的就记住显示最长的)。
基于 ZYNQ 的嵌入式 Linux 系统开发嵌入式课程设计报告
嵌入式系统课程设计报告题目基于ZYNQ的嵌入式Linux系统开发2022年春季学期一、实验目的1、完成BootLoader编译2、完成Linux内核编译3、利用ZYBO实现Linux移植二、环境需求OS:Linux,Ubuntu64位Tools:Vivado2014.2(Windows版)、Vivado2015.4(Linux版)三、实验内容(1)嵌入式Linux移植流程基本的开发步骤:1、更新国内镜像源和安装基本的32位兼容库2、利用交叉编译工具编译BootLoader3、安装u-boot-tools套件并编译Linux内核4、配置设备树并编译设备树文件5、根据zybo board的引脚配置文件生产新的项目6、打开项目并生成Bitstream文件7、生成FSBL文件8、SD卡分区与文件系统移植9、上电测试观察串口信息图1ZYNQ移植Linux基本流程(2)ZYNQ-7000系列的Linux系统开机流程图2ZYNQ-7000运行Linux系统的开机流程图复位后,系统内建的Boot ROM加载第一阶段开机程序(FSBL),接着加载比特流(bitstream)去初始化整个可程序逻辑(Programmable Logic, PL)。
最后U-Boot加载LinuxKernel、DeviceTree以及RootFileSystem启动Linux系统。
四、实验步骤1、Linux下Vivado环境变量设定。
在打开一个新的终端之后,必须将终端的环境变量加上Vivado的文件环境变量或者可以利用终端启动脚本将Vivado环境变量在启动时加入。
source/opt/Xilinx/Vivado/2015.4/settings64.sh2、编译u-boot来作为BootLoader。
(1)设置国内镜像源,用apt包管理工具更新源目录,安装相关的兼容库:(2)打开u-boot-Digilent-Dev。
修改zynq_zybo.h和zynq_common.h(3)配置和利用交叉编译工具编译u-boot(4)将U-boot复制为u-boot.elf文件3、编译Linux内核(1)安装u-boot-tools工具(2)编译linux内核进入Linux-Digilent-Dev文件夹,config为xilinx_zynq_defconfig以及设定UIMAGE_LOADADDR0x8000,并指定架构为ARM架构,利用交叉编译工具编译uImage文件(3)配置设备树DeviceTree将原来的终端设备在设备树文件里替换之后再编译4、用Vivado生成Bitstream文件打开Vivado执行create_project.tcl,使用Vivado打开linux_bd.xpr生成的Block Design点选Program and Debug->Generate Bitstream产生比特流(bitstream)5、建立FSBL(First Stage Boot Loader,FSBL)6、生成BOOT.bin,用Create Image生成BOOT.bin7、利用gparted分区SD卡为fat32和ext4两个分区8、将Boot.bin、devicetree.dtb、uImage三个文件拷贝到SD卡fat32分区9、将SD卡ext4分区挂载在/tmp/linaro文件下,将文件系统用rsync同步从/tmp/linaro到SD卡ext4分区下。
xilinx linux例子
xilinx linux例子
Xilinx Linux 是 Xilinx 公司提供的一种基于 Linux 操作系统的解决方案,用于在Xilinx 可编程逻辑设备上运行 Linux 系统。
以下是一个简单的 Xilinx Linux 例子:假设你要在 Xilinx Zynq 系列的 SoC(System on Chip)上运行 Linux 系统。
你可以按照以下步骤进行操作:
1. 下载和安装 Xilinx 的开发工具链,如 Vivado Design Suite。
2. 在 Vivado 中创建一个 Zynq 工程,并选择适当的硬件配置和设计。
3. 配置 Linux 内核,包括选择适当的内核版本、配置设备树等。
4. 生成设备树文件(Device Tree Blob,DTS),并将其与 Linux 内核一起编译。
5. 使用 Xilinx 的工具链将 Linux 内核和设备树文件下载到 Zynq 设备中。
6. 配置和启动 Linux 系统,可以通过串口终端进行交互。
一旦 Linux 系统在 Zynq 设备上运行,你可以使用标准的 Linux 工具和应用程序进行开发和调试。
你可以编写应用程序、使用网络、访问文件系统等,就像在普通的 Linux 系统上一样。
这只是一个简单的例子,实际的 Xilinx Linux 开发涉及更多的细节和步骤,具体取决于你的需求和硬件平台。
Xilinx 提供了详细的文档和教程来指导开发者完成整个流程。
希望这个例子对你有帮助。
如果你有更具体的问题或需要进一步的帮助,请提供更多信息,我将尽力为你提供更详细的解答。
zynqmpsoc linux 开发 例子
zynqmpsoc linux 开发例子引言概述:Zynq MPSoC是一款强大的嵌入式处理器,具有高度集成的硬件和软件平台。
它结合了Xilinx的可编程逻辑(PL)和ARM的处理系统(PS),为开发者提供了广泛的应用开发能力。
本文将介绍Zynq MPSoC Linux开发的例子,帮助读者了解如何使用这个平台进行应用开发。
正文内容:1. Zynq MPSoC的基本概念和架构1.1 Zynq MPSoC的硬件结构1.2 Zynq MPSoC的软件架构1.3 Zynq MPSoC的特点和优势2. Zynq MPSoC Linux开发环境的搭建2.1 安装Xilinx Vivado开发工具2.2 创建Zynq MPSoC项目2.3 配置Linux开发环境3. Zynq MPSoC Linux应用的开发3.1 编写设备驱动程序3.2 构建Linux内核3.3 运行Linux应用程序4. Zynq MPSoC Linux开发的调试和优化4.1 使用调试工具进行调试4.2 优化Linux应用程序的性能4.3 解决常见的问题和错误5. Zynq MPSoC Linux开发的应用实例5.1 使用Zynq MPSoC进行图像处理5.2 在Zynq MPSoC上运行机器学习算法5.3 开发嵌入式Linux系统总结:通过本文的介绍,我们了解了Zynq MPSoC的基本概念和架构,以及搭建Zynq MPSoC Linux开发环境的步骤。
我们还学习了如何进行Zynq MPSoC Linux应用的开发、调试和优化。
最后,我们通过几个应用实例展示了Zynq MPSoC Linux 开发的广泛应用领域。
希望本文能帮助读者更好地理解和应用Zynq MPSoC Linux 开发的例子。
Xilinxzynq-7000系列FPGA移植Linux操作系统详细教程
Xilinxzynq-7000系列FPGA移植Linux操作系统详细教程Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程⼀:前⾔最近⼿上压了⼀块⽶联客的Miz7035,⼀块xilinx zynq-7000系列的开发板,想着正好学习⼀下linux在ARM9上的移植,⽹上基本都是ZC702、zed的教程,这对于买了⾮标准板的⼈来说就不太友好,很多⽂件都不知道是怎么⽣成的。
本着学习加分享的⼼态,把这两天移植linux的过程写下来,尽可能详细。
驱动和系统移植不是我的专长,很多地⽅我也是知其然不知其所以然,写得不对的地⽅欢迎指正。
⼆:前期准备1、⼀台安装好linux系统的主机,我安装的是centos7.2.2、⼀块zynq-7000系列的FPGA开发板,我⼿上的是⽶联客miz7035,其他zynq系列⼀样通⽤。
3、vivado开发环境,我安装的2018.2版本三:操作步骤1.设置交叉编译环境因为最终运⾏在arm9上,所以uboot、内核,⽂件系统编译都需要⽤arm-linux交叉编译⼯具,zynq2000使⽤的是arm-linux-gnueabihf,交叉编译⼯具可以从⽹上单独下载,也可直接使⽤vivado⾃带的交叉编译⼯具。
使⽤⽅法也很简单source /opt/Xilinx/SDK/2018.2/settings64.sh或者gedit /opt/Xilinx/SDK/2018.2/.settings64-SDK_Core_Tools.sh将该⽂件中的内容全部复制到bashrc,更新环境变量,这样在新的终端中打开,环境变量也不会消失。
2.u-boot编译进⼊u-boot⽂件夹,make distclean //清除配置⽂件和编译中间结果make CROSS_COMPILE=arm-linux-gnueabihf- zynq_mz7x_defconfig //重新配置,⽣成makefile,具体板⼦不⼀样,在U-Boot/configs⽂件夹下make CROSS_COMPILE=arm-linux-gnueabihf- tools //编译开发所需要的⼯具make CROSS_COMPILE=arm-linux-gnueabihf- //编译,完成后⽣成⼀个elf⽂件u-boot,uboot.bin,u-boot.srec等⽂件最后把编译⽣成的u-boot后缀改成.elf,连同u-boot.img和spl/boot.bin,⼀共三个⽂件拷贝出来。
zynqmpsoc 通用linux开发方法
zynqmpsoc 通用linux开发方法### Zynq MPSoC 通用Linux开发方法在当今的嵌入式系统领域,Zynq MPSoC以其高性能和灵活性成为了工程师们喜爱的选择。
Zynq MPSoC结合了ARM Cortex-A53和Cortex-R5处理器与可编程逻辑,为开发者提供了一个强大的平台来进行Linux开发。
以下将详细介绍基于Zynq MPSoC的通用Linux开发方法。
#### 一、开发环境搭建1.**硬件要求**:- Zynq MPSoC开发板一块(如Xilinx Zynq UltraScale+ MPSoC系列);- 网络接口用于在线下载和安装开发工具;- 外接显示器、键盘和鼠标,用于交互式开发。
2.**软件要求**:- 安装Xilinx Vivado HLS和Vitis开发套件;- 安装必要的Linux操作系统镜像和交叉编译工具链;- 配置SSH服务,便于远程登录和文件传输。
#### 二、系统启动和配置1.**下载和烧录Linux镜像**:- 从Xilinx官方网站或其他可靠来源下载适合Zynq MPSoC的Linux 镜像;- 使用Vivado HLS将镜像烧录到开发板的SD卡或者QSPI闪存中。
2.**配置引导加载程序(Bootloader)**:- 根据开发板硬件配置和需求,选择合适的引导加载程序,如U-Boot;- 配置U-Boot以加载Linux内核和设备树。
3.**设备树(Device Tree)配置**:- 创建或修改设备树源文件(.dts),以描述硬件配置和设备信息;- 编译设备树源文件生成设备树二进制文件(.dtb)。
#### 三、Linux内核与驱动开发1.**下载Linux内核源码**:- 从Linux内核官方网站下载与Zynq MPSoC相匹配的稳定版内核源码;- 或者使用Xilinx提供的预配置内核源码。
2.**配置和编译内核**:- 根据开发板硬件和需求运行`make menuconfig`进行内核配置;- 使用`make`命令编译内核和模块。
从零开始-ubuntu上搭建zynqlinux 编译环境
主机环境:ubuntu10.04 lts X64_64bit编译器:arm gnu tools for Xilinx参考网址:/zynq-tools(这个网址的内容真的需要更新了)详细步骤:以下操作均在root用户下进行,官方参考网址的东西仅是“参考”的1,下载交叉编译器在ubuntu里下载arm-2010.09-62-arm-xilinxa9-linux-gnueabi.bin安装文件,网址:https:///GNUToolchain/kbentry62,放到<myPath>/tools/中2,同步xilinx的linux kernelmkdir <myPath>/kernelcd <myPath>/kernelgit clone git:///linux-2.6-xlnx.git然后就等着吧,总共1.3G的代码,下载完毕后,cd <myPath>/kernel/ls有个新的文件夹linux-2.6-xlnx,这个就是zynq的linux kernel代码了。
需要注意的是,虽然名字里面有个2.6,但实际的kernel是3.3的,因为这个是主线版本,下载下来的是xilinxpatch的最新kernel。
说不定你同步的时候已经是3.4/3.5了。
如果你的网络不支持git,可以用http代理服务,先建立一个git-proxy.sh 文件,在里面写上:#!/bin/shexec corkscrew <name of proxy server> <port> $*然后export一下,bash> export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"上面/using-git 上的方法,我的实际情况比较特殊,网络服务器还要用户名和密码,怎么办呢,稍微麻烦一点:将git-proxy.sh中的内容修改成这样滴:#!/bin/shexec corkscrew 172.16.0.252 8080 $* /disk2data/authfile然后再在git-proxy.sh同目录下建立一个authfile文件,内容为用户名:密码最后export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"至此我的电脑也可以无忧无虑的git啦3,安装交叉编译器cd /<myPath>/tools/chmod 755 arm-2010.09-62-arm-xilinxa9-linux-gnueabi.bin./ arm-2010.09-62-arm-xilinxa9-linux-gnueabi.bin然后出现了安装界面,选择安装的文件夹等等,可以自己设,嫌麻烦就一路回车或者“yes”就行了。
基于ZYNQ芯片的外设驱动技术方案
一、BootLoader的移植制作 (2)1、生成uboot.elf文件 (3)2、system.bit生成 (5)3、创建fsbl (8)4、生成BOOT.BIN (9)二、配置并编译linux内核 (10)1、修改设备树内容 (10)2、配置编译linux内核 (12)三、Linux设备驱动移植 (14)1、Linux设备驱动模型 (14)2、Linux设备驱动移植 (15)在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。
可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。
在一个基于zynq的嵌入式Linux系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
想要在zynq芯片上顺利启动Linux并且驱动相关模块正常工作,首先需要正确移植BootLoader。
作为初始化硬件平台的一段Bare Metal代码,Bootloader的移植也并入了我们的工作。
所以综合起来说,我们的工作主要分为了三个部分:Bootloader的移植以及Linux内核和设备驱动的移植。
在进行移植工作之前,首先要做的是要在宿主机上面搭建好我们目标板的开发平台,以及下载好uboot源代码,Linux内核源代码以及相关驱动源代码。
(有的模块的驱动源代码在Linux内核源代码中已经包含进去了,那么就不用单独下载。
需要下载的驱动源代码只是针对标准Linux内核中不支持的部件而言。
)一、BootLoader的移植制作每一种操作系统都需要有自己的引导程序,最为人们所知的就是Windows 的BIOS。
Zynq--Linux移植
Zynq--Linux移植Zynq--Linux移植1.安装VMware Workstation 102.装载Fedora17的镜像。
3.安装完毕后,启动。
从Application中添加Terninal到Activitise。
4.切换到root用户。
命令:su root。
需要输入构建系统时的root账户密码。
5.更新Fadora。
命令:yum update。
6.切换回自己用户。
su bill7.从Mentor上下载交叉编译工具:arm-2013.11.3.-arm-none-linux-gnueabi.b in,并拷到Linux的home/(用户)下。
8.安装交叉编译工具。
首先修改安装工具的执行权限,chmod +x *.bin ;安装命令: ./ arm-2013.11.3.-arm-none-linux-gnueabi.b in9.然后再次用安装命令开始GNU安装: ./arm-2013.11.3.-arm-none-linux-gnueabi.b in10.设置环境变量PATH。
exportPATH=/home/bill/MentorGraphics/Sour….-linux/bin:$PATH。
11.设置环境变量。
exportCROSS_COMPILE=arm-none-linux-gnueabi- 12.构建u-boot.1)参考附录1,从Github上下载u-boot的源码库(/xilinx) >u-boot-xlnx > release >xilinx-v2013.4 > Source code(tar.gz)或(zip)2)c dxilinx_vivado134/u-boot-xlnx-xilinx-v2013.43)m ake distclean由于U-boot中的UART使用的时钟默认是50MHz,而vivado构建的系统中UART的时钟是100MHz,导致UART的波特率不是设置要求的115200.故要求修改构建U-boot的源文件xilinx\u-boot-xlnx-xilinx-v2013.4\include\configs\zynq_common.h。
Zynq 7015 linux跑起来之构建ARM核
点Run ห้องสมุดไป่ตู้lock Auto...会自动根据所选的板子,自动配置
OK
然后双击进去,进行配置,最好能和自己的板子实际情况对应起来,这里对PL部分都不做配置,配置完后保存。
这是配好后的,这样看起来线比较难看,不要慌,右键选regenerate layout
然后在ARM_CORM上右键Generate Output Products
Generate
然后在ARM_CORM上右键Create HDL wraper,然后全部保存,因为这个软件是流程式作业,会从头执行到尾,所以我这里设置好bit stream相关的设置
Zynq 7015 linux跑起来之构建ARM核
首先,这里跑linux主要是PS部分的,这里暂时不用PL部分。
打开vivado新建一个project.
项目名和保存路径
RTL project
next
next
next
选Board,如果选器件,是一样的,只是需要去根据实际情况设置一些东西。
然后Next
完成。Create Block Design这里我们需要构建PS核
然后点Generate bitstream lic不出问题,正常等待一会儿就会OK.
以上是我没有保存才有的提示,如果都保存了,就不会提示了。
至此,文件都已生成,我们不做其他操作,直接选view Reports就OK了。下一节介绍如何导入到SDK然后新建一个应用工程,生成FSBL.
米联客ZYNQ-LINUX教程
版本信息:版本REV2018时间05/22/2018XILINX ZYNQ LINUX篇基于米联MZ7X系列电子版自学资料常州一二三电子科技有限公司溧阳米联电子科技有限公司版权所有米联客学院04QQ群:516869816米联客学院03QQ群:543731097(半满)米联客学院02QQ群:86730608(满)米联客学院01QQ群:34215299(满)感谢您使用米联客ZYNQ系列开发板,以及配套教程。
本教程将对之前编写的《修炼秘籍》部分内容做出改进,并且增加新的课程内容。
本教程不仅仅适合用于米联客开发板,而且可以用于其他的ZYNQ开发板。
软件版本:VIVADO2017.4(提供安装好环境的虚拟机)版权声明:本手册版权归常州一二三电子科技有限公司/溧阳米联电子科技有限公司所有,并保留一切权利,未经我司书面授权,擅自摘录或者修改本手册部分或者全部内容,我司有权追究其法律责任。
版主大神们都等着大家去提问--电子资源论坛扫描以下二维码注册论坛:微信公众平台:电子资源论坛目录XILINX ZYNQ LINUX篇 (1)基于米联MZ7X系列 (1)CH01-debian9虚拟机和VIV ADO的安装 (6)1.1概述 (6)1.2 debain9虚拟机安装 (6)1.3 debian9下安装vivado软件 (17)CH02_带HDMI输出的裸机工程 (22)2.1概述 (22)2.2解压开发包 (22)2.3 VIV ADO驱动的安装与验证 (22)2.4 创建VIVADO工程 (24)CH03_恢复出厂系统及烧录EMMC (31)3.1概述 (31)3.2 使用脚本工具烧录SD卡 (31)CH04_LINUX移植debian系统 (36)4.1概述 (36)4.2 清理磁盘脚本 (36)4.3创建共享文件夹,及LINUX下移植debian系统 (36)CH05_从EMMC加载debian系统 (41)5.1概述 (41)5.2 从EMMC加载debian系统 (41)CH06_Ubuntu系统移植 (45)6.1概述 (45)6.2 移植Ubuntu系统 (45)CH07_BuildRoot系统移植 (54)7.1概述 (54)7.2 移植BuildRoot系统 (54)CH08_SSH远程访问开发板 (61)8.1概述 (61)8.2 SSH的概述 (61)8.3 SSH提供两种验证方式 (61)8.4 SSH远程访问开发板 (61)CH09_HelloWorld APP程序 (66)9.1概述 (66)9.2 SSH提供两种验证方式 (66)9.3 在发板上运行HelloWorld程序。
zynq linux操作基本流程
zynq linux操作基本流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!Zynq SoC启动Linux操作系统的基本流程详解Zynq System-on-Chip (SoC) 是Xilinx公司的一款高度集成的器件,它结合了ARM处理器和可编程逻辑(FPGA)部分,广泛应用于嵌入式系统设计。
如何在Zynq 7000平台上使用Linux spidev.c驱动
如何在Zynq 7000平台上使用Linux spidev.c驱动在上一篇博客中,介绍了如何配置Vivado下的硬件工程、例化SPI硬件接口和如何使用petalinux加载Xilinx提供的SPI总线驱动,如果要通过SPI控制外部器件,还需要添加SPI的设备驱动以实现SPI的对外控制逻辑。
在Linux内核的driver/spi目录下有许多外设的设备驱动可以参考,这篇博客主要介绍如何使用其中的spidev,c这个设备驱动来实现对外设的控制。
spidev是一个通用的SPI外设驱动,它提供了spi字符驱动的注册,并向上层应用程序提供了I/O控制接口,当我们仅需要利用SPI接口向外设发送和接收简单的控制序列时,可直接使用该驱动,下面介绍具体的使用方法。
一、在前一篇博客中,我们采用xilinx针对Zynq 7000处理器提供的spi-cadence.c驱动实现了芯片上SPI总线驱动的注册,接下来需要修改设备树文件以时我们的外设挂接在SPI 总线下。
在petalinux工程的../subsystems/linux/configs/device-tree目录下找到zynq相关的设备树文件,目录所包含的文件如下图所示。
打开其中的zynq-7000.dtsi文件,找到其中的spi0节点(具体使用spi0还是spi1根据硬件工程的配置情况),并在该节点下添加如下内容:其中spidev名字对应spidev.c文件中的驱动名,Linux系统启动时会自动找到对应的驱动模块并加载。
reg0对应SPI下的第几个设备,由于Zynq PS端的SPI控制器每个可以外接控制3个从设备,所以reg的值可以设为0、1或2.由于在上一篇博客中,Vivado硬件工程中对SPI的接口spi0_csn_0_o进行了例化并引出接口,所以本工程使用的是SPI使能第0个端口。
同时,spidev.c该驱动不支持片选功能,因此若在spi0下挂接了多个从设备,切硬件工程中spi0_csn_0片选接口引出了多个,则spiddev驱动在注册时,会在/dev目录下注册多个设备,分别对应每个片选接口连接的从设备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上一章讲到这么一个网页:/resources/tools-software/linux-drivers/platforms/zynq 你打开看看,密密麻麻好多英文啊还有各种链接本人时间确实有限,简略讲点要紧的部分吧。
这个网页讲了三大部分1,u-boot,uImage,和dtb文件的编译2,BOOT.bin的生成3,UI界面下载和释放教程第一章有这么一个图:其实要启动一个linux,你需要的就是以下四个文件:BOOT.bindevicetree.dtbuImage和uramdisk.image.gzBOOT.bin(来自于编译得来的u-boot文件和网页提供的参考设计)devicetree.dtb(编译得来)uImage(编译得来)和uramdisk.image.gz(教程第一章里已经讲了怎么来的,xilinx网站之直接下载下来就行)所以,在linux下要编译的是这几个文件:u-bootuImagedevicetree.dtb然后你就需要一台linux的电脑了VNC接入工作站也行,虚拟机也行,或者你干脆装一台linux。
有两点注意:我试过14.04版的Ubuntu,在解压缩一个zip包的时候会出错,提示文件名过长。
我也试过一个桌面版的RHEL 6.4,结果里面没装GCC,而GCC在编译过程里是必须有的。
(查看装没装GCC的办法之一是进/usr/bin看一下有没gcc文件)最后搞成功的是一台装了GCC的RHEL 6.3桌面版。
现在准备下载一堆东西吧第一样,交叉编译环境安装包/member/mentor_codebench/xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 141M大小,去下载吧。
开个迅雷或者QQ炫风的会员会很快的。
第二样,u-boot编译环境下载页面:https:///Xilinx/u-boot-xlnx点右边的“Download ZIP”就开始下载,然后你可以指定下载目录。
或者直接下载:https:///Xilinx/u-boot-xlnx/archive/master.zip这个zip包下载下来之后会自动重新命名为u-boot-xlnx-master.zip放进linux之后解压缩解压命令unzip -o u-boot-xlnx-master.zip别忘了把这个补丁文件放进解压后的根目录/_media/resources/tools-software/linux-drivers/platforms/uboot-env.patch第三样,uImage 和 dtb的编译环境:下载页面:https:///analogdevicesinc/linux容易点右边的“Download ZIP”或者直接下载https:///analogdevicesinc/linux/archive/xcomm_zynq.zip下载成功之后自动重命名为linux-xcomm_zynq.zip同样在linux下解压缩后使用第四样,ADI提供的参考设计下载页面:https:///analogdevicesinc/fpgahdl_xilinx同样点右边“Download ZIP”或者直接下载https:///analogdevicesinc/fpgahdl_xilinx/archive/master.zip 下载成功之后自动重命名为fpgahdl_xilinx-master.zip在WIN下解压缩后使用(其实看你的ISE 14.6装在哪里了,你在linux下用ISE也是可以的)好了现在下载进行了一小半(晕倒吧?)接下来大头是下载一个ISE 14.6别的版本不行,尤其低版本不行14.4肯定不行。
因为打开参考设计的时候会报错,所以你必须下载对应的版本。
具体用哪个版本,看这个网址/resources/fpga/xilinx/kc705/adv7511其中有:Required SoftwareXilinx ISE 14.6 (Programmer (IMPACT) is sufficient for the demo and is available on Webpack).ISE14.6的下载地址:/s/1pNj5s其中包含破解文件的一共也就七八个G吧,希望你网速还凑合。
下面就开始干活了!先把下载之一教程编译环境的bin文件弄进linux里去这个bin文件叫xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin现在已经2014年10月了,居然三年没更新,或许有更新但是我不知道无所谓,反正这个版本能用的进linux之后请保证所有的命令都在root模式下操作RHEL的话敲su俩字母然后回车,然后在密码提示符后面敲root密码就进root模式root模式的提示符是root,这些linux基础我就不多讲了Ubuntu 是敲sudo bash,不过我前面说了不推荐Ubuntu。
然后敲bash xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin就开始安装了,有图形界面的下页开始看图了bash 一行命令发现了吗?RHEL敲完bash就应该能开始安装。
Ubuntu的安装是基于dash的,还要敲了bash之后再选择按照模式。
选个否,然后无界面文本化安装。
安装界面这就启动了点 NEXT就行选中 I accept 啥的继续next默认typical安装,继续点next默认的安装目录不用动记住在 /root 下面就行,然后一路next到底,安装教程编译环境就完成了。
然后你就解压缩第二部下载的u-boot编译环境zip包了解压命令前面已经告诉你了unzip -o u-boot-xlnx-master.zip这一步有困难的人要反思一下,你这都做不来,你凭啥要在zunq上挂linux 然后别忘了把补丁放进解压后文件夹的根目录最后是这样:接下来依次敲以下五行命令注意是依次敲我建议你把下面的五行命令存成文本文件放进linux里去复制粘贴export ARCH=armexport CROSS_COMPILE=arm-xilinx-linux-gnueabi-export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin:$PATH make zynq_zc70x_configmake敲完了前面四行你会看见也就打印了两行信息:然后你敲了最后一行 make这四个字母屏幕开始猛滚了最后出现了编译生成的u-boot文件,图上是绿色的,最后一行倒数第二个文件拷贝出来,重命名加上后缀,变成u-boot.elf这个留着备用,是参与生成BOOT.bin的原料。
至此第一步 u-boot文件生成完成。
至于u-boot是啥...这是个启动文件,自己百度吧。
接下来在编译uImage(linux内核)和dtb(device tree)文件之前有个重要步骤。
那就是,在u-boot编译成功之后,会在/u-boot-xlnx-master/tools 目录下生成一个叫mkimage的文件,注意是不带后缀的mkimage。
把这个文件拷贝到linux的 /usr/bin路径下面去注意,/usr/bin是绝对路径,你可以在任何目录下直接敲 cd /usr/bin进去然后接下来的编译才能成功。
接下来的编译,也要解压缩这回不用打补丁了把之前第三步下载的linux-xcomm_zynq.zip解压出来然后进入这个linux-xcomm_zynq目录linux-xcomm_zynq目录下同样有几条命令请照着来:export ARCH=armexport CROSS_COMPILE=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-make zynq_xcomm_adv7511_defconfigmake uImage LOADADDR=0x00008000在敲前三条命令之后你会看到等你敲了第四条make uImage LOADADDR=0x00008000 之后,我勒个去啊,这屏幕滚了好久好久...大量打印信息我省略了啊中间出错的话我只能替你默哀了注意我讲过要装带有GCC的RHEL 6.0以上版本我是在6.3下编译成功的进入/linux-xcomm_zynq/arch/arm/boot ,然后你就看到编译出来的uImage了注意不是Image也不是zImage,是uImage,导数第二个文件。
再之后回到linux-xcomm_zynq目录下敲一行make zynq-zc702-adv7511.dtb看出来了吧?dtb文件生成了。
目录是 /linux-xcomm_zynq/arch/arm/boot/dts/zynq-zc702-adv7511.dtb类似的可以敲出zc706或者zedboard的命令比如make zynq-zc706-adv7511.dtb或者make zynq-zed-adv7511.dtb参见原版网页相关部分把这个zynq-zc702-adv7511.dtb拷贝出来重命名为devicetree.dtb,就可以往SD 卡里放了。
理一理,我们做个能启动linux的SD卡,需要的用来生成BOOT.bin的u-boot.elf文件有了,uImage有了,device tree 的dtb文件也有了。
uramdisk.image.gz反正是现成的。
接下来就是如何通过u-boot.elf生成BOOT.bin文件了。
第二章讲完,接下里第三章要用到ISE 14.6和ADV的参考设计了。
第三章预告一下,其实你直接看网页也挺容易看懂的。
/resources/tools-software/linux-drivers/platforms/zynq最后加一些经验帮助之前提到不推荐Ubuntu是因为在unzip的时候会出错其实centos下也有一样的问题但是,如果在win下面直接解压缩之后再拷贝到linux下就没有这个解压缩出错的情况出错的情况是linux-xcomm_zynq.zip解压缩到最后,会报告说文件名过长出错linux在这些细节方面相对win还是挫了一点....安装linux可以用U盘装,我是在 / 下载的linux的ISO文件然后用unetbootin或者Universal_USB_Installer写入U盘。
Ubuntu直接写入就行,RHEL和centos还需要把ISO文件都拷到U盘里去才能争取安装,否则会报告镜像9600缺失的错误。