2018-04-14 22:18:29 yishuicanhong 阅读数 1171

参考:https://www.cnblogs.com/vacajk/p/6146146.html,针对遇到的问题作出解决。

开发环境 Win10、VMware12、Ubuntu 16.04 64 bit、Vivado 2015.4。

Step1:VMware Tools问题

我在同时在台式机和笔记本上都配置过开发环境,都没有遇到这个问题,鉴于前人的经验,这里还是说明一下。VMware自动安装ubuntu后,VMware Tools没有正确安装。首先确保Ubuntu虚拟机是打开的,在VMware Workstation的菜单栏点击“虚拟机”-->“重新安装 VMware Tools”,然后在虚拟机中会弹出一个光驱设备。

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cd /tmp

#若/tmp文件夹下有vmware-tools-distrib文件夹,需要删除

tar zxpf /mnt/cdrom/VMwareTools-x.x.x-yyyy.tar.gz
umount /dev/cdrom
cd vmware-tools-distrib
./vmware-install.pl -d

接下来就会安装VMware Tools了,这之中有些选项,能选yes的都选yes。关闭虚拟机,重新启动,这样VMware Tools就安装好了。终于可以开心的Windows--Linux互拖文件了。

Step2:VMware 更换apt-get更新源

默认的美国源下载起来太慢了,超费时间而且不稳定。直接把apt-get的源换成阿里云的,速度超赞。参考自: http://www.cnblogs.com/dtiove/p/5917263.html

sudo su
cd /etc/apt
cp sources.list sources.list1
gedit sources.list

这里,将原文件的内容往后移或者注释掉,复制下面的所有文本到里面。

deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

保存并退出,运行apt-get update。

apt-get update

Step3: 安装petalinux需要的依赖库

首先是官方手册ug1144的说明,必须安装的一些32位依赖库,这是最重要也是最容易导致开发环境配置失败的地方。

apt-get install tofrodos:i386
apt-get install iproute2:i386
apt-get install gawk:i386
apt-get install make:i386
apt-get install net-tools:i386
apt-get install libncurses5-dev:i386
apt-get install zlib1g-dev:i386
apt-get install libssl-dev:i386
apt-get install flex:i386
apt-get install bison:i386
apt-get install libselinux1:i386

apt-get install gcc:i386
apt-get install git:i386

 

然后是一些可能会导致不能正常安装petalinux,或是编译时出现问题的依赖库。趁早都直接安装好吧。

apt-get install gcc:i386,apt-get install git:i386

在安装时候提示软件有冲突,看准信息然后现将冲突软件卸载后在安装上述两个依赖库,通过apt-get remove name进行卸载,name是软件名字。

#在运行petalinux-config -c kernel出现错误,需要提前安装下面两个库

apt-get install libncurses5 libncurses5-dev

#编译时会出现错误arm-xilinx-linux-gnueabi-gcc: Command not found,需要安装下面三个库

apt-get install libc6:i386
apt-get install libstdc++6:i386
apt-get install zlib1g:i386

#安装petalinux时出现错误,提示缺少zlib和openssl,需要安装下面一个库

apt-get install libssl-dev

#安装petalinux时出现警告,提示No tftp server found - please refer to "PetaLinux SDK Installation Guide" for its impact and solution,需要安装下面3个库

apt-get install tftpd tftp openbsd-inetd
gedit /etc/inetd.conf

#在文件中增加以下内容

tftp dgram udp wait nobody  /usr/sbin/tcpd    /usr/sbin/in.tftpd /tftproot

#保存并退出

mkdir /tftproot
chmod 777 /tftproot
/etc/init.d/openbsd-inetd restart
netstat -an | more | grep udp

#看到有如下输出,即表示tftp安装成功

#udp        0      0 0.0.0.0:69              0.0.0.0:*

至此,依赖库就安装完成了

Step4: 安装petalinux

前面的都准备好后,同时也从官网下载好petalinux-v2015.4-final-installer-dec.run安装包,在Linux输入指令创建并进入文件夹

mkdir -p /home/xilinx-arm/PetaLinux/package
cd /home/xilinx-arm/PetaLinux/package

从Windows中直接把petalinux-v2015.4-final-installer-dec.run拖拽到Linux的package文件夹。

mkdir -p /opt/pkg/petalinux
./petalinux-v2015.4-final-installer-dec.run /opt/pkg/petalinux

