Tronlong创龙 发表于 2024-7-15 16:12

Linux 应用案例开发手册——基于Zynq-7010/20工业开发板

本帖最后由 Tronlong创龙 于 2024-7-21 15:08 编辑

    目 录
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工业级核心板。
https://p8.itc.cn/images01/20230101/c22bc43012f24a3e94ac91022daa902d.jpeg 如需重新编译 Linux 常用开发案例,请将对应案例 src 目录复制到 Ubuntu 工作目录 下,进入 src 目录执行如下命令加载 PetaLinux 环境变量,并执行 make 命令进行案例编译。编译完成后,将在当前目录下生成可执行文件。
Host# source /home/tronlong/PetaLinux/setting.sh
Host# make CC=arm-linux-gnueabihf-gcc
https://p0.itc.cn/images01/20230101/fe254cb12b2a4463a066e20924cffd95.jpeg图 1
2 Linux 常用开发案例
2.1 tl_led_flash 案例
2.1.1 案例功能
本案例通过向评估底板用户指示灯 LED 设备节点反复交替写入 1 、0 数值,实现 LED闪烁效果。 LED 点亮与熄灭时间均为 0.5s。
程序流程如下图所示:
https://p8.itc.cn/images01/20230101/e8cfe3550463404f8a3dfe66a399cfde.jpeg图 2
LED 设备节点为“/sys/class/leds/user-ledX/”目录下的 brightness 。
https://p4.itc.cn/images01/20230101/55d6e3a43c1842f0aaf41ad1644614eb.jpeg图 3
2.1.2 操作说明
将本案例 bin 目录下的可执行程序 tl_led_flash 复制到评估板文件系统,并在可执行
程序所在目录执行如下命令运行程序,即可看到评估底板 LED1 以 0.5s 的时间间隔进行
闪烁。同时,串口终端打印系统全部 LED 设备信息和程序当前控制的 LED 设备信息。
Target#
Target#
./tl_led_flash -help
./tl_led_flash -n 1
https://p8.itc.cn/images01/20230101/db9d6402022146a08cc5a026b0833778.jpeg图 4
2.1.3 关键代码
(1) 预定义 LED 数组。程序由此数组获取 LED 信息,数组信息必须为系统已有 LED 信 息,否则程序运行报错。
https://p9.itc.cn/images01/20230101/cf2e8fbbed27427595ec566a43b0cc9a.jpeg图 5
(2) LED 亮灭操作和时间间隔。
https://p7.itc.cn/images01/20230101/fc4b7ff66f9c49d5afab9fc59ff4f62e.jpeg图 6
2.2 tl_key_test 案例
2.2.1 案例功能
本案例通过监听用户按键设备节点状态, 检测按键事件。
程序流程如下图所示。
https://p3.itc.cn/images01/20230101/d5fba30dfdd84133bf570f5b5cada5b8.jpeg图 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

