当前位置: 首页 > news >正文

Armbian 开机启动点灯脚本


🌟 什么是 systemd 和 init.d?

init.d (SysV init)

💡 这是传统 Linux 启动方式:

  • 启动时按顺序执行 /etc/init.d/ 下的脚本(按 S01xxx, S02xxx 排序)
  • 每个脚本自己决定做什么(启动、停止、重启)
  • 简单,但功能弱,不支持并行、依赖、日志等高级功能

systemd

💡 现代 Linux 启动管理器:

  • unit 文件 描述服务(文件路径如 /etc/systemd/system/*.service
  • 支持启动依赖(After=、Requires=)
  • 支持并行启动,大幅加快启动速度
  • 自带日志管理(journalctl
  • 可以控制服务状态(restart、watchdog、自动重启等)

🌟 Armbian 的启动体系

✅ Armbian 基于 Debian / Ubuntu,默认就是用 systemd 作为启动管理器。
✅ 但为了兼容老的软件和用户习惯,保留了对 init.d 脚本 的支持。


🌟 什么叫 “底层是 systemd,兼容 init.d”?

👉 系统实际的 PID 1 进程是 systemd
也就是内核启动后第一个进程是:

/bin/systemd

👉 你的 rc.local、/etc/init.d/ 脚本,其实是 systemd 兼容层 去调用的
例如,当你开机有 /etc/init.d/gpio-init.sh

  • systemd 会生成一个临时的 unit 文件来执行它
  • 实际执行和管理还是 systemd 在控制

🌟 你怎么验证?

运行:

ps -p 1 -o comm=

你会看到:

systemd

这说明 PID 1 是 systemd。

或者看某个 init.d 脚本运行状态:

systemctl status gpio-init.sh

你会发现 systemd 接管了它。


🌟 为什么理解这个重要?

✅ 当你写启动脚本时,如果用 init.d,其实还是跑在 systemd 的框架下
✅ 直接用 systemd unit,可以:

  • 控制更精细(依赖、顺序、重启策略)
  • 启动速度更快
  • 日志更好看(journalctl)

🌟 小结

👉 Armbian 的启动流程 = systemd 是主角,init.d 脚本是临时嘉宾,由 systemd 调度执行。
👉 写新服务建议用 systemd unit 文件,这样更高效、可控、易维护。


很好,你想在 Armbian (基于 Debian/Ubuntu) 上查看 当前的开机启动项,包括 init 脚本、systemd 服务等。以下是详细方法:


🌟 查看开机启动项 (systemd 管理)

Armbian 默认是用 systemd 管理启动:

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

这个命令会列出当前开机会自动启动的服务,例如:

ssh.service                  enabled
networking.service           enabled
gpio-init.service            enabled
cron.service                 enabled
...

其中 enabled 表示开机会启动。

👉 查看哪些服务现在正在运行:

systemctl --type=service --state=running

🌟 查看 init.d 脚本启动项 (如果你用过 update-rc.d 的话)

列出所有注册的 SysV 脚本:

ls /etc/rc*.d/

你会看到类似:

/etc/rc2.d/S01gpio-init.sh
/etc/rc2.d/S02cron
...

Sxx 表示启动顺序。


🌟 综合查看全部开机项

你也可以用:

systemctl list-dependencies multi-user.target

这个命令能看出多用户模式下启动的所有服务和目标。


🌟 检查特定服务状态

例如检查你之前设置的脚本:

systemctl status gpio-init.service

/etc/init.d/gpio-init.sh status

(如果你用的是 init.d 脚本)


🌟 图形化工具(可选)

Armbian 可以装 htop,在里面按 F5 可以看到树状启动项:

sudo apt install htop
htop

总结推荐命令

# 列出所有启用的 systemd 启动服务
systemctl list-unit-files --type=service --state=enabled# 列出启动依赖
systemctl list-dependencies multi-user.target# 列出 init.d 启动项
ls /etc/rc*.d/

🚀 使用 systemd service

创建文件:

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

内容:

[Unit]
Description=GPIO init
After=multi-user.target[Service]
Type=oneshot
ExecStart=/usr/local/bin/gpio-init.sh
RemainAfterExit=yes[Install]
WantedBy=multi-user.target

然后把脚本移动到 /usr/local/bin/gpio-init.sh,并加权限:

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

启用:

sudo systemctl daemon-reexec
sudo systemctl enable gpio-init.service

编写启动脚本

创建文件,例如:

sudo nano /etc/init.d/gpio-init.sh

内容:

#!/bin/bash# 配置引脚
echo "6" > /sys/class/gpio/export
echo "7" > /sys/class/gpio/export
echo "8" > /sys/class/gpio/export
echo "9" > /sys/class/gpio/export
echo "10" > /sys/class/gpio/export# 设置方向
echo "out" > /sys/class/gpio/gpio6/direction
echo "in" > /sys/class/gpio/gpio7/direction
echo "out" > /sys/class/gpio/gpio8/direction
echo "out" > /sys/class/gpio/gpio9/direction
echo "out" > /sys/class/gpio/gpio10/direction# 设置初始状态
echo "1" > /sys/class/gpio/gpio8/value
echo "1" > /sys/class/gpio/gpio9/value
echo "1" > /sys/class/gpio/gpio10/value# 系统运行LED 可选择默认熄灭或点亮
echo "1" > /sys/class/gpio/gpio6/value  # 点亮 LED

设置脚本执行权限

sudo chmod +x /etc/init.d/gpio-init.sh

🌱 示例测试

手动测试 GPIO:

# 导出 GPIO
echo 6 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio6/direction
echo 1 > /sys/class/gpio/gpio6/value

你会看到 LED 点亮。


http://www.lqws.cn/news/464491.html

相关文章:

  • 【C++特殊工具与技术】局部类
  • 从事登高架设作业需要注意哪些安全事项?
  • 57-Oracle SQL Profile(23ai)实操
  • 内容搜索软件AnyTXT.Searcher忘记文件名也能搜,全文检索 1 秒定位文件
  • Java求职者面试指南:微服务技术与源码原理深度解析
  • Rabbitmq集成springboot,手动确认消息basicAck、basicNack、basicReject的使用
  • 在微信小程序wxml文件调用函数实现时间转换---使用wxs模块实现
  • WevServer实现:异步日志写与HTTP连接
  • Zephyr 调试实用指南:日志系统、Shell CLI 与 GDB 全面解析
  • CLion开发Qt桌面程序_git的简单使用_小团体
  • 闲庭信步使用SV搭建图像测试平台:第五课——使用task
  • pyqt logger类与界面分开
  • 从语义到推荐:大语言模型(LLM)如何驱动智能选车系统?
  • Mac电脑-Markdown编辑器-Typora
  • c++26新功能—hive容器
  • 税务 VR 虚拟体验,带来全新办税感受
  • 【软考高级系统架构论文】论NoSQL数据库技术及其应用
  • HarmonyOS 5的分布式通信矩阵是如何工作的?
  • 鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(1/3)
  • 在AI普及的大环境下神经网络在新能源汽车热管理系统中的应用简介
  • 无线Debugger攻防全解:原理剖析与突破之道
  • Qt中的布局
  • 深入浅出:Go语言中的Cookie、Session和Token认证机制
  • 关于 Kyber:抗量子密码算法 Kyber 详解
  • 首页实现多级缓存
  • 【信号与系统四】采样和通信系统
  • rent8_wechat-最常用出租屋管理系统-微信小程序
  • Mac Parallels Desktop Kali 2025 代理设置
  • 外卖之后再度进军酒旅,京东多线出击的逻辑是什么?
  • Electron 开发桌面应用概述