目 录

1 开发案例说明 4

2 Linux 常用开发案例 4

2.1 tl_led_flash 案例 4

2.2 tl_key_test 案例 7

2.3 tl_can_echo 案例 11

2.4 tcp_udp_demos 案例 17

3 Python 开发案例 21

3.1 tl_led_flash 22

3.2 tl_key_test 26

1 开发案例说明

本文档涉及的开发案例位于产品资料“4-软件资料\Demo\tl-linux-application\”路径下 的 base-demos 和 python-demos 目录。

base-demos 目录存放 Linux 常用开发案例,案例 bin 目录存放可执行文件,案例 src目录存放源码。 python-demos 目录存放 Python 开发案例, 案例脚本文件无需编译, 可直接运行。

测试板卡是基于创龙科技Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业级核心板。

如需重新编译 Linux 常用开发案例,请将对应案例 src 目录复制到 Ubuntu 工作目录 下,进入 src 目录执行如下命令加载 PetaLinux 环境变量,并执行 make 命令进行案例编译。编译完成后,将在当前目录下生成可执行文件。

Host# source /home/tronlong/PetaLinux/setting.sh

Host# make CC=arm-linux-gnueabihf-gcc

图 1

2 Linux 常用开发案例

2.1 tl_led_flash 案例

2.1.1 案例功能

本案例通过向评估底板用户指示灯 LED 设备节点反复交替写入 1 、0 数值,实现 LED闪烁效果。 LED 点亮与熄灭时间均为 0.5s。

程序流程如下图所示:

图 2

LED 设备节点为“/sys/class/leds/user-ledX/”目录下的 brightness 。

图 3

2.1.2 操作说明

将本案例 bin 目录下的可执行程序 tl_led_flash 复制到评估板文件系统,并在可执行

程序所在目录执行如下命令运行程序,即可看到评估底板 LED1 以 0.5s 的时间间隔进行

闪烁。同时,串口终端打印系统全部 LED 设备信息和程序当前控制的 LED 设备信息。

Target#

Target#

./tl_led_flash -help

./tl_led_flash -n 1

图 4

2.1.3 关键代码

(1) 预定义 LED 数组。程序由此数组获取 LED 信息,数组信息必须为系统已有 LED 信 息,否则程序运行报错。

图 5

(2) LED 亮灭操作和时间间隔。

图 6

2.2 tl_key_test 案例

2.2.1 案例功能

本案例通过监听用户按键设备节点状态, 检测按键事件。

程序流程如下图所示。

图 7

用户按键设备节点为“/dev/input/event0”。获取按键事件后进行按键键值匹配,再进 行事件处理。

2.2.2 操作说明

将本案例 bin 目录下的可执行程序 tl_key_test 复制到评估板文件系统, 在可执行程序 所在目录执行如下命令运行程序,串口终端将打印提示信息。再按下评估板用户按键 KEY1, 程序将检测到按键事件,并打印按键状态信息。

Target#

Target#

./tl_key_test -help

./tl_key_test -d /dev/input/event0

图 8

2.2.3 关键代码

(1) 定义按键。

图 9

(2) 监听按键事件。

图 10

(3) 循环监听。

图 11

2.3 tl_can_echo 案例

2.3.1 案例功能

本案例使用 canutils 工具包的canecho 程序,实现 CAN 接口数据接收并重发功能。

canutils 工具包内含 5 个独立的程序, 分别为 canconfig、candump、canecho、cansend、 cansequence 。各程序功能简述如下:

(1) canconfig:用于配置 CAN 接口参数,比如波特率、模式等。

(2) candump:从 CAN 接口接收数据并以十六进制形式打印到标准输出, 亦可输出到 指定文件。

(3) canecho:从 CAN 接口接收数据,并将接收到的数据对外发送。

(4) cansend:向指定 CAN 接口发送数据。

(5) cansequence:向指定 CAN 接口发送自动重复递增数字,或指定接收模式并校验

接收的递增数字。

本案例仅使用 canecho 功能, 如需实现其他功能, 可自行下载 canutils 工具包并从中

获取对应功能程序源码。下载链接:https://public.pengutronix.de/software/socket-can/ca nutils/。