安装过程中有3个许可,都需要同意。安装成功后,打印的log如下图。

按回车是阅读条款,按q键进行退出,然后输入y同意完成安装。ug1144中说了,所用到的/bin/sh命令都需要是bash的,而Ubuntu默认的/bin/sh是dash的,所以直接把原本的删除,连接/bin/sh到bash。

cp /bin/sh /bin/sh1
rm /bin/sh
ln -s /bin/bash /bin/sh
ls -al /bin/sh

#会看到打印信息

#lrwxrwxrwx 1 root root 9 Dec  8 14:59 /bin/sh -> /bin/bash

PetaLinux就算是安装成功了。每次开机使用petalinux时,要在命令行输入:

source /opt/pkg/petalinux/petalinux-v2015.4-final/settings.sh

echo $PETALINUX

#会看到打印信息

#/opt/pkg/petalinux/petalinux-v2015.4-final

这样就可以在命令行中使用petalinux的各种命令了。

2018-11-26 13:14:38 Chi_Hong 阅读数 1519

一、软件和设置

1、开发工具版本

  1. 虚拟机: VMware® Workstation 14 Pro
  2. Ubuntu :ubuntu16.04 LTS 64bit
  3. Vivado+SDK:2017.4
  4. 平台:zynq7020(clg400)

2、交叉编译环境

使用xilinx集成开发环境SDK中自带的工具。

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=/opt/Xilinx/SDK/2017.4/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/:$PATH

3、安装/更新32位库文件

一共三条,第一:系统更新(个人随意);第二:安装库文件(注意安装提示),第三:为make menuconfig准备(scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: curses.h: No such file or directory)

sudo apt-get update
sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6 libbz2-1.0:i386
sudo apt-get install libncurses5-dev

二、获取Xilinx源文件

这里直接使用git从xilinx github中获取uboot和kernel源文件。

git clone https://github.com/Xilinx/linux-xlnx.git
git clone https://github.com/Xilinx/u-boot-xlnx.git

三、uboot修改和编译

1、修改zynq-common.h

我打算用QSPI启动,所以修改的是/your_dir/u-boot-xlnx/include/zynq-common.h中的qspiboot的配置。为FSBL和.bit文件和uboot预留5M;内核占5M,没用使用ramdisk的情况下在bootm中加一个横。

"qspiboot=echo Copying Linux from QSPI flash to RAM... && " \
		"sf probe 0 0 0 && " \
		"sf read ${kernel_load_address} 0x500000 ${kernel_size} && " \
		"sf read ${devicetree_load_address} 0xA00000 ${devicetree_size} && " \
		"echo Copying ramdisk... && " \
		"sf read ${ramdisk_load_address} 0xB00000 ${ramdisk_size} && " \
		"bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0" \
/* 不使用ramdisk的版本*/
"qspiboot=echo Copying Linux from QSPI flash to RAM... && " \
		"sf probe 0 0 0 && " \
		"echo Copying kernel... && " \
		"sf read ${kernel_load_address} 0x500000 ${kernel_size} && " \
		"echo Copying devicetree... && " \
		"sf read ${devicetree_load_address} 0xA00000 ${devicetree_size} && " \
		"bootm ${kernel_load_address} - ${devicetree_load_address}\0" \

2、修改zynq_zybo.h

这里选择在zybo的基础上修改配置,它和zynq-common.h在同一目录.在其中添加一条.

#define CONFIG_OF_EMBED

3、修改uboot中的dts

把/your_dir/u-boot-xlnx/arch/arm/dts目录中zynq-zybo.dts的部分设备注释掉.

&clkc {
	ps-clk-frequency = <50000000>;
};
/*
&gem0 {
	status = "okay";
	phy-mode = "rgmii-id";
	phy-handle = <&ethernet_phy>;

	ethernet_phy: ethernet-phy@0 {
		reg = <0>;
		device_type = "ethernet-phy";
	};
};
*/
&qspi {
	u-boot,dm-pre-reloc;
	status = "okay";
};
/*
&sdhci0 {
	u-boot,dm-pre-reloc;
	status = "okay";
};
*/
&uart1 {
	u-boot,dm-pre-reloc;
	status = "okay";
};
/*
&usb0 {
	status = "okay";
	dr_mode = "host";
	usb-phy = <&usb_phy0>;
};
*/

