news 2026/5/30 8:27:39

亲测有效!用测试开机启动脚本实现Armbian自动点灯

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
亲测有效!用测试开机启动脚本实现Armbian自动点灯

亲测有效!用测试开机启动脚本实现Armbian自动点灯

1. 引言:让开发板在开机时自动点亮LED

你有没有这样的需求:希望Armbian系统一启动,就自动点亮某个GPIO引脚上的LED?比如作为运行状态指示、调试信号,或者只是想炫一下“我的板子活了”?

本文将带你从零开始,手把手实现一个开机自动点灯的脚本,并深入讲解背后的启动机制。我们不依赖复杂的图形界面工具,而是通过最直接、最稳定的方式——编写系统级启动服务,确保每次上电都能可靠执行。

整个过程无需额外软件包,只使用Armbian自带的功能,适合树莓派、Orange Pi、NanoPi等各类基于Linux的嵌入式开发板。

无论你是刚接触嵌入式Linux的新手,还是想巩固系统启动知识的老玩家,这篇文章都能让你有所收获。


2. 理解Armbian的启动机制:systemd vs init.d

2.1 Armbian默认使用systemd

现代Armbian系统(基于Debian或Ubuntu)已经全面采用systemd作为初始化系统(init system),也就是系统的第一个进程(PID 1)。它负责启动所有后续的服务和应用。

你可以通过以下命令验证:

ps -p 1 -o comm=

输出结果应该是:

systemd

这说明你的系统确实是用 systemd 来管理启动流程的。

2.2 init.d 是兼容层,并非原生机制

虽然你还可能看到/etc/init.d/目录下有脚本,甚至可以用update-rc.d添加启动项,但这些其实都是systemd 的兼容性封装

当你把一个脚本注册到 init.d 时,systemd 会自动生成一个临时的 unit 文件来调用它。这意味着:

  • 实际控制权仍在 systemd 手中
  • 日志由journalctl统一管理
  • 启动顺序和依赖关系仍受 systemd 规则约束

所以,与其依赖这种“中间层”,不如直接写一个标准的 systemd service 文件,更清晰、更可控。


3. 编写点灯脚本:控制GPIO引脚

我们要做的很简单:在系统启动完成后,自动导出指定GPIO引脚,并设置其为输出模式,然后点亮连接在上面的LED。

3.1 创建脚本文件

首先创建一个可执行脚本,用于配置GPIO:

sudo nano /usr/local/bin/gpio-init.sh

输入以下内容:

#!/bin/bash # 导出 GPIO 引脚(根据实际硬件调整编号) echo "6" > /sys/class/gpio/export 2>/dev/null || true echo "8" > /sys/class/gpio/export 2>/dev/null || true echo "9" > /sys/class/gpio/export 2>/dev/null || true echo "10" > /sys/class/gpio/export 2>/dev/null || true # 设置方向为输出 echo "out" > /sys/class/gpio/gpio6/direction 2>/dev/null || true echo "out" > /sys/class/gpio/gpio8/direction 2>/dev/null || true echo "out" > /sys/class/gpio/gpio9/direction 2>/dev/null || true echo "out" > /sys/class/gpio/gpio10/direction 2>/dev/null || true # 设置初始值:1 表示高电平(点亮LED) echo "1" > /sys/class/gpio/gpio6/value 2>/dev/null || true echo "1" > /sys/class/gpio/gpio8/value 2>/dev/null || true echo "1" > /sys/class/gpio/gpio9/value 2>/dev/null || true echo "1" > /sys/class/gpio/gpio10/value 2>/dev/null || true exit 0

注意:

  • 2>/dev/null || true是为了防止重复导出时报错导致脚本中断
  • GPIO编号需根据你的开发板型号和接线进行调整
  • 某些板子需要先加载设备树或启用特定内核模块,请确保GPIO功能已启用

3.2 赋予执行权限

保存后,给脚本添加可执行权限:

sudo chmod +x /usr/local/bin/gpio-init.sh

3.3 手动测试脚本是否生效

可以手动运行一次看看LED是否会亮:

sudo /usr/local/bin/gpio-init.sh

如果LED成功点亮,说明脚本工作正常,接下来我们让它在每次开机时自动运行。


4. 配置systemd服务实现开机启动

4.1 创建service文件

创建一个新的systemd服务单元文件:

sudo nano /etc/systemd/system/gpio-init.service

填入以下内容:

[Unit] Description=GPIO Initialization Service After=multi-user.target # 可选:如果你依赖网络或其他服务,可以添加 # Requires=network-online.target # After=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/gpio-init.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
参数解释:
  • Description: 服务描述,便于识别
  • After=multi-user.target: 表示在多用户环境准备好后再运行(即系统基本服务已启动)
  • Type=oneshot: 表示这是一个一次性执行的任务,不需要常驻后台
  • RemainAfterExit=yes: 即使脚本执行完毕,也认为服务处于“激活”状态
  • WantedBy=multi-user.target: 表示该服务属于标准多用户运行级别

4.2 启用服务

保存文件后,通知systemd重新加载配置:

sudo systemctl daemon-reload

然后启用该服务,使其开机自启:

sudo systemctl enable gpio-init.service

输出应显示:

Created symlink /etc/systemd/system/multi-user.target.wants/gpio-init.service → /etc/systemd/system/gpio-init.service.

表示软链接已创建,服务注册成功。


5. 验证与调试:确认服务正常运行

5.1 查看服务状态

重启系统前,可以先手动启动服务测试:

sudo systemctl start gpio-init.service