程序流程如下图所示。

图 12

2.3.2 操作说明

使用 USB 转 CAN 模块连接评估板 CAN 接口和 PC 机 USB 接口,如下图所示。

图 13

参照调试工具安装文档安装 USB 转 CAN 驱动和 ECAN Tools 调试软件,双击打开 ECAN Tools 软件,选择设备类型,然后点击“打开设备”。

图 14

打开 ECAN Tools,界面如下图所示。

图 15

将本案例 bin 目录下的 PL 端.bin 格式可执行文件复制到评估板文件系统"/lib/firmwar e/"目录下,xc7z020 对应的 PL 端可执行文件为 emio_can_demo_xc7z020.bin ,xc7z010 对 应的 PL 端可执行文件为 emio_can_demo_xc7z010.bin 。将 PL 端可执行文件重命名为 syst em_wrapper.bin,然后执行如下命令加载 PL 端可执行文件。

此处的 PL 端可执行文件起到将 PL 端 IO 通过 EMIO 的方式路由到 PS 端 CAN 控制器的 作用。

Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware

图 16

进入评估板文件系统, 使用文件系统自带的 canconfig 工具设置波特率,并启动 CAN

接口。

Target# Target#

Target#

canconfig canconfig

canconfig

can0 stop

can0 bitrate 125000

can0 start

图 17

将本案例 bin 目录下的可执行程序 tl_can_echo 复制到评估板文件系统,进入可执行 程序所在目录,执行如下命令查看程序参数信息。

Target# ./tl_can_echo -help

图 18

执行如下命令绑定 CAN 接口,并接收由 ECAN Tools 发出的数据,然后将接收到的数

据重新发送出去。在 ECAN Tools 中输入数据并点击“发送”按钮,可看到有两帧数据, 一帧是发送数据,另一帧是接收数据。

Target# ./tl_can_echo can0 -v

图 19

图 20

可按"Ctrl + Z"暂停程序,并执行如下命令退出程序。

Target# killall -9 tl_can_echo

图 21

2.3.3 关键代码

(1) 使用 socket 监听 CAN 接口。

图 22

(2)将从 CAN 接口接收到的数据重新发送出去。

图 23

2.4 tcp_udp_demos 案例

2.4.1 案例功能

本案例主要实现客户端(client)与服务端(server)的文本数据相互收发功能。本案例包含

4 个程序:

(1) tl_tcp_server:TCP 服务端测试程序。

(2) tl_tcp_client :TCP 客户端测试程序。

(3) tl_udp_server:UDP 服务端测试程序。

(4) tl_udp_client :UDP 客户端测试程序。 程序流程如下图所示:

图 24 TCP 通信

图 25 UDP 通信

服务端和客户端程序均可在评估板、 PC 机 Ubuntu 系统上运行。当服务端与客户端程 序均在评估板上运行时, 可通过 127.0.0.1 进行本地回环测试, 无需经过路由器。为方便 测试,本章节采用评估板本地回环测试, bin 目录下的 4 个文件均为 ARM 端可执行程序。

2.4.2 操作说明

将本案例 bin 目录下的 4 个可执行程序复制到评估板文件系统。

在 Ubuntu 中执行如下命令使用OpenSSH 登陆评估板文件系统,如下图所示。

Host# sudo sshroot@192.168.1.158 //192.168.1.158 为评估板 IP,请根据实际情况修

图 26

(1) TCP 通信测试

在可执行程序所在目录执行如下命令运行 TCP 服务端和客户端程序。 2233 为服务端

程序指定的端口号,客户端程序端口号参数需与服务端程序一致。

Target#

Target#

./tl_tcp_server 2233 //TCP 服务端命令

./tl_tcp_client 127.0.0.1 2233 //TCP 客户端命令

程序执行后,客户端将会连接服务端。在服务端输入字符串"Tronlong" ,按下回车键 即可在客户端显示对应内容。在客户端输入字符串"Hello Tronlong",按下回车键即可在服 务端显示对应内容,如下图所示。

图 27 TCP 服务端

图 28 TCP 客户端

(2) UDP 通信测试

在可执行程序所在目录执行如下命令运行 UDP 服务端和客户端程序。 2233 为服务端

