嵌入式技术
小飞哥自毕业以来,工作5年了,一直从事的都是嵌入式MCU层面的开发工作,还从未涉足过linux开发相关的领域,最近的一次应该是翻过《鸟哥的linux私房菜》,学着敲过一些命令行,仅此而已...
这不最近想看看linux开发到底咋搞(好像又分应用层、多BSP驱动层等多个方向),对于习惯了MCU开发的底层攻城狮来说,必须得是个点灯大师...
最近有幸结识创龙科技的黄工,扒拉来了一块niubi的A40i工业评估板,就在这块板子上学习学习
创龙科技 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 设备节点为"/sys/class/leds/user-ledX/"目录下的 brightness。
LED 灯默认是亮的,接下来我们通过命令行控制亮灭
echo 0 > /sys/class/leds/user-led0/brightness
echo 1 > /sys/class/leds/user-led0/brightness
上面介绍了通过命令控制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
", 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
", 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灯已经闪烁起来了
至此,算是搭建起来了基本的操作环境,中间废了不少功夫,但好在没有遇到解决不了的问题,还算比较顺利吧,后面再慢慢与大家分享一些学习过程吧。
全部0条评论
快来发表一下你的评论吧 !