为啥要搞这个linux评估板?
小飞哥自毕业以来,工作5年了,一直从事的都是嵌入式MCU层面的开发工作,还从未涉足过linux开发相关的领域,最近的一次应该是翻过《鸟哥的linux私房菜》,学着敲过一些命令行,仅此而已…
这不最近想看看linux开发到底咋搞(好像又分应用层、多BSP驱动层等多个方向),对于习惯了MCU开发的底层攻城狮来说,必须得是个点灯大师…
最近有幸结识创龙科技的黄工,扒拉来了一块niubi的A40i工业评估板,就在这块板子上学习学习
TLA40i-EVM介绍
功能速览
创龙科技 TLA40i-EVM 是一款基于全志科技 A40i 处理器设计的 4 核 ARM Cortex-A7 高
性能低功耗国产评估板, 每核主频高达 1.2GHz, 由核心板和评估底板组成。
评估板接口资源丰富, 引出双路网口、 双路 CAN、 双路 USB、 双路 RS485 等通信接
口, 板载 Bluetooth、 WIFI、 4G(选配) 模块, 同时引出 MIPI LCD、 LVDS LCD、 TFT LCD、
HDMI OUT、 CVBS OUT、 CAMERA、 LINE IN、 H/P OUT 等音视频多媒体接口, 支持双屏异显、
Mali400 MP2 GPU, 1080P@45fps H.264 视频硬件编码、1080P@60fps H.264 视频硬件解码,
并支持 SATA 大容量存储接口。
核心板采用 100%国产元器件方案,并经过专业的 PCB Layout 和高低温测试验证,稳
定可靠,可满足各种工业应用环境。 评估底板大部分元器件均采用国产方案, 方便用户
快速进行产品方案评估与技术预研。
开箱
拍照环境+技术比较渣…大家勉强看哈,包装、板子是十分精美的
包装盒
开箱上板
核心板
配件清单
清单1-学习资料光盘:
清单2-4G天线:
比较遗憾的是,不带4G模组…
清单3-DC电源
清单4-读卡器
清单5-双头HDMI线
清单6-OTG转接线
等等…配件齐全,基本调试够用了
软硬件参数
- 硬件参数
从硬件配置上看,有485、CAN、WiFi、4G、蓝牙等,做一个工业网关、家居监控、仪表等是绰绰有余的
- 软件参数
开发板测试
第一次接触linux的板子,还是有一些发蒙的,好在创龙的开发资料以及技术支持都非常给力,即使如此还是走了一些弯路,上来就编译linux内核去了…搞了两天报了一堆错,好在及时回头,先从基本的搞起吧~
对刚接触板子的小伙伴来说,还是按照官方提供的教程文档,按照顺序慢慢来
系统启动测试
使用附赠的12v/2A电源适配器,连接开发板的DC电源口,并使用MicroUSB数据线连接开发板的串口到电脑,插入附赠的TF卡,并将拨码开关调到SD卡启动模式。
接入电源,并使用 Micro USB 线连接 PC 机和评估板的 USB TO UART0 调试串口
默认波特率率115200,使用终端调试助手mobaxterm打开所在串口号
想当于是板子的自检功能,有些设备没有插入,会报一些error,是不影响我们使用的
至此,系统启动完成,为了以后可以不插SD卡也能启动,也可以将系统一键固化到板载的ROM中。
点亮板载LED灯
终于看到了一些能够看懂得了…
接下来在命令串口输入命令行进行点灯测试,LED 设备节点为"/sys/class/leds/user-ledX/"目录下的 brightness。
LED 灯默认是亮的,接下来我们通过命令行控制亮灭
- 关闭LED1
echo 0 > /sys/class/leds/user-led0/brightness
- 打开LED1
echo 1 > /sys/class/leds/user-led0/brightness
编写LED控制代码
上面介绍了通过命令控制LED开启、关闭,我如果想要流水灯效果怎么办呢?
接下来写一段代码来实现流水灯的效果,主要还是看官方提供的demo吧
关键代码
(1) 预定义 LED 数组。程序由此数组获取 LED 信息,数组信息必须为系统已有 LED 信
息,否则程序运行报错。
/* User-operable LEDs */
static char *g_leds[] = {
"/sys/class/leds/user-led0",
"/sys/class/leds/user-led1",
"/sys/class/leds/user-led2",
"/sys/class/leds/user-led3"
};
(2) LED 亮灭操作和时间间隔。
while (!g_quit) {
/* Turn on LEDs */
for (i = 0; i < num; i++) {
/* Set the LED brightness value to 1 to turn on the led */
snprintf(cmd, 64, "echo 1 > %s/brightness", g_leds[i]);
if (system(cmd) != 0) {
fprintf(stderr, "Error: Failed to turn on %s\n", g_leds[i]);
exit(EXIT_FAILURE);
}
}
/* Keep the LEDs on for 500 ms */
usleep(500 * 1000);
/* Turn off LEDs */
for (i = 0; i < num; i++) {
/* Set the LED brightness value to 0 to turn off the LED */
snprintf(cmd, 64, "echo 0 > %s/brightness", g_leds[i]);
if (system(cmd) != 0) {
fprintf(stderr, "Error: Failed to turn off %s\n", g_leds[i]);
exit(EXIT_FAILURE);
}
}
/* Keep the LEDs off for 500 ms */
usleep(500 * 1000);
}
那么如何让目标板执行这段代码呢?
代码编译
参照官方文档《2-2-linux应用开发手册》中开发案例说明,环境搭建等,按照教程文档来就可以啦
如需重新编译 Linux 常用开发案例,请将对应案例 src 目录拷贝至 Ubuntu 工作目录下。
请先确保已参考 Linux 系统使用手册编译过 LinuxSDK,构建好 A40i 处理器对应的 GCC 编
译器。 然后进入 src 目录执行如下命令,使用 LinuxSDK 开发包目录下的 GCC 编译器进行
案例编译。编译完成后,将在当前目录下生成可执行文件。
Host# CC=/home/你的系统名称/A40i/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr
/bin/arm-linux-gnueabihf-gcc make
比如小飞哥的linux系统
将本案例 bin 目录下的可执行程序 led_flash 拷贝至评估板文件系统,并在可执行程序
所在目录执行如下命令运行程序,即可看到评估底板 LED 以 0.5s 的时间间隔进行闪烁。
同时, 串口终端打印系统全部 LED 设备信息和程序当前控制的 LED 设备信息。
具体拷贝过程参照教程文档,本次也不做具体说明了
可以看到,可执行文件已经拷贝到我们的开发板系统中了,接下来运行看看效果
可以看到,我们的两个LED灯已经闪烁起来了
至此,算是搭建起来了基本的操作环境,中间废了不少功夫,但好在没有遇到解决不了的问题,还算比较顺利吧,后面再慢慢与大家分享一些学习过程吧