2.2.3 关键代码
(1) 定义按键。
https://p5.itc.cn/images01/20230101/aafd1a87f8f646fca0485db2609d4b75.jpeg图 9
(2) 监听按键事件。
https://p5.itc.cn/images01/20230101/24511dc1723c49bcadf5cf12794d28a5.jpeg图 10
(3) 循环监听。
https://p0.itc.cn/images01/20230101/469a4c6f695f4a26b999bada73bd95c9.jpeg图 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/。
程序流程如下图所示。
https://p4.itc.cn/images01/20230101/1d7a3559c1cf4a35993602ccb2a7484c.jpeg图 12
2.3.2 操作说明
使用 USB 转 CAN 模块连接评估板 CAN 接口和 PC 机 USB 接口,如下图所示。
https://p8.itc.cn/images01/20230101/459fa9e26cb54d6fb445a078b29b24f7.jpeg图 13
参照调试工具安装文档安装 USB 转 CAN 驱动和 ECAN Tools 调试软件,双击打开 ECAN Tools 软件,选择设备类型,然后点击“打开设备”。
https://p3.itc.cn/images01/20230101/64528a30040a4630bc699ac86e07bbe1.jpeg图 14
打开 ECAN Tools,界面如下图所示。
https://p1.itc.cn/images01/20230101/ace4fc51f8304a27824e96ed33a6b290.jpeg图 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
https://p6.itc.cn/images01/20230101/232c15f764574a1ab89d519e1bccf4fd.jpeg图 16
进入评估板文件系统, 使用文件系统自带的 canconfig 工具设置波特率,并启动 CAN
接口。
Target# Target#
Target#
canconfig canconfig
canconfig
can0 stop
can0 bitrate 125000
can0 start
https://p2.itc.cn/images01/20230101/4c03fa77328b4d61a05b55d2547161aa.jpeg图 17
将本案例 bin 目录下的可执行程序 tl_can_echo 复制到评估板文件系统,进入可执行 程序所在目录,执行如下命令查看程序参数信息。
Target# ./tl_can_echo -help
https://p1.itc.cn/images01/20230101/7a79e076b18d4f03acd5929a95aa7a95.jpeg图 18
执行如下命令绑定 CAN 接口,并接收由 ECAN Tools 发出的数据,然后将接收到的数
据重新发送出去。在 ECAN Tools 中输入数据并点击“发送”按钮,可看到有两帧数据, 一帧是发送数据,另一帧是接收数据。
Target# ./tl_can_echo can0 -v
https://p6.itc.cn/images01/20230101/a547d1675f104e31a9baf16aeaa4aa48.jpeg图 19
https://p7.itc.cn/images01/20230101/c274c23332424dada79e05346f8e1eae.jpeg图 20
可按"Ctrl + Z"暂停程序,并执行如下命令退出程序。
Target# killall -9 tl_can_echo
https://p3.itc.cn/images01/20230101/0f6a21eecb714dee95deb756515a8cda.jpeg图 21
2.3.3 关键代码
(1) 使用 socket 监听 CAN 接口。
https://p4.itc.cn/images01/20230101/3ec852b0b2a4444e8be0c8aedd11ca5a.jpeg图 22
(2)将从 CAN 接口接收到的数据重新发送出去。
https://p9.itc.cn/images01/20230101/8032951aa8864a46bd6a68aaf831fcb4.jpeg图 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 客户端测试程序。 程序流程如下图所示:
https://p7.itc.cn/images01/20230101/f869e5d2032f4104a6dfe8cd5c6375ba.jpeg图 24 TCP 通信
https://p0.itc.cn/images01/20230101/661a9e2c404a4a498ada3de7fb9d7e6a.jpeg图 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,请根据实际情况修

