PYNQ2中第一个linux程序

尝试了很多裸跑下的功能测试,发现对于网口通信还是在linux系统下,流程控制更加方便,于是有了linux第一个应用程序:点亮LED.
1、硬件设置
新建工程,添加gpio如下所示:
在这里插入图片描述
找到分配的物理地址,如下所示:
在这里插入图片描述
添加管教约束xdc
set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_tri_o[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_tri_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[1]}]

set_property PACKAGE_PIN R14 [get_ports {GPIO_tri_o[0]}]
set_property PACKAGE_PIN P14 [get_ports {GPIO_tri_o[1]}]
set_property PACKAGE_PIN N16 [get_ports {gpio_rtl_tri_o[0]}]
set_property PACKAGE_PIN M14 [get_ports {gpio_rtl_tri_o[1]}]
生成bit文件。
2、cpp文件编写
一般的教程是在设备树里找到相关GPIO的设备号,然后对其进行读写。而我这里的思路是,在linux下对GPIO的物理基地址进行映射,获得操作系统可以操作的虚拟地址。这样在后面的数据处理中都可以只需要对地址操作就行。
源码如下所示:

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "unistd.h"

#include <fcntl.h>
#include <ctype.h>
#include <sys/mman.h>
#include <math.h>

int fd1 = 0;          //虚拟地址的句柄
int *baseaddr = NULL; //数据命令空间对应的虚拟地址。eaddr
int MAP_SIZE = 64 * 4;
int DEBUG_REG_ADDR = 0x41200000; //物理空间地址。

int main(int argc, char *argv[])
{
    int i;
    int offset = 0; //0x80;
	
    fd1 = open("/dev/mem", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
    if (fd1 < 0)
    {
        printf("err open \r\n");
        return 0;
    }
	
    baseaddr = (int *)mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd1, DEBUG_REG_ADDR);
    if (baseaddr == MAP_FAILED)
    {
	   printf(" mmap err\r\n");
        return 0;
    }
    while (1)
    {
		baseaddr[0] = 0xf;
		usleep(1000000);
		printf("0 open \r\n");
        
		baseaddr[0] = 0x0;
		usleep(1000000);
		printf("1 open \r\n");
    }
}

3、生成执行文件
要在线调试需要基于GDB,配置复杂,目前还没有实现,所以这里使用shell完成编译。
首先将本地计算机和P2开发板通过网线连接,设置本地IP和192.168.2.99处于同一网段。
在计算机中输入\192.168.2.99\xilinx 进入板卡中共享文件夹,新建文件夹led,然后将cpp文件复制到路径下.
通过putty进入系统,如下所示:
在这里插入图片描述
通过su,进入root权限,密码为xilinx.
cd led文件夹输入:
gcc test1.cpp –o test1
4、运行
下载bit文件,然后运行test1,led灯在闪烁,表明程序在运行,并打印信息如下所示
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子厂的吕小春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值