同事电话让我测试一块开发板,评测是其喜欢的活动,极客最爱评测!这次因为公共因素,就让我帮忙测试。
在这里首先感谢创龙和EEWolrd提供的测试机会,同时感谢创龙厂家和技术给与的资源和帮助,我也希望我的困惑和解决方法可以帮助其他使用这块板卡的开发者们少走点弯路。再次感谢EEWorld支撑的这个平台生态,我常年混迹其中,长期潜水,从不发帖,这次发帖如果有什么不妥,希望大家海涵。(先写了一个文档,后来才知道需要发帖,里面的图片如果不清楚可以给我说)
1. 前言
创龙的板卡第一次接触,做工不错,接口也很齐全,说明文档这几天看下来也够用,技术支持回复很及时。本来不想做开箱评测的,同事说作为工业板卡,和我们过往开发和使用过的工业级的板卡对比还是可行的,郁闷了,我这没有测试测试仪器仪表,怎么评价!不成后面补充一篇开箱评测就可以了。这个开发板是10月中收到的,因为通过百度云下载的相关开发资料比较大,整个板卡测试开始的时间就到这几天了。这两个帖子测试过程中,我只使用了开发板和电源。
首先明确我已经过了硬件性能为王的岁数,一个开发板卡的好坏与否,我依据以下的几个标准:
其他的如多少个io,多少总线支持,这些在具体应用时候才会考虑,比如这次移植做个PLC+AI视频集成的东西,也用不到IO。如果厂家宣扬开发板串口有特点,挺骇人听闻的技术点。再比如工业的各种EMC测试,我们只能依靠厂家的测试报告,所以我的任务就是确定用这个板卡是否可以很容易的进行嵌入式开发,或者通过我的测试帮助其他人减少搭建开发环境的时间。如果时间够用,在移植第三方库或者PLC开发中看看整体开发环境的兼容性。
2. 开发目标
我也不知道这个板卡具体能留我手中多久,但是我还是列了一个开发明细,作为整个板卡的评测流程。整个评测的最终目标是完成一个PLC的移植和运行,只要保证整个控制器跑起来就可以了。可能需要解决的问题包括控制器开发、IO开发、i2c或者spi、网络开发(冗余不做)、设备端人机界面不做。如果把hmi部分算上,这个TLT3-EVM的接口应该都可以用到了。评测报告我争取随开发进度完成,我会尽力完成这个开发评测。如果设备够并且厂家允许,破坏性测试也试一下(狗头)。
3. 产品简介
这部分我抄写评估版规格书,主要方便大家知道规格参数。
创龙科技 TLT3-EVM 是一款基于全志科技 T3 处理器设计的 4 核 ARM Cortex-A7 国产工业评估板,每核主频高达 1.2GHz,由核心板和评估底板组成。核心板 CPU、ROM、RAM、电源、晶振等所有器件均采用国产工业级方案,国产化率 100%。同时,评估底板大部分元器件亦采用国产工业级方案。核心板经过专业的 PCB Layout 和高低温测试验证,稳定可靠,可满足各种工业应用环境。
评估板接口资源丰富,引出双路网口、双路 CAN、双路 USB、双路 RS485 等通信接口,板载 Bluetooth、WIFI、4G(选配)模块,同时引出 MIPI LCD、LVDS LCD、TFT LCD、CVBS OUT、CAMERA、LINE IN、H/P OUT 等音视频多媒体接口,支持双屏异显、Mali400 MP2 GPU、1080P@45fps H.264 视频硬件编解码,并支持 SATA 大容量存储接口,方便用户快速进行产品方案评估与技术预研。
图 TLT3-EVM 板卡
4. 本节目标
5.检查Linux版本
使用 cat /etc/issue 查看信息如下,这应该是全志自己的linux版本。
我先从官方技术支持处申请了一个虚拟机,直接按官方提供的linux应用开发手册的过程进行编译和运行,已经可用编译程序了。我最终还是选择手撸一遍开发环境的搭建。
搭建虚拟机和解压SDK
在创龙资料盘里面TLT3-EVM_V1.4\4-软件资料\Linux\LinuxSDK,存放的就是我们下面需要SDK文件。可以通过U盘拷贝到虚拟机的/home/test3/T3目录下
输入命令如下:
mkdir /home/test3/T3
tar -zxvf LinuxSDK_14_24_15_16.tar.gz -C /home/test3/T3
等待一会,解压完成后在/home/test/T3看见解压包的内容
安装开发工具
在T3目录运行install-tools.sh,需要选择的时候直接回车即可。
这里将会安装SDK需要的环境。下面是我们真正的配置开发环境的步骤。
配置编译环境
在lichee 目录运行./build.sh config 这里我选择hdmi做视频输出。
test3@ubuntu:~/T3/lichee$ ./build.sh config
Welcome to mkscript setup progress
All available chips:
0. sun8iw11p1
Choice: 0
All available platforms:
0. linux
Choice: 0
All available kernel:
0. linux-3.10
Choice: 0
All available boards:
0. t3-mp1
1. t3-p1
2. t3-p2
3. t3-p3
4. tlt3_a40i-evm
Choice: 4
All available rootfs:
0. buildroot
1. buildroot-201611
2. debian_fs
Choice: 1
select buildroot-201611
All available float:
0. gnueabi
1. gnueabihf
Choice: 1
select gnueabihf
All available qt version:
0. 5.9.0
1. 5.9.7
Choice: 0
select 5.9.0
All available output configs:
0. hdmi
1. vga
2. lvds_lcd
3. mipi_lcd
4. tft_lcd
Choice: 0
All available output configs:
0. t3
1. a40i
Choice: 0
create misc_config gnueabihf
test3@ubuntu:~/T3/lichee$
输入为0、0、0、4、1、1、0、0、0,
配置编译环境2——编译Uboot
在u-boot-2015.07目录,清理目录后重新配置SPL编译选项
test3@ubuntu:~/T3/lichee$ cd brandy/u-boot-2014.07/
test3@ubuntu:~/T3/lichee/brandy/u-boot-2014.07$ make distclean
test3@ubuntu:~/T3/lichee/brandy/u-boot-2014.07$ make sun8iw11p1_config
Configuring for sun8iw11p1 - Board: sun8iw11p1, Options: SUN8IW11P1
然后执行make spl进行编译
编译完成后,生成 SPL 镜像文件"tools/pack/chips/sun8iw11p1/bin/boot0_sdcard_sun8iw11p1.bin",该文件需转化为.fex 格式后使用。(这句话抄资料的,现在的活还没有到烧卡运行那步)
Boot编译,在u-boot-2014.07 目录运行make -j8 ,开始uboot编译,编译完成后,生成 U-Boot 镜像文件"tools/pack/chips/sun8iw11p1/bin/u-boot-sun8iw11p1.bin",该文件需转化为.fex 格式后使用
make -j8
编译SDK执行下列命令
cd ../../linux-3.10/
make distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun8iw11p1smp_defconfig
执行如下命令,配置内核选项。根据"arch/arm/configs/sun8iw11p1smp_defconfig"文件进行内核编译配置,并保存配置信息至当前目录.config 文件中
如果需要配置实时内核,参看看厂家手册——Linux系统使用手册(P16页,和树莓派之类的方法是一样的)
执行一下命令,配置系统环境
cd ../buildroot-201611/
make clean
make sun8iw11p1_hf_defconfig
配置内核选项
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-sun8iw11p1smp_defconfig
进入 lichee 目录,执行如下命令,一键编译 Linux 内核、内核模块、设备树文件和buildroot 文件系统。执行当前命令不会进行 Qt 编译,编译生成的 buildroot 文件系统镜像比较精简,未支持 Qt 功能。)
cd ..
./build.sh
编译时间要由CPU和硬盘速度决定,如果用老机器,估计两个小时都有可能。这一步是生成 Linux 内核、内核模块、设备树文件和 buildroot 文件系统镜像文件,镜像文件需转化为.fex 格式后使用。
最后检查在out/sun8iw11p1/linux/common目录下生产boot.img文件
目录在linux-3.10/output/lib/modules/3.10.65-rt69/
文件linux-3.10/arch/arm/boot/dts/tlt3_a40i-evm.dtb
文件out/sun8iw11p1/linux/common/rootfs.ext4
我们在Dmo目录下例子led_flase/src运行
CC=/home/tronlong/T3/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/bin/arm-linux-gnueabihf-gcc make
编译完成后,我们使用scp led_flash root@192.168.99.98:/root/ 把编译的结果发送到开发版的root目录下。
scp led_flash root@192.168.99.98:/root/
使用ssh root@192.168.99.98 登录开发版,在root目录下,使用chmod +x led_flash给文件添加权限。使用led_flash -n 1或者led_flash -n 2 就可以看到开发版的灯进行闪速了。
chmod +x led_flash
led_flash -n 1
这部分就是测试目标1中的开发环境按说明书的方法搭建,到现在为止,都没有问题。如果有任何问题,可以用sudo再运行一次。
7.开发环境的搭建(Ubuntu22 & Debian sid)
在最新版的的ubuntu 22根据上述顺序进行搭建,编译sdk时候提示错误应该是版本太低的缘故,具体适配可能需要厂家支持,Debian也是类似问题。
后续可能试一下在wsl里面的效果。
★ 在整个流程中,如果有任何编译问题,可以在sudo下再次运行,看结果是否可以顺利完成
本帖最后由 三十三 于 2022-10-25 13:54 编辑8.配置QT的远程调试
前面已经可以用命令行进行程序的编译了,不过那样没有任何有用的资料,现在我们配置QT Creator,让其可以做远程调试。配置前用户最好使用使用 ssh root@192.168.99.98 ,登录一下开发板,方便后续配置。
编译QT支持,在T3目录下的lichee目录下运行下列命令
./comp_qtLib-590_only.sh
等编译完成后,开始配置QT的环境
构建套件
其中sysroot路径:/home/test3/T3/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabihf/sysroot (请根据自己本机情况配置)
上述工作完毕后,QT下的开发环境就建立完毕。
下面将进在QT Creator建立一个C++程序,默认用qmake。
target.path=/root
INSTALLS+=target
上述工作做完后,就可以开发和调试了,这里是构建完毕后,在开发板目录下的文件,其中App1就是建立的程序。
下图位是在开发PC上,单步调试下的抓图
我使用Demo里面的led部分的代码进行调试,很方便易用,速度也很快。
到这里,编译环境基本搭建完毕,QT的远程调试也已经完毕。
这次开发环境安装测试在不同的debian和ubuntu系统安装了多次,测试结果还是官方推荐的ubuntu18是没有任何问题的,也测试了使用qt creator通过以太网就进行远程开发调试,这种方法是对嵌入式开发来讲是最好最方便的开发方式。
这里的问题依旧是缺少多种linux版本的支持方案,比如我的工作机器是debian,偶尔会用manjora,debian 都是在sid下,安装兼容性问题是有影响,同时也能理解厂家对ubuntu18 lte的支持是应为其长期官方支持的缘故。
关于PLC的移植开发和编译工作,下来会尝试进行编译,看下整体开发环境兼容性的效果。
本帖最后由 三十三 于 2022-10-25 03:15 编辑
晚上没啥事,就继续更新帖子,上次弄做完的工作,设立了几个目标就是继续完成
所以这次继续编译相关的库,看看顺利不。首先移植以下lua这个常用库看看效果。
9. 编译lua
在QT新建一个库
QTCore取消,剩下的就是一路确定就可以了。
选择项目后,添加“现有文件”,选择lua文件加入,操作如下
其中lua.che luac.c需要去除,添加完毕后,选择release 生成即可。
在/home/test3/MySource/build-lua-T3-Release 可以看见文件列表,其中liblua.so.1.0.0 即使我们需要使用的文件
10. 运行lua相关例子
在QT Creator中新建一个C++项目,名称为testLuaApp,路径根据你自己的目录选择即可。
一路回车,编译环境选择T3即可。
在build-lua-T3-Release下输入命令cp liblua.so.1.0.0 ../testLuaApp/liblua.so
把库文件拷贝到工作目录中。
选择项目名称,右键选择“添加库”,
最后testLuaApp.pro内容如下
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
unix:!macx: LIBS += -L$$PWD/./ -llua
INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.
target.path=/root
INSTALLS+=target
拷贝lua目录下的lauxlib.h、lua.h、luaconf.h、lualib.h 四个文件到当前目录下。
main.cpp的内容如下
#include <iostream>
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
using namespace std;
char *code = "for i=0, 3 do print('Hello, world!@lua') end";
int main()
{
cout << "Hello World@main!" << endl;
lua_State *s=luaL_newstate();
luaL_openlibs(s); //打开Lua附加库
luaL_dostring(s, code); //执行字符串中的源代码
lua_close(s); //关闭虚拟机
return 0;
}
重新构建即可,这时候运行文件生成了。
这时候需要用 scp liblua.so root@192.168.99.98:/root/liblua.so.1 把库同步到开发板上。
这时候我们使用debug就可以跟踪程序运行。运行结果如下
本帖最后由 三十三 于 2022-10-28 03:28 编辑1. 这里出了一个乌龙,我好像发错地方了,和厂商那边确认了一下,因为公共因素,我准备这边发,同事会做同步。
2. 我这个测试是同步做的,因为手头要开发项目多。又不想写水贴,自然工作量就增加了。
3. 占位是因为写了很多内容,后来发现问题就删除了,后续会补足。
4. PLC移植我正在考虑做那家的,作为板卡测试,其实没有必要弄的太麻烦。我们有自己的PLC内核(C/C++/Python/go 4种版本),开源的内核也基本全做过。所以选择那个到时候再说了。如果有什么建议可以直接给我留言。
本帖最后由 三十三 于 2022-10-26 23:07 编辑okhxyyo 发表于 2022-10-26 10:11 楼主这个回复是先占楼吗?还是有什么问题?
先占楼
这几天看了一些评测,发现我写的东西和其他人不一样,大家都是硬件为主,显示各个模块的功能,跑马灯、算法跑通就可以了,我这要求的工作量有点大,自己还纠结了一阵,还想把板卡退回去,这活有点大了。
后来想通了
对于评测,比如个人PC,用评测软件,算算各个部件的分数就可以,手机也是一样。但是开发板,就算每个部件的分值都很高,对开发者来讲需要好像不是很重要,因为核心部件速度够了,剩下的都可以换部件的。那我最关心的是什么,不就是作为开发者,如何能让我的代码控制每一个部件,这需要的就是代码、驱动、项目和技术的支撑。
那我评测方向应该就是最关心的事情,当然我代表不了大家,我关心就是能不能快速、安全、方便、稳定的用这个板卡做出我想要的东西,那这个评测最终应该告诉大家是或者不是,而这是我认为一个开发板评测的基本要求。只有这个评测之后,才是对系统各个部件运行的稳定性进行评测,才能最终获取这个开发板基本的稳定性信息。
如果我的工作能帮其他人在开发板选型方面节约一周或者更多的时间,我的工作是有意义的。
11.开箱评测
补充前面任务
本帖最后由 三十三 于 2022-10-28 15:36 编辑