https://p9.itc.cn/images01/20230101/16d308b42a7f45e18023e91886c3f5ff.jpeg图 26
(1) TCP 通信测试
在可执行程序所在目录执行如下命令运行 TCP 服务端和客户端程序。 2233 为服务端
程序指定的端口号,客户端程序端口号参数需与服务端程序一致。
Target#
Target#
./tl_tcp_server 2233 //TCP 服务端命令
./tl_tcp_client 127.0.0.1 2233 //TCP 客户端命令
程序执行后,客户端将会连接服务端。在服务端输入字符串"Tronlong" ,按下回车键 即可在客户端显示对应内容。在客户端输入字符串"Hello Tronlong",按下回车键即可在服 务端显示对应内容,如下图所示。
https://p9.itc.cn/images01/20230101/912f925b1e7c4febb399a32234c2d9ab.jpeg图 27 TCP 服务端
https://p7.itc.cn/images01/20230101/bfe6ae824cf441c4b464260d09f1cdc5.jpeg图 28 TCP 客户端
(2) UDP 通信测试
在可执行程序所在目录执行如下命令运行 UDP 服务端和客户端程序。 2233 为服务端
程序指定的端口号,客户端程序端口号参数需与服务端程序一致。
Target#
Target#
./tl_udp_server 2233 //UDP 服务端命令
./tl_udp_client 127.0.0.1 2233 //UDP 客户端命令
程序执行后, 客户端将不会连接服务端。服务端在收到客户端信息前无法得知客户端 的存在,因此需要客户端先向服务端发送信息。
在客户端输入字符串"Tronlong",按下回车键即可在服务端显示对应内容。在服务端
输入字符串"HelloTronlong",按下回车键即可在客户端显示对应内容,如下图所示。
https://p0.itc.cn/images01/20230101/9d4137ab07f84b46b550be543a70ef95.jpeg图 29 UDP 客户端
https://p5.itc.cn/images01/20230101/04f3f0949efb474f91a4d3b95df320dc.jpeg图 30 UDP 服务端
如需在 PC 端 Ubuntu 系统运行服务端或客户端程序,请将案例 src 源码目录拷贝到
Ubuntu 工作目录。进入源码目录后执行 make 命令,即可在当前目录下生成 x86 端可执
行程序。在不同终端运行服务端或客户端程序的命令类似, 但 127.0.0.1 需使用服务器 IP
地址替代。
Host# make
https://p4.itc.cn/images01/20230101/4188703524c74193a013554d309bed02.jpeg图 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/”目录下。
https://p6.itc.cn/images01/20230101/7286cb631f8a45bcb0b44a5af4ce6ffa.jpeg图 32
3.1 tl_led_flash
3.1.1 案例功能
本案例通过向评估底板用户指示灯 LED 设备节点反复交替写入 1 、0 数值,实现 LED 闪烁效果。 LED 点亮与熄灭时间均为 0.5s。
程序流程如下图所示。
https://p1.itc.cn/images01/20230101/5d0ca13b102a42b8a1ba269634b4d20d.jpeg图 33
LED 设备节点为“/sys/class/leds/user-ledX/”目录下的 brightness 。
https://p1.itc.cn/images01/20230101/7b27ddfcdd744ac0ba253b1111954e13.jpeg图 34
3.1.2 操作说明
将案例目录下的 tl_led_flash.py 脚本文件拷贝到评估板文件系统,并在脚本文件所在
目录执行如下命令查看程序参数信息。
Target# ./tl_led_flash.py -h
https://p7.itc.cn/images01/20230101/cfb4c369177f4844a1d4770ae924b140.jpeg图 35
执行如下命令运行脚本程序,即可看到评估底板上的 LED1 进行闪烁。
Target# ./tl_led_flash.py
https://p2.itc.cn/images01/20230101/23ba3c127d294137b6baf665f0e53675.jpeg图 36
可按下"Ctrl + C"终止程序。
3.1.3 关键代码
(1) 查找所有 LED 设备。
https://p8.itc.cn/images01/20230101/930c92ecafa7419caddcc3649c4b97ec.jpeg图 37
(2) 控制 LED 亮灭。
https://p8.itc.cn/images01/20230101/d245d5a0c39c4c03833f7ae8eddc3a52.jpeg图 38
3.2 tl_key_test
3.2.1 案例功能
本案例通过监听用户按键设备节点状态, 检测按键事件。
程序流程如下图所示。

3.2.2 操作说明
将案例目录下的 tl_key_test.py 脚本文件拷贝到评估板文件系统,并在脚本文件所在 目录执行如下命令查看程序参数信息。
Target# ./tl_key_test.py -h
https://p1.itc.cn/images01/20230101/1bd42130f8c442109a19512d0b6fed91.jpeg图 40
执行如下命令运行脚本程序, 串口终端将打印提示信息。再按下评估板用户按键 KEY1, 程序将检测到按键事件,并打印按键状态信息。
Target# ./tl_key_test.py -d /dev/input/event0
https://p6.itc.cn/images01/20230101/f7580601c8fc4c038be9ffe60bdae504.jpeg图 41
可按下"Ctrl + C"终止程序。
3.2.3 关键代码
(1) 打开按键设备。
(2) 监听按键事件。

yangjiaxu 发表于 2025-1-23 11:19

Zynq-7010/20也是属于linux的是吧,我一直以为是FPGA的板子呢
页: [1]
查看完整版本: Linux 应用案例开发手册——基于Zynq-7010/20工业开发板