查看状态:

sudo systemctl status gpio-init.service

正常输出类似:

● gpio-init.service - GPIO Initialization Service Loaded: loaded (/etc/systemd/system/gpio-init.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2025-04-05 10:30:22 UTC; 5s ago Process: 456 ExecStart=/usr/local/bin/gpio-init.sh (code=exited, status=0/SUCCESS) Main PID: 456 (code=exited, status=0/SUCCESS) Apr 05 10:30:22 armboard systemd[1]: Started GPIO Initialization Service.

只要看到Startedstatus=0/SUCCESS,就说明执行成功。

5.2 重启并观察效果

现在重启系统:

sudo reboot

等待系统重新启动后,观察LED是否自动点亮。如果是,则恭喜你,开机自动点灯已成功实现


6. 进阶技巧与常见问题解决

6.1 如何知道哪些服务会在开机时启动?

列出所有启用的systemd服务:

systemctl list-unit-files --type=service --state=enabled

查找你刚刚添加的服务:

systemctl is-enabled gpio-init.service

返回enabled表示已启用。

6.2 查看启动日志定位问题

如果LED没亮,别急,用 journalctl 查看日志:

journalctl -u gpio-init.service --since today

你会看到完整的执行记录,包括错误信息。例如:

  • 如果提示No such device,可能是GPIO编号错误或未启用
  • 如果权限被拒绝,检查脚本路径和权限设置

6.3 常见问题汇总

问题现象可能原因解决方法
LED不亮GPIO编号不对核对开发板引脚定义图
脚本报错Device or resource busyGPIO已被占用使用echo前加 `
服务无法启用文件权限不足确保.service和脚本都有正确权限
服务未运行没有执行daemon-reload修改service后必须重载

7. 总结:掌握核心,灵活扩展

7.1 回顾关键步骤

我们完成了以下几步,实现了Armbian开机自动点灯:

  1. 理解启动机制:明确Armbian使用systemd为主控,init.d仅为兼容层
  2. 编写GPIO控制脚本:通过/sys/class/gpio/接口操作硬件引脚
  3. 创建systemd service:以标准化方式注册开机任务
  4. 启用并验证服务:确保每次重启都能可靠执行

这套方法不仅适用于点灯,还可以扩展用于:

  • 开机初始化传感器
  • 自动启动串口通信程序
  • 设置PWM风扇控制
  • 初始化I2C/OLED显示屏
  • 批量配置多个GPIO状态

7.2 为什么推荐使用systemd而非rc.local?

有些人习惯把命令写进/etc/rc.local,但这种方式存在几个问题:

  • 执行时机不确定(可能早于网络、存储挂载完成)
  • 错误难以追踪(无独立日志)
  • 不符合现代Linux规范
  • 在某些镜像中rc.local已被弃用

而 systemd 提供了:

  • 明确的依赖控制
  • 完整的日志追踪(journalctl
  • 标准化的启用/禁用管理
  • 更高的可靠性与可维护性

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 18:19:06

Strix AI安全测试终极教程:从零开始掌握智能漏洞检测

Strix AI安全测试终极教程:从零开始掌握智能漏洞检测 【免费下载链接】strix ✨ Open-source AI hackers for your apps 👨🏻‍💻 项目地址: https://gitcode.com/GitHub_Trending/strix/strix 想要快速上手AI驱动的安全测…

作者头像 李华
网站建设 2026/5/23 11:15:06

NotaGen使用指南:基于LLM范式的WebUI音乐创作工具

NotaGen使用指南:基于LLM范式的WebUI音乐创作工具 1. 快速上手NotaGen:让AI为你谱写古典乐章 你是否曾梦想过创作一段属于自己的古典音乐?但面对复杂的五线谱、和声规则与配器知识,又觉得门槛太高?现在,这…

作者头像 李华
网站建设 2026/5/21 23:43:39

语音分离技术终极指南:从基础概念到高效实战方案

语音分离技术终极指南:从基础概念到高效实战方案 【免费下载链接】FunASR A Fundamental End-to-End Speech Recognition Toolkit and Open Source SOTA Pretrained Models, Supporting Speech Recognition, Voice Activity Detection, Text Post-processing etc. …

作者头像 李华
网站建设 2026/5/20 22:30:50

LLM成本优化终极指南:从账单恐慌到精准控制

LLM成本优化终极指南:从账单恐慌到精准控制 【免费下载链接】langfuse Open source observability and analytics for LLM applications 项目地址: https://gitcode.com/GitHub_Trending/la/langfuse 面对每月飙升的LLM调用费用,你是否感到束手无…

作者头像 李华
网站建设 2026/5/24 9:19:33

Qwen-Image-2512-ComfyUI实战案例:电商海报生成系统3天上线部署

Qwen-Image-2512-ComfyUI实战案例:电商海报生成系统3天上线部署 1. 从零到上线:三天搭建电商海报自动化系统 你有没有遇到过这样的场景?运营团队每天要出十几张商品海报,设计师加班加点还是赶不上节奏,文案改了又改&…

作者头像 李华
网站建设 2026/5/30 12:38:00

Qwen3-0.6B部署难题破解:API Key为空的正确处理方式

Qwen3-0.6B部署难题破解:API Key为空的正确处理方式 1. 认识Qwen3-0.6B:轻量级大模型的新选择 你可能已经听说过通义千问系列,但这次的 Qwen3-0.6B 真的有点不一样。它不是那种动辄上百亿参数、需要堆叠多张A100才能跑起来的“巨无霸”&…

作者头像 李华