4、修改Makefile

打开在uboot目录中Makefile,注释掉一下代码(这一步可以省略)。

#quiet_cmd_cfgcheck = CFGCHK  $2
#cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
#		$(srctree)/scripts/config_whitelist.txt $(srctree)

5、uboot配置、编译

make distclean
make zynq_zybo_defconfig
make

将生成的uboot 复制位uboot.elf。备用

四、内核编译

make distclean
make xilinx_zynq_defconfig
make -j4 UIMAGE_LOADADDR=0x8000 uImage

在./arch/arm/boot/下的uimage复制备用。

五、修改设备树

1、修改设备树中关于QSPI的选项。

/*这个bootargs是为从emmc启动文件系统而准备的,刚开始时emmc中并没有文件系统也没关系,在uboot中我们配置为带ramdisk的QSPI选项就可以*/
bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p1 rw rootfstype=ext4 rootwait";
		stdout-path = "serial0:115200n8";
//
*****
/////	
&qspi {
	status = "okay";
	is-dual = <0>;
	num-cs = <1>;
	flash@0 {
		compatible = "n25q128a11";
		reg = <0x0>;
		spi-tx-bus-width = <1>;
		spi-rx-bus-width = <4>;
		spi-max-frequency = <50000000>;
		#address-cells = <1>;
		#size-cells = <1>;
		partition@qspi-fsbl-uboot {
			label = "qspi-fsbl-uboot";
			reg = <0x0 0x500000>;
		};
		partition@qspi-linux {
			label = "qspi-linux";
			reg = <0x500000 0x500000>;
		};
		partition@qspi-device-tree {
			label = "qspi-device-tree";
			reg = <0xA00000 0x100000>;
		};
		partition@qspi-rootfs {
			label = "qspi-rootfs";
			reg = <0xB00000 0x700000>; 
		};
	};
};

2、编译

这里利用内核的dtc,在内核目录下执行一下代码。

./scripts/dtc/dtc -I dts -O dtb -o ./arch/arm/boot/devicetree.dtb ./arch/arm/boot/dts/zynq-zybo.dts

将devicetree.dtb复制备用。

六、ramdisk文件

xilinx wiki页面中下载我们想要的ramdisk。当然,你也可以自己做。
在这里插入图片描述这个是xilinx 提供的生成好的文件系统,将它更名为ramdisk.image.gz。我们需要的是uramdisk,还需要设置:

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

生成的uramdisk.image.gz备用。

七、.bit,fsbl

打开一个在裸机状态下验证可用的vivado 工程(可以用sdk下的helloworld工程)。导入到SDK,新建FSBL。复制system_wrapper.bit 和fsbl.elf备用。

八、采用SDK生产bin,并下载

注意这里的uImage、devicetree、uramdisk偏移地址。之后点击生成BOOT.bin文件,接着采用SDK把程序烧写到FLASH中,sdk2017.4烧写flash需要调整时钟,具体看这里
在这里插入图片描述

九、启动结果

将开发板的启动方式设置为QSPI启动,之后上电,在SecureCRT中的结果:
在这里插入图片描述
由于采用的是带有uramdisk的启动方式,所以提示了从device 1:0挂载了根文件系统,但是设备树中也设置了bootargs从emmc中启动所以有了第二行的failed。关于ramdisk的内容以后在分析,首先看下文件系统中的设备1:0是谁:
在这里插入图片描述

2020-03-01 15:01:55 jj12345jj198999 阅读数 307

1、背景介绍

目前国产ZYNQ采用的是复旦微电子的FMQL系列,该FMQL系列中两款芯片中FMQL10S400对标的Xilinx的7010,FMQL45T900对标的是Xilinx的7045。国产和进口唯一区别的是ARM核版本以及数目多少的变化,对开发者来说区别不是很大,都能支持嵌入式Linux系统。下文介绍搭建国产ZYNQ Linux虚拟机开发环境步骤。

 

2、在虚拟机中安装linux操作系统

在安装vmware后直接安装桌面Linux系统,推荐使用的Linux操作系统为Ubuntu 16.4。该系统可以从阿里云的镜像站下载:https://developer.aliyun.com/mirror/

下载完镜像后再vmware中安装,记得配置虚拟机内的Ubuntu联网,参看:https://jingyan.baidu.com/article/39810a2342f222b637fda648.html

 

