目 录

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. 源码安装expect

    1. yum安装expect 如果有外网,可以yum安装,如下: yum install expect 2.源码安装expect 下载tcl源码包 cd /tmp &&wget htt ...

  2. gin-vue-admin 03 项目打包上线

    目录 作者视频 思路 环境要求 1. 配置nginx 2.打包前台vue代码 3.打包后台go代码 4. 上传代码到服务器 5. 后台运行power 6. 访问后台 开发场景: 1. nginx 配置 ...

  3. ansible(19)--ansible的playbook

    目录 1. playbook简介 2. playbook编写规范 2.1 YAML语法规范 2.2 YAML语法要素 2.3 Playbook核心元素 2.4 Playbook的基础组件 3 Play ...

  4. uniapp微信小程序uni.request捕获500异常

    通常使用ajax,axios等进行服务请求,500错误或者其他的错误都会直接进入到错误通道里头,比如ajax异常的话会进入到error的回调函数里头,axios异常会进行到catch里头,一开始以为u ...

  5. 密码学—DES加密的IP置换Python程序

    文章目录 IP初始置换与逆置换 编程想法 转二进制过程中的提取一些数据 64为一组 IP置换 IP逆置换 DES发明人 美国IBM公司W. Tuchman 和 C. Meyer1971-1972年研制 ...

  6. C语言:如何删除超链接

    单独写出一个函数出来,基本思想就是用fscanf一个一个字符读取出来,(文本流只能用fscanf,不能用fgetc等用于二进制流的函数,不然会导致乱码)遇到<的时候就停止读取,先把之前存进cop ...

  7. PyQt5自定义信号

    一.简介 在 PyQt5 中,自定义信号是一个常见的任务,通常用于在对象之间传递信息或触发特定行为.自定义信号需要继承自 QtCore.pyqtSignal 并定义其参数类型. 二.操作步骤 1.导入 ...

  8. k8s证书相关

    1.cfssl 字签证书 查看证书 可以使用以下命令查询CFSSL证书是否过期: 复制代码   cfssl certinfo -cert <certificate_file> 其中,< ...

  9. HC32L110(六) AS06-VTB07H V5.0测试板AT指令固件

    目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录 HC32L110(二) HC32L110在Ubuntu下的烧录 HC32L110(三) HC32L110的GCC工具链和VS ...

  10. 搭建一套完整的ELK系统

    ELK日志收集系统介绍   一  简单介绍 ELK部署搭建有很多成型的方案,这里推荐一种比较中规中矩的方案,它整合了logstash比较消耗资源以及当服务端临时宕机的时候出现数据丢失的问题,主要由fi ...