程序指定的端口号,客户端程序端口号参数需与服务端程序一致。

Target#

Target#

./tl_udp_server 2233 //UDP 服务端命令

./tl_udp_client 127.0.0.1 2233 //UDP 客户端命令

程序执行后, 客户端将不会连接服务端。服务端在收到客户端信息前无法得知客户端 的存在,因此需要客户端先向服务端发送信息。

在客户端输入字符串"Tronlong",按下回车键即可在服务端显示对应内容。在服务端

输入字符串"HelloTronlong",按下回车键即可在客户端显示对应内容,如下图所示。

图 29 UDP 客户端

图 30 UDP 服务端

如需在 PC 端 Ubuntu 系统运行服务端或客户端程序,请将案例 src 源码目录拷贝到

Ubuntu 工作目录。进入源码目录后执行 make 命令,即可在当前目录下生成 x86 端可执

行程序。在不同终端运行服务端或客户端程序的命令类似, 但 127.0.0.1 需使用服务器 IP

地址替代。

Host# make

图 31

2.4.3 关键代码

以 TCP 通信程序为例。

(1) tl_tcp_client.c

注意源码中的 struct sockaddr_in 、socket 、connect 、fgets 、send 、recv 等数据结构和 系统调用的使用。

(2) tl_tcp_server.c

注意源码中的 struct sockaddr_in、socket、connect、fgets、send 、recv 、bind 、listen、 accept 等数据结构和系统调用的使用。

3 Python 开发案例

本章节以两个简单案例演示 Python 的使用方法。

系统已支持 Python2.7 和 Python3.5,相关库分别位于文件系统“/usr/lib/python2.7/”和 “/usr/lib/python3.5/”目录下。

图 32

3.1 tl_led_flash

3.1.1 案例功能

本案例通过向评估底板用户指示灯 LED 设备节点反复交替写入 1 、0 数值,实现 LED 闪烁效果。 LED 点亮与熄灭时间均为 0.5s。

程序流程如下图所示。

图 33

LED 设备节点为“/sys/class/leds/user-ledX/”目录下的 brightness 。

图 34

3.1.2 操作说明

将案例目录下的 tl_led_flash.py 脚本文件拷贝到评估板文件系统,并在脚本文件所在

目录执行如下命令查看程序参数信息。

Target# ./tl_led_flash.py -h

图 35

执行如下命令运行脚本程序,即可看到评估底板上的 LED1 进行闪烁。

Target# ./tl_led_flash.py

图 36

可按下"Ctrl + C"终止程序。

3.1.3 关键代码

(1) 查找所有 LED 设备。

图 37

(2) 控制 LED 亮灭。

图 38

3.2 tl_key_test

3.2.1 案例功能

本案例通过监听用户按键设备节点状态, 检测按键事件。

程序流程如下图所示。

图 39

3.2.2 操作说明

将案例目录下的 tl_key_test.py 脚本文件拷贝到评估板文件系统,并在脚本文件所在 目录执行如下命令查看程序参数信息。

Target# ./tl_key_test.py -h

图 40

执行如下命令运行脚本程序, 串口终端将打印提示信息。再按下评估板用户按键 KEY1, 程序将检测到按键事件,并打印按键状态信息。

Target# ./tl_key_test.py -d /dev/input/event0

图 41

可按下"Ctrl + C"终止程序。

3.2.3 关键代码

(1) 打开按键设备。

图 42

(2) 监听按键事件。

图 43