3、修改ubuntu下载服务器地址

Ubuntu默认的软件更新下载服务器地址都是国外的,使用apt-get速度很慢,配置国内镜像地址,还是在阿里云,按照教程修改即可。https://developer.aliyun.com/mirror/ubuntu

 

4、下载开发软件

sudo su

apt-get update

apt install build-essential vim tofrodos

apt install iproute2 gawk gcc git make net-tools zlib1g-dev

apt install libssl-dev flex bison libselinux1 libncurses5-dev

apt install tftpd lib32z1 lib32ncurses5 libbz2-1.0:i386

apt install lib32stdc++6 xvfb chrpath socat autoconf libtool

apt install texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g:i386

apt install device-tree-compiler

apt install u-boot-tools

 

5、安装petalinux(可选)

这一步是可选操作,因为复旦微提供的开发资料中已经自带源码,不需要使用petalinux来下载所需要的资源,若要安装petalinux,步骤如下。

再从xilinx官网下载petalinux地址为:

https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html

至此就完成了国产ZYNQ Linux开发环境搭建。

2019-12-06 18:21:09 p154613730 阅读数 131

说明

Zynq-7000 SoC是针对大多数嵌入式应用的器件,凭借ARM处理与FPGA逻辑之间的高集成度以及I/O可编程性,借助Xilinx提供的开发工具试的软硬件工程师能够更好的协调工作,缩短开发时间。
借助Petalinux工具能够让zynq很方便的在Linux工作,在Linux下唯一不太友好的就是zynq的功耗高,芯片发热较大,所以让zynq合理的休眠显得尤为重要。

开发环境

  1. PC:Windows 10;
  2. 虚拟机:Ubuntu 16.04;
  3. Vivado:2018.2;
  4. PetaLinux:2018.2;
  5. 硬件环境:zynq7010;

休眠和唤醒介绍

参照UG585资料里关于Sleep Mode 以及Wake-up介绍

关于Sleep Mode

Sleep Mode
Sleep mode is defined at the system level to include the APU in standby mode and multiple controllers being held in reset without a clock.
Going into sleep mode can greatly reduce power consumption. In sleep mode, most function clock groups are turned off or powered off. The only required active devices are one CPU, the snoop control unit (SCU), and a wake-up device. Ideally, the only devices causing dynamic power consumption should be the SCU and the wake-up peripheral device. The wake-up device can be UART, GPIO, or any device that can generate an interrupt.
If the wake-up device is an AXI bus master, which can start transactions targeting the DRAM,additional limitations apply. Because the whole interconnect and the DDR memory are in low power modes and inaccessible, it must be assured that the CPU goes through the full wake-up process before any transactions to the DRAM take place. This guarantees that potential transactions targeting the DRAM are served correctly.

文中提到进入休眠模式可以大大降低功耗, 在睡眠模式下,大多数功能时钟组均已关闭。 唯一需要的活动设备是一个CPU,侦听控制单元(SCU)和唤醒设备。 理想情况下,引起动态功耗的唯一设备应该是SCU和唤醒外围设备。 唤醒设备可以是UART,GPIO或任何可以产生中断的设备。

关于Wake-up

Setup Wake-up Events
Every interrupt signaled to the PS can be used as a wake-up event. To make this happen, the wanted interrupt must be enabled in the peripheral and the GIC. A wake-up device must be able to generate the interrupt in sleep mode, which means, that its clocks might not be gated off. See GPIO as Wake-up Event, page 389 for more information.
Refer to the respective chapter for information about available interrupts and how to configure the peripherals to generate them.

能够通知PS端的每个中断都可以用作唤醒事件。 为此,必须在外围设备和GIC中启用所需的中断。 唤醒设备必须能够在睡眠模式下产生中断,这意味着其时钟可能不会被关闭。

裸机下休眠和唤醒

Enter sleep mode

