文章目录
1、板子上手体验
首先非常感谢芯查查给了这样一个机会来测评这样一款性能十分强大的开发板,我拿到手的是MYC-Y6ULX-V2核心板及开发板,这块板子具有如下特点:
- 1、高性能i.MX6UL/i.MX6ULL系列处理器、内核Cortex-A7 主频900Mhz;主频还可以,已经接近1ghz了。
- 2、邮票孔140Pin引脚;工业级:-40~85℃,这使得这块板子非常适合开发,利于形成产品开发。
- 3、外设资源丰富:LCD接口、 双网口、CSI接口、USB OTG2、UART8 I2S,SPI,CAN;强大的外设接口使得这块板子可以用来做很多事情,不用去专门找一些其他的板子来当作外接的接口。
下面贴几张开箱的图片,下面是包装外观:(米尔电子的大log)
开发板正面(大大的邮票孔)
附赠的电源还有网线,以及用来调试的USB线,给的还是很充足的,不用专门去额外购买了。
2、板载硬件
板子的资料可以从官网获取,网址如下:
https://www.myir.cn/shows/78/26.html
资料网站:
https://www.myir-tech.com/product/myc_y6ulx.htm
一些编译的资料下载网站:
https://down.myir-tech.com/MYD-Y6ULX/
我拿到的是这一款
接口信息如下:
对应如下:
板载系统的适配情况如下:
3、系统信息
接上串口就可以用了,默认已经刷好了软件,上电就可以使用,首先是确认启动方式:
这里我设置位eMMC启动也就是0010拨码状态,状态如下所示:
信息查看的话我这里用的是串口,对着丝印接一下即可,如下所示:
之后打开就能看到系统启动的信息了
系统是无密码的,可以直接进入,当然不想用串口的话也可以ssh远程登陆,先查看一下设备ip地址:
之后使用ssh直接登陆就行
可以看到板子默认的系统是已经安装了ssh工具的,可以直接进去
用ssh的好处是传文件会方便很多,直接在右侧的窗口拖放文件就行了,真的不要太方便。
下面来看一下板子的基本信息吧:
查看CPU型号,性能等信息,核心芯片是 i.MX6ULx 系列是基于高性能、超低功率 ARM Cortex-A7核心处理器,处理器运行速度高达 900MHz,包含 128 KB L2 高速缓存和 16 位DDR3/LPDDR2 支持。其内部集成了电源管理、安全单元和丰富的互联接口。
查看CPU的频率,温度等相关的信息
查看CPU占用情况如下(这个一般评估某个模块是否过度占用资源)
总体情况看最上面一排就行,相关参数说明如下:
- %us:表示用户空间程序的 cpu 使用率(没有通过 nice 调度)
- %sy:表示系统空间的 cpu 使用率,主要是内核程序。
- %ni:表示用户空间且通过 nice 调度过的程序的 cpu 使用率。
- %id:空闲 cpu
下面还可以进行一下cpu的压力测试,cpu压力测试的方案比较多,我大概了解了一下,可以用下面的方式:
- stress命令:stress是一个Linux工具,可以用来模拟CPU、内存、磁盘等资源的压力,用来测试系统的稳定性和性能。
- sysbench工具:sysbench是一个多功能的基准测试工具,可以用来测试CPU、内存、数据库性能等方面。
但是都没跑起来,因此这里用官方推荐的计算圆周率的方案来测试,输入echo "scale=5000; 4*a(1)" | bc -l -q &
,之后会打印一个进程号出来,输入top可以看到
这个进程在测试cpu占用情况,并且占用率很高
几分钟后会输出一个计算结果:
查看内存占用情况(这个一般运行程序的时候看一下有没有内存泄漏用的比较多)
相关字段的含义如下:
- MemTotal :所有可用的 RAM 大小,物理内存减去预留位和内核使用
- MemFree :LowFree + HighFree
- Buffers :用来给块设备做缓存的大小
- Cached :文件的缓冲区大小
- SwapCached :已经被交换出来的内存。与 I/O 相关
当然通过free -h命令也可以获取内存信息,我们是512mb+4gb内存的方案,这样看起来也没什么问题了
查看内存信息,可以看到大概就是4gb了
插入一个u盘看看,这个系统已经做了自动挂载,可以看到比较顺利的挂载了,输入fdisk -l也可以看到挂载的u盘的信息。
4、 驱动测试
首先是GPIO接口,这块板子的gpio接口引脚是有一个对应关系,在这个文件里面
打开如下:
在linux上(也就是应用层驱动gpio),操作gpio的步骤如下:
输入下面命令导出GPIO echo 24 > /sys/class/gpio/export
设置GPIO方向:
设置为输出
c
echo "out" > /sys/class/gpio/gpio24/direction
设置为输入
c
echo "in" > /sys/class/gpio/gpio24/direction
查看gpio方向
c
cat /sys/class/gpio/gpio24/direction
之后就可以设置gpio的高低电平了
设置输出低电平
c
echo "0" > /sys/class/gpio/gpio24/value
设置输出高电平
c
echo "1" > /sys/class/gpio/gpio24/value
针对led,还设置了专门的驱动:
可以通过下面的命令读取led状态
c
cat /sys/class/leds/cpu/brightness
0就是关闭,这个led是pwm驱动的,这个数值在0-255之间
led的操作汇总如下:
c
echo 0 > /sys/class/leds/cpu/brightness 熄灭led
echo 0 > /sys/class/leds/cpu/brightness 点亮led
echo "heartbeat" > /sys/class/leds/cpu/trigger 开启led心跳
设置为心跳的效果如下:
gpio还可以引申出来按键,按键的效果如下:
这里我们看一下设备树的信息:
这里用的是一个脚本来测试的按键,在串口输入evtest
,之后按下按键,就可以看到打印的信息,如下所示
除了上面测试的这些,这块板子接口丰富,由于时间原因我没有一一测试,这里仅是浅浅的测试了一下。
5、编译linux三大件
终于到了大头了,下面开始看一下这个板子的系统构建框架部分,简单来说就是linux三大件的部分了,这里主要参考这个文档
一开始我以为也是常规的buildroot
的那一套,结果不是,他这里用的是Yocto
的方式,这个我之前是从来没有接触过的,关于yocto,介绍是这样的:
- Yocto 不仅仅是一个制做文件系统工具,同时提供整套的基于 Linux 的开发和维护工作流程,使底层嵌入式开发者和上层应用开发者在统一的框架下开发,解决了传统开发方式下零散和无管理的开发形态。
下面来体验一下,这里我用的是windows上的wsl来开发,这个的好吃是可以榨干你电脑的性能,我觉得用起来还是很爽的。
把需要的文件导入,准备编译
首先还是安装必要的库
c
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib
build-essential chrpath socat cpio python python3 python3-pip python3-pexpect
xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-
dev pylint3 xterm
设置环境变量,这里要求用个人账号,不能用root
c
mkdir -p ~/MYD-Y6ULX-devel
export DEV_ROOT=~/MYD-Y6ULX-devel
cp -r <DVDROM>/02_Images $DEV_ROOT
cp -r <DVDROM>/03_Tools $DEV_ROOT
cp -r <DVDROM>/04_Sources $DEV_ROOT
接下来是安装编译器,进入sdk目录,输入下面命令这个工具链要你自己用官方给的资料里面拷贝过来,有下面两种:
安装编译工具的命令
c
./fsl-imx-fb-glibc-x86_64-myir-image-fullcortexa7t2hf-neon-myd-y6ull14x14-toolchain-5.10-gatesgarth.sh
使用下面命令测试是否安装完成:
c
source /opt/test5.10/environment-setupcortexa7t2hf-neon-poky-linux-gnueabi
$CC -v
看到如下输出,说明OK了
之后就可以编译了(构建镜像)
进入源码目录,开始解压
c
cd $DEV_ROOT/04_Sources
tar -xzf MYiR-i.MX6UL-Yocto.tar.gz
大概是这些内容:
然后官方教程让你去网上拉更新下代码,这也太慢了,还好他给了替代方案,就是这个10几个g的大包,直接解压他就完事了
回到上一级新建一个路径,之后去这个路径下面解压
c
cd imx6ulx-yocto
tar -xvf downloads.tar.gz -C ./
搞完是这样的
之后就可以开始编译了(我只能说确实方便)
c
bitbake myir-image-full 带gui的版本
bitbake myir-image-core 不带gui版本
编译开始后就会自动去寻找匹配,然后下载,之后就是疯狂占用cpu编译了
编译好了是这样的,编译产物在这个路径下:tmp/deploy/ima ges/myd-y6ull14x14/
这些就是三大件了,不得不说这个构建方式确实方便啊
然后关于这个构建我总结下吧:
- 1、网络要好,要能连外网那种,不然总会有超时什么的拉不下来,很麻烦这样搞得
- 2、失败了就再来一次,我也是失败了两三次才行的,但是只要成功了一次后面就没失败过了
- 3、有一个小问题,是下面这个报错
最后解决方案是参考的这里
https://community.nxp.com/t5/i-MX-Processors/Yocto-Error-when-generating-the-SDK-for-imx-linux-5-10/m-p/1261377
具体改动的话参考我这里吧:
之后就是烧录固件了,不得不说这个烧录固件是真的方便了,这里我用的是usb更新(前面不是提到官方送了一个USB数据线吗,没想到这里用到了,真是贴心哦,爽歪歪了)
更新固件步骤如下:
- 切换启动拨码开关(SW1)的第三位位 OFF,第四位为 ON
- 使用 USB 转接线(Type-A 转 Micro-B)连接 PC 机 USB 端口与开发板 Micro USB OTG 端口(J26)
- 使用 DC 12V 电源适配器连接至开发板的电源座(J22)
- 以管理员权限打开 cmd 窗口,进入 MYD-i.MX6ULX_UUU_v1.1 目录,输入:
uuu.exe myd-y6ulx-y2-4e512d-qt.auto 开始烧写系统
刷写过程如下:
进度条走完重启:
启动
如果用sd卡来更新,用下面的方式制作sd卡镜像,之后插卡更新即可
之后启动
三大件这里限于篇幅就到这里了,怎么说呢,感觉这个新的工具还是很方便,然后官方提供的这些下载工具也都很给力,用起来还是很爽的。
7、摄像头测试
因为最近在做摄像头相关的工作,所以就来测试一下摄像头相关的功能吧:
首先给板子接上USB摄像头,下面查看摄像头信息
查看dev信息
查看摄像头信息
可以用下面的命令来查看视频流
视频显示出来如下所示:
也可以直接用v4l2来查看:
c
v4l2-ctl --device=/dev/video2 --stream-mmap=3 --stream-to=video_output.yuv --stream-count=100
会输出一个yuv文件,打开就能看
之后尝试使用mjpg_streamer
来实现一次推流,但是我发现输出gcc用不了,因为我用的这个是精简版本的系统,所以就比较小了
那么就只能用交叉编译了
先把这个库拉下来:
c
https://github.com/jacksonliam/mjpg-streamer/archive/refs/heads/master.zip
之后上传到我们的wsl里面,然后unzip解压一下
按照上面的命令(前面章节)配置一下交叉编译器:
因为现在make是用的gcc,所以需要先替换原来makefile里面的gcc为cc,使用下面的命令:
c
find -name "Makefile" -exec sed -i "s/CC = gcc/#CC = gcc/g" {} \;
grep -rn 'CC = gcc' * 这个是检查效果的
结果如下,有四处被替换
之后make编译一下:
生成这些库和可执行文件
拖到开发板里面
运行测试
c
v4l2-ctl --device=/dev/video2 --stream-mmap=3 --stream-to=video_output.yuv --stream-count=100
打印如下:
使用vlc拉流:(延迟一般,但是说实话对于这种板子来说还可以)
c
http://192.168.1.4:8080/?action=stream
9、总结
限于时间原因,本次仅测评了这些内容,总的来说,这款开发板还是很不错的,他给我眼前一亮的地方在域厂家对他的配套生态做的很好,这使得开发者上手起来会很方便。特别是系统构建这块,其他家还在用老式的方式,这边已经在用yocto了,非常给力,让我学到了很多东西。厂家的文档是十分详细,非常适合入门学习,给深入学习也留足的空间,真想多拥有一段时间啊。