Tyr-[Hu-rasT24]-Lys ;Tyr-Gly-Ala-Val-Gly-Val-Gly-Lys-Ser-Lys

核心内容摘要

3D Face HRN跨平台部署:支持Kubernetes集群调度与自动扩缩容
如何在MD文件中的第多少条前面加符号

蓝色工作汇报PPT模板

手把手教你写开机启动脚本让Armbian设备一开机就亮灯

为什么你的LED总在开机后“迟到”你刚把Armbian刷进SD卡接上LED兴奋地按下电源——结果等了十几秒LED才慢悠悠亮起来。

你反复检查接线、确认GPIO编号、重试echo 1 /sys/class/gpio/gpio6/value……手动执行完全没问题可一重启又回到原点。

这不是硬件故障也不是系统bug而是启动时机没踩准。

Armbian启动时内核先加载驱动再初始化用户空间最后才轮到你的脚本。

如果脚本跑得太早比如在GPIO子系统还没准备好时就去操作/sys/class/gpio/系统会直接报错“No such file or directory”。

如果跑得太晚你已经看到登录提示符了LED才姗姗来迟。

这篇文章不讲抽象理论只做一件事给你一套能立刻复制粘贴、开机即亮、稳定不翻车的完整方案。

全程基于Armbian官方镜像Debian/Ubuntu底座不依赖第三方工具不修改内核不碰复杂配置——只用两段代码、三个命令搞定从零到亮灯。

先搞清Armbian到底用什么管开机

1 systemd才是真正的“总调度员”Armbian默认使用systemd作为PID 1进程这是它和老式Linux最根本的区别。

你可以马上验证ps -p 1 -o comm输出一定是systemd这意味着所有开机任务最终都由systemd统一调度即使你写了/etc/init.d/gpio-init.shsystemd也会把它包装成一个临时服务来运行直接写systemd service文件才能真正掌控启动顺序、依赖关系和错误处理。

2 别被/etc/init.d/目录骗了Armbian保留/etc/init.d/目录是为了兼容旧脚本。

但它的本质是“systemd的翻译层”——当你执行sudo update-rc.d gpio-init.sh defaultssystemd会在后台生成一个等效的unit文件并注册到启动流程中。

这种兼容模式有两大隐患启动顺序靠文件名排序S

S02无法精确指定“必须在GPIO驱动加载之后”出错时日志分散排查困难。

所以结论很明确新项目一律用systemd service。

这不是炫技是让脚本真正可靠的第一步。

实战三步写出“一开机就亮”的LED脚本我们以GPIO6控制LED为例实际请根据你的开发板手册确认引脚编号。

整个过程无需重启即可验证每一步都有明确反馈。

1 第一步写一个干净、健壮的LED控制脚本创建脚本文件路径固定为/usr/local/bin/led-on-boot.sh放在这里符合FHS标准且不会被系统更新覆盖sudo nano /usr/local/bin/led-on-boot.sh粘贴以下内容已做关键加固#!/bin/bash # 设置严格错误处理任何命令失败立即退出 set -e # 定义LED引脚按需修改 LED_PIN6 # 确保GPIO子系统已就绪等待最多5秒 for i in $(seq 1

; do if [ -d /sys/class/gpio/gpio${LED_PIN} ]; then break fi if [ -e /sys/class/gpio/export ]; then echo ${LED_PIN} /sys/class/gpio/export 2/dev/null || true sleep

5 else sleep 1 fi done # 配置引脚方向为输出 echo out /sys/class/gpio/gpio${LED_PIN}/direction 2/dev/null || { echo ERROR: Failed to set direction for GPIO ${LED_PIN} 2 exit 1 } # 点亮LED高电平点亮若为低电平有效请改为echo 0 echo 1 /sys/class/gpio/gpio${LED_PIN}/value 2/dev/null || { echo ERROR: Failed to set value for GPIO ${LED_PIN} 2 exit 1 } # 可选记录成功日志便于后续排查 logger LED on GPIO ${LED_PIN} turned ON at boot关键设计说明set -e确保任意步骤失败立即终止避免半截操作导致状态混乱循环等待/sys/class/gpio/gpio6目录出现解决“驱动未就绪”问题所有echo操作加2/dev/null || { ... }失败时输出清晰错误信息使用logger写入系统日志后续可用journalctl -u led-on-boot.service查看。

保存后赋予执行权限sudo chmod x /usr/local/bin/led-on-boot.sh

2 第二步创建systemd服务单元文件创建service文件路径必须为/etc/systemd/system/led-on-boot.servicesudo nano /etc/systemd/system/led-on-boot.service内容如下精简无冗余专注核心逻辑[Unit] DescriptionTurn ON LED at boot Documentationhttps://armbian.com Aftermulti-user.target # 关键确保在GPIO子系统就绪后再启动 Wantssys-devices-platform-soc-soc:gpio-keys.device BindsTosys-devices-platform-soc-soc:gpio-keys.device # 若你的板子无gpio-keys改用通用等待取消下一行注释 # Aftersysinit.target [Service] Typeoneshot ExecStart/usr/local/bin/led-on-boot.sh RemainAfterExityes # 防止因权限问题失败 Userroot Grouproot [Install] WantedBymulti-user.target为什么这样写Aftermulti-user.target确保在基础系统服务启动完毕后运行WantsBindsTo强制依赖GPIO硬件设备Armbian常见路径比单纯After更可靠TypeoneshotRemainAfterExityes脚本执行完不退出服务方便后续状态查询显式指定Userroot避免systemd默认以非root用户运行导致权限不足。