Enter Sleep Mode
A CPU must execute the following steps to enter sleep mode from normal run mode:

  1. Disable interrupts. Execute cpsid if.
  2. Configure wake-up device.
  3. Enable L2 cache dynamic clock gating. Set l2cpl310.reg15_power_ctrl[dynamic_clk_gating_en] = 1.
  4. Enable SCU standby mode. Set mpcore.SCU_CONTROL_REGISTER[SCU_standby_enable] = 1.
  5. Enable topswitch clock stop. Set slcr.TOPSW_CLK_CTRL[CLK_DIS] = 1.
  6. Enable Cortex-A9 dynamic clock gating. Set
    cp15.power_control_register[dynamic_clock_gating] = 1.
  7. Put the external DDR memory into self-refresh mode. Refer to section 10.9.6 DDR Power Reduction.
  8. Put the PLLs into bypass mode. Set slcr.{ARM, DDR, IO}_PLL_CTRL[PLL_BYPASS_FORCE] = 1.
  9. Shut down the PLLs. Set slcr.{ARM, DDR, IO}_PLL_CTRL[PLL_PWRDWN] = 1.
  10. Increase the clock divisor to slow down the CPU clock. Set slcr.ARM_CLK_CTRL[DIVISOR] = 0x3f.
  11. Execute the wfi instruction to enter WFI mode.

Exit sleep mode

Exiting sleep mode is triggered by the configured interrupt occurring. The interrupt wakes up the CPU which resumes execution. The newly starting activity also triggers the topswitch, SCU, and L2 cache controller to leave their idle states and continue normal operation. The procedure for waking up is outlined below.
To exit from sleep mode:

  1. Restore CPU clock divisor setting. Set slcr.ARM_CLK_CTRL[DIVISOR] = original value.
  2. Power on the PLLs. Set slcr.{ARM, DDR, IO}_PLL_CTRL[PLL_PWRDWN] = 0.
  3. Wait for PLL power-on and lock. Wait for slcr.PLL_STATUS[{ARM, DDR, IO}_PLL_LOCK] = 1.
  4. Disable PLL bypass mode. Set slcr.{ARM, DDR, IO}_PLL_CTRL[PLL_BYPASS_FORCE] = 0.
  5. Disable L2 cache dynamic clock gating. Set l2cpl310.reg15_power_ctrl[dynamic_clk_gating_en] = 0.
  6. Disable SCU standby mode. Set mpcore.SCU_CONTROL_REGISTER[SCU_standby_enable] = 0.
  7. Disable Interconnect clock stop. Set slcr.TOPSW_CLK_CTRL[CLK_DIS] = 0.
  8. Disable Cortex-A9 dynamic clock gating. Set cp15.power_control_register[dynamic_clock_gating] = 0.
  9. Enable all required peripheral devices, including DDR controller clocks.
  10. Re-enable and serve interrupts. Execute cpsie if.

裸机下进入休眠需要按照步骤配置各个寄存器的状态。显得比较繁琐,在linux下相对简单一些,通过正确配置内核,采用指令形式进入休眠状态。

Linux下休眠和唤醒

参照Xilinx的wiki手册,Linux下通过配置内核,很容易进入休眠状态。唤醒方式同上面一样,通过指定的Uart或者GPIO唤醒。

Linux下Suspend

通过配置内核命令

petalinux-config -c kernel

使能如下的内核选项配置

  • CONFIG_THERMAL
  • CONFIG_CPU_THERMAL
  • CONFIG_CPU_FREQ
  • CONFIG_CPU_FREQ_GOV_PERFORMANCE
  • CONFIG_CPU_FREQ_GOV_POWERSAVE
  • CONFIG_CPU_FREQ_GOV_USERSPACE
  • CONFIG_CPU_FREQ_GOV_ONDEMAND
  • CONFIG_CPU_FREQ_GOV_CONSERVATIVE
  • CONFIG_CPU_FREQ_STAT
  • CONFIG_CPU_FREQ_STAT_DETAILS
  • CONFIG_CPUFREQ_DT
  • CONFIG_CPU_IDLE
  • CONFIG_CPU_IDLE_GOV_LADDER
  • CONFIG_CPU_IDLE_GOV_MENU
  • CONFIG_PM_SLEEP

配置完成后保存退出。
执行petalinux-build编译工程,编译完成后,把BOOT.BIN和zynq_fsbl.elf文件烧写到目标板。
启动目标板,执行

echo mem > /sys/power/state

zynq进入休眠状态:

Linux下Wake-up

Wake on UART

先通过命令指定一路uart为唤醒设备,当指定的uart上有中断产生,zynq被唤醒。本文通过使能调试串口uart0为唤醒设备进行测试,正常休眠之后,因为uart0会有中断产生,zynq会马上被唤醒。
先使能uart0为唤醒设备:

echo enabled > /sys/devices/soc0/amba/e0000000.serial/tty/ttyPS0/power/wakeup

再执行休眠指令:

echo mem > /sys/power/state

看到zynq休眠后立即被唤醒。
在这里插入图片描述

Wake on GPIO

在这里插入图片描述按照wiki上配置GPIO,发现没有wakeup的配置项
在这里插入图片描述

GPIO-Keys Driver

在wiki/Linux Drivers/Linux GPIO Driver下查找到GPIO-Keys Driver,里面提到:

  • Using gpio-key,wakeup will enable the GPIO to wake the system from suspend.

可以通过在Device Tree里面添加GPIO-Keys的方式来使能GPIO唤醒zynq。
参照wiki往设备树文件(project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi)添加gpio-keys

gpio-keys {
    compatible = "gpio-keys";
    #address-cells = <1>;
    #size-cells = <0>;
    autorepeat;
    sw14 {
        label = "sw14";
        gpios = <&gpio0 39 0>;
        linux,code = <108>; /* down */
        gpio-key,wakeup;
        autorepeat;
    };
};

注: gpios = <&gpio0 39 0>;
第二个参数39表示配置MIO39为GPIO,本次测试在MIO39接入按键来测试。
修改完成后,执行petalinux-build命令编译工程,完成后烧写指定文件到目标板。
启动目标板,通过串口进入到设备树目录下,可以看到新添加的gpio-keys目录
在这里插入图片描述指定gpio-keys为唤醒设备:
在这里插入图片描述执行休眠指令,zynq进入休眠状态,同时通过接入MIO39的按键触发来唤醒zynq。
在这里插入图片描述通过GPIO唤醒设备的功能基本上也完成了。

总结

实际测试加入休眠功能后,zynq的整体功耗有一定的下降,对嵌入式设备的发热有一定的改善,但相对于跑裸机而言,功耗还是要高不少,对嵌入式设备而言,zynq的导热一定要做好。同时测试过程中,发现PS在唤醒的瞬间,PL端的逻辑出现过紊乱现象,建议PS在唤醒之后,需要马上对PL进行复位操作,重新配置相关寄存器。

2019-06-11 15:43:16 gengdianjun7230 阅读数 322

软件版本

Linux系统安装包为 ubuntu-16.04.5-desktop-amd64
Vivado版本为Xilinx_Vivado_SDK_2016.1_0409_1.zip

安装Vivado

Linux下解压Xilinx_Vivado_SDK_2016.1_0409_1.zip,在其目录下打开终端,输入以下命令安装Vivado。

sudo ./xsetup

按照指示一步一步安装并COPY licence。
上述步骤完成后,新建终端,输入以下命令,即可启动Vivado。

source /opt/Xilinx/Vivado/2016.1/setting64.sh
vivado

但是此时,从Vivado中还无法lauch Xilinx SDK,还需要改动安装路径下的配置文件/opt/Xilinx/SDK/2016.3/eclipse/lnx64.o/eclipse.ini
在lnx64.o目录下新建终端,输入以下命令获取权限读写eclipse.ini 的权限

sudo chmod -R 777 eclipse.ini 

输入以下命令打开eclipse.ini

vim eclipse.ini

-vmargs

的上一行添加

--launcher.GTK_version
2

保存退出,即可成功启动SDK。

安装软件包

打开终端,在命令行中输入以下命令,安装u-boot和linux内核编译中所需要使用的一些软件包,u-boot和linux内核源码使用的是Xilinx家的u-bootXIlinx家的linux,版本为u-boot-xlnx-xilinx-v2016.1.zip和linux-xlnx-xilinx-v2016.1.zip,较新的版本的编译环境的配置方法有所不同。

apt-get install lib32z1 lib32ncurses5 lib32stdc++6 libbz2-1.0:i386
apt-get install libssl-dev
apt-get install device-tree-compiler
apt-get install libncurses5-dev 
sudo apt-get install u-boot-tools 

安装串口终端picocom

通过以下命令安装串口终端picocom

sudo apt-get install picocom

通过以下命令赋予权限

sudo chmod 777 -R /dev/ttyUSB0

通过以下命令打开串口

picocom -b 115200 /dev/ttyUSB0

先按组合键 Ctrl+a 再按组合键Ctrl+q 就能够退出终端。

移植Linux到ZYNQ

阅读数 431

没有更多推荐了,返回首页