Linux 应用案例开发手册——基于Zynq-7010/20工业开发板的更多相关文章

  1. 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

    在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...

  2. 【DSP开发】【Linux开发】基于ARM+DSP进行应用开发

    针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算 ...

  3. 《阿里巴巴Java开发手册》更新为《Java开发手册》

    新版一览:华山版<Java开发手册> <阿里巴巴Java开发手册>始于阿里内部规约,在全球Java开发者共同努力下,已成为业界普遍遵循的开发规范,涵盖编程规约.异常日志.单元测 ...

  4. 手把手教你从零实现Linux misc设备驱动一(基于友善之臂4412开发板)

    关于怎样来写一个misc设备,在前面有篇文章已经介绍了大致的流程,如今就让我们来实现一个最简单的misc设备驱动. http://blog.csdn.net/morixinguan/article/d ...

  5. FlaskWeb开发:基于Python的Web应用开发实战

    所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/63/ 来源:python黑洞网,专注 ...

  6. (转)微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(采用 Baidu Eclipse)

    原文传送门(http://blog.csdn.net/bingtianxuelong/article/details/17843111) 版本说明:     V1:         2014-2-13 ...

  7. C#开发之基于NPOI的操作Excel开发体验

    最近遇到一个数据导入的需求,语言是.net framework 4.7的C#.但是,这次主要探讨NPOI的体验,原则就是向前兼容.所以采用.xls的支持.网上的资料,我稍微整合了一些. #1 单元格下 ...

  8. 微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(MyEclipse + SVN)

    等待加载完成后,在"Personal Sites" 栏目中会显示你加载的SVN的相关内容,展开"SVN"分别选择"Core SVNKit Librar ...

  9. 微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(采用 Baidu Eclipse)

    3.通过 SVN 检入工程     在 bae 上的应用添加部署成功后,如图 7     点击“点击查看”按钮,会打开一个新页面,页面上会打印 “hello world” ,这是因为我们的应用包含有示 ...

  10. Android 项目优化(七):阿里巴巴Android开发手册整理总结

    本来之前觉得Android项目优化系列的文章基本整理完毕了,但是近期看了一下<阿里Android开发手册>有了很多收获,想再整理一篇,下面就开始吧. 先在这里列一下之前整理的文章及链接: ...

随机推荐

  1. 技术书籍 — EffectiveMordenCpp 研读

    一.类型推导 PROs: 源码某处的类型修改,可以自动传播其他地方 Cons: 会让代码更复杂(How?) 在模板类型推导时,有引用的实参会被视为无引用,他们的引用会被忽略 template<t ...

  2. ip地址、子网掩码、网关、dns简介

    IP地址IPADDR: IP地址是唯一的标识,是一段网络编码(二进制),由32位组成. IP 是 Internet Protocol(网际互连协议)的缩写,是 TCP/IP 体系中的网络层协议. IP ...

  3. 5GC 关键技术之 MEC 边缘计算

    目录 文章目录 目录 前文列表 MEC 边缘计算 ETSI MEC 标准化参考模型 MEC 架构设计原则 MEC 分层架构 MEC 系统架构 MEC 软件架构 MEC in NFV 融合架构 ETSI ...

  4. pageoffice6 实现在线模板套红

    在Web项目中处理Word文档,经常会用到Word模板,只不过这里的"模板"概念,都是指在Web项目中预先放置的doc.docx等扩展名的.真正的Word文档,对于Excel和PP ...

  5. docker/k8s常见错误处理

    启动docker失败,报错了 启动docker失败,报错了.Failed to load environment files: No such file or directory [root@mcwk ...

  6. 如此丝滑的API设计,用起来真香

    分享是最有效的学习方式. 博客:https://blog.ktdaddy.com/ 故事 工位上,小猫一边撸着代码,一边吐槽着前人设计的接口. 如下: "我艹,货架模型明明和商品SKU模型是 ...

  7. 卸载vsto插件的方法

    现在发布博客园的博客已经可以直接在word上进行,word上的代码高亮插件也安装起了,不过,因为有源码的原因,我就对插件进行了更改,安装之后需要重新安装,有时候在再次安装得时候会提示已经安装过了,我就 ...

  8. const与指针的组合

    ① const int *p; //指向一个整型常量的指针,p可变,p指向的对象不可变. ② int const *p; //同上. ③ int * const p; //p不可变,p指向的对象可变( ...

  9. itest(爱测试) 4.5.5 发布,开源BUG 跟踪管理 & 敏捷测试管理&极简项目管理软件

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理4合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代(含任务, ...

  10. 一周万星的文本转语音开源项目「GitHub 热点速览」

    上周的热门开源项目让我想起了「图灵测试」,测试者在不知道对面是机器还是人类的前提下随意提问,最后根据对方回复的内容,判断与他们交谈的是人还是计算机.如果无法分辨出回答者是机器还是人类,则说明机器已通过 ...