【RK3568】linux嵌入式教程——点亮LED
前言
在嵌入式开发中,点亮一个 LED 是入门级的实验,但它能帮助我们熟悉硬件接口、内核驱动和用户空间编程。本文将介绍如何在 RK3568 平台上通过 Linux 系统点亮一个 LED,并通过实际操作加深对嵌入式开发的理解。
一、硬件准备
1.1 RK3568 平台简介
-
RK3568 是一款基于 ARM 架构的嵌入式处理器,广泛应用于智能硬件和物联网设备。
-
介绍 RK3568 的主要特性(如核心架构、内存支持、外设接口等)。
-
作者采用的开发板是临滴科技的LKD3568开发套件
1.2 硬件连接
LKD3568开发板上有 2 个 LED 状态工作灯,不需要额外连接硬件 如下表所示:
LED | Pin name | Pin number |
---|---|---|
Green | GPIO0_B7 | 15 |
Green | GPIO4_C4 | 148 |
可通过使用 LED 设备子系统或者直接操作 GPIO 控制该 LED
二、软件环境搭建
2.1 系统准备
-
在以往的文章有中提及
2.2 开发工具
-
SSH,MOBAX工具
三、点亮 LED 的方法
3.1 通过命令行操作
3.1.1 查找 LED 设备
-
介绍如何通过
/sys
文件系统查找 LED 设备路径。 -
示例命令:
ls /sys/class/leds/
3.1.2 控制 LED 亮度
-
通过
echo
命令控制 LED 的亮度。需要注意的是,在通过命令操作设备目录时需要高权限 -
示例命令:
-
sudo -s//超级权限
echo 0 > /sys/class/leds/work1/brightness //灯亮 echo 1 > /sys/class/leds/work1/brightness //灯灭
-
提供点亮和熄灭 LED 的完整命令。
3.2 编写 C 程序控制 LED
-
介绍如何使用 C 语言编写程序控制 LED。
-
提供一个简单的示例代码,展示如何通过文件操作控制
/sys/class/leds/work1/brightness
。 -
示例代码:
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp = fopen("/sys/class/leds/work1/brightness", "w"); if (!fp) { perror("Failed to open brightness file"); return -1; } fprintf(fp, "1"); fclose(fp); printf("LED is turned on.\n"); return 0; }
-
编译和运行程序。
gcc -o led led.c
3.4 使用Python 控制
- 创建文件:
touch led.py
- 示例代码:
# -*- coding: utf-8 -*-
import os
import time
def control_led(brightness):
led_path = "/sys/class/leds/work1/brightness" # LED 的路径
try:
with open(led_path, "w") as fp:
fp.write(str(brightness)) # 写入亮度值
print(f"LED is turned {'on' if brightness == 1 else 'off'}.")
except IOError as e:
print(f"Failed to open brightness file: {e}")
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
control_led(1)
time.sleep(1)
control_led(0)
time.sleep(1)
control_led(1)
time.sleep(1)
control_led(0)
time.sleep(1)
- 运行
sudo python3 led.py
四、常见问题及解决方法
4.1 权限问题
-
如果出现“Permission denied”错误。
-
sudo -s//超级权限
4.2 设备未识别
-
如果 LED 设备未被识别,说明如何检查内核驱动是否加载。
-
提供内核日志查看方法:
dmesg | grep -i led
五、总结
-
回顾点亮 LED 的主要步骤。
-
强调掌握 Linux 嵌入式开发基础的重要性。
六、参考资源
-
LED — LKD3568 v1.3.3 documentation
-
LKD3568 用户手册 — LKD3568 v1.3.3 documentation