3 第三步启用并验证服务刷新systemd配置启用服务立即启动测试sudo systemctl daemon-reload sudo systemctl enable led-on-boot.service sudo systemctl start led-on-boot.service验证是否成功# 检查服务状态应显示active (exited) sudo systemctl status led-on-boot.service # 查看详细日志重点关注最后一行是否含turned ON sudo journalctl -u led-on-boot.service -n 20 --no-pager # 手动检查LED物理状态万用表测电压或肉眼观察 cat /sys/class/gpio/gpio6/value如果cat输出1且LED亮起说明脚本已生效。

此时重启设备sudo reboot等待约10秒LED应在系统登录提示符出现前即点亮——这才是真正的“开机即亮”。

4.

常见问题与稳如磐石的解决方案

1 问题重启后LED不亮systemctl status显示failed原因GPIO引脚被其他服务占用如串口、I2C、SPI复用或硬件初始化顺序异常。

解决先查冲突dmesg | grep -i gpio\|pinmux看是否有警告换一个确定未被占用的GPIO如GPIO

GPIO13避开UART/TX/RX在service文件中增加延迟不推荐仅作临时诊断ExecStartPre/bin/sleep

2

2 问题/sys/class/gpio/gpio6目录始终不存在原因内核未启用该GPIO或设备树未正确配置。

解决查看当前支持的GPIOls /sys/class/gpio/若为空说明驱动未加载加载GPIO模块Armbian通常已内置此步备用sudo modprobe gpio-mockup检查设备树sudo armbian-config→ System → Hardware → 确认GPIO选项已启用。

3 问题想让LED闪烁而非常亮怎么改只需修改脚本中的echo 1部分。

例如实现开机后闪烁3次再常亮# 替换原脚本中点亮LED部分为 # 先闪烁3次 for i in {

.3}; do echo 1 /sys/class/gpio/gpio${LED_PIN}/value sleep

3 echo 0 /sys/class/gpio/gpio${LED_PIN}/value sleep

3 done # 最后常亮 echo 1 /sys/class/gpio/gpio${LED_PIN}/value注意sleep在systemd服务中默认可用无需额外安装。

进阶技巧让脚本更智能、更省心

1 一键部署脚本复制即用把上述所有步骤封装成一个可执行脚本存为deploy-led.sh#!/bin/bash LED_PIN${1:-6} SCRIPT_PATH/usr/local/bin/led-on-boot.sh SERVICE_PATH/etc/systemd/system/led-on-boot.service # 写脚本 cat $SCRIPT_PATH EOF #!/bin/bash set -e LED_PIN$LED_PIN for i in \$(seq 1

; do if [ -d /sys/class/gpio/gpio\${LED_PIN} ]; then break; fi if [ -e /sys/class/gpio/export ]; then echo \${LED_PIN} /sys/class/gpio/export 2/dev/null || true; sleep

5; else sleep 1; fi done echo out /sys/class/gpio/gpio\${LED_PIN}/direction 2/dev/null || { echo ERROR; exit 1; } echo 1 /sys/class/gpio/gpio\${LED_PIN}/value 2/dev/null || { echo ERROR; exit 1; } logger LED on GPIO \${LED_PIN} ON EOF # 写service cat $SERVICE_PATH EOF [Unit] DescriptionLED on GPIO $LED_PIN Aftermulti-user.target Wantssys-devices-platform-soc-soc:gpio-keys.device BindsTosys-devices-platform-soc-soc:gpio-keys.device [Service] Typeoneshot ExecStart$SCRIPT_PATH RemainAfterExityes Userroot [Install] WantedBymulti-user.target EOF # 赋权并启用 sudo chmod x $SCRIPT_PATH sudo systemctl daemon-reload sudo systemctl enable led-on-boot.service sudo systemctl start led-on-boot.service echo Deployed! LED on GPIO $LED_PIN will light at next boot.

使用方法chmod x deploy-led.sh sudo ./deploy-led.sh 12 # 指定GPIO

1

2 多LED协同控制只需扩展脚本中的引脚列表。

例如同时控制GPIO

GPIO

GPIO13# 在led-on-boot.sh中替换LED配置部分 LED_PINS(6 12

for pin in \${LED_PINS[]}; do echo \${pin} /sys/class/gpio/export 2/dev/null || true echo out /sys/class/gpio/gpio\${pin}/direction echo 1 /sys/class/gpio/gpio\${pin}/value done

6.

总结你真正掌握的不是脚本而是启动控制权到这里你已经完成了三件关键事写出一个带错误处理、自动等待、日志记录的健壮LED脚本创建了精准依赖GPIO硬件的systemd service彻底告别启动时机失控掌握了从验证、调试到一键部署的完整工程化流程。

这不再是一个“让灯亮”的小技巧而是你深入Armbian启动机制的第一块基石。

后续无论是挂载USB硬盘、启动AI模型服务还是配置网络摄像头你都能用同一套思路找准依赖、写好脚本、交给systemd。

真正的嵌入式开发从来不是堆砌功能而是对每一毫秒启动时机的掌控。

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

海角社区id:1120.7126,10.28免费版网站-海角社区id:1120.7126,10.28免费版网站应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123