方法一:使用 Systemd 服务 (最强力、最推荐)
这是现代 Linux 的标准方法,提供完整的生命周期管理。
步骤 1:创建你的启动脚本
首先,将你想要执行的所有命令写在一个脚本里。
-
创建脚本文件(例如在
/usr/local/bin/或/home/root/scripts/):bash
mkdir -p /home/root/scripts vi /home/root/scripts/mystartup.sh
-
编写脚本内容(根据你的需求修改):
bash
#!/bin/bash # Zynq 自定义启动脚本 # 描述:配置系统并启动应用程序 # 1. 配置 GPIO echo "Configuring GPIO..." echo 54 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio54/direction echo 1 > /sys/class/gpio/gpio54/value # 2. 等待网络接口就绪(如果需要网络) echo "Waiting for network..." counter=0 while ! ping -c 1 -W 1 8.8.8.8 &> /dev/null && [ $counter -lt 10 ] do sleep 1 ((counter++)) done # 3. 挂载 SD 卡分区(可选) echo "Mounting SD card partition..." mkdir -p /mnt/sd_data mount /dev/mmcblk0p3 /mnt/sd_data 2>/dev/null || true # 4. 启动你的主应用程序(在后台运行) echo "Starting main application..." cd /home/root/ ./my_app & # 5. 启动 Hostapd (Wi-Fi AP) echo "Starting Hostapd..." /usr/sbin/hostapd -B /etc/hostapd.conf & echo "Startup script completed successfully." exit 0 -
赋予脚本执行权限:
bash
chmod +x /home/root/scripts/mystartup.sh
-
测试脚本:
bash
/home/root/scripts/mystartup.sh echo $? # 查看返回值,0 表示成功
步骤 2:创建 Systemd 服务文件
这是核心步骤,告诉 systemd 如何管理你的脚本。
-
创建服务文件:
bash
vi /etc/systemd/system/zynq-startup.service
-
输入以下内容:
ini
[Unit] Description=Zynq Custom Startup Service After=network.target multi-user.target # 在网络和多用户模式就绪后启动 Wants=network.target # 希望网络就绪,但不是强依赖 # ConditionPathExists=/home/root/my_app # (可选)只有my_app存在时才启动 [Service] Type=oneshot # 执行一次就退出 ExecStart=/home/root/scripts/mystartup.sh RemainAfterExit=yes # 执行完成后服务状态仍为active StandardOutput=journal # 输出到systemd日志 StandardError=journal # 错误也输出到日志 TimeoutStartSec=300 # 设置启动超时时间(5分钟) [Install] WantedBy=multi-user.target # 链接到多用户运行级别
步骤 3:启用并启动服务
-
重新加载 systemd 配置:
bash
systemctl daemon-reload
-
启用开机自启:
bash
systemctl enable zynq-startup.service
-
立即启动服务进行测试:
bash
systemctl start zynq-startup.service
-
检查状态和日志:
bash
# 查看服务状态 systemctl status zynq-startup.service # 查看详细的启动日志(极其有用!) journalctl -u zynq-startup.service -b -f # -u: 指定服务名 # -b: 本次启动以来的日志 # -f: 实时跟踪日志输出
方法二:使用 /etc/rc.local (如果系统支持)
如果您的系统有 /etc/rc.local 的兼容性支持,可以这样操作:
-
创建或编辑文件:
bash
vi /etc/rc.local
-
添加内容(必须在
exit 0之前):bash
#!/bin/sh -e # 等待网络(简单方式) sleep 5 # 启动应用程序 /home/root/my_app & # 启动 Hostapd /usr/sbin/hostapd -B /etc/hostapd.conf & exit 0
-
添加执行权限并启用服务:
bash
chmod +x /etc/rc.local systemctl enable rc-local.service systemctl start rc-local.service
方法三:在特定目录放置脚本
有些系统会执行 /etc/rc.local.d/ 或 /etc/init.d/ 目录下的脚本。
-
创建脚本:
bash
vi /etc/init.d/S99mystartup
-
编写内容:
bash
#!/bin/sh /home/root/scripts/mystartup.sh
-
赋予权限:
bash
chmod +x /etc/init.d/S99mystartup
调试技巧
无论用哪种方法,调试都是关键:
-
使用
echo语句:在脚本中大量使用echo "Step 1: Starting..."来跟踪执行进度。 -
检查日志:
bash
# 查看系统启动日志 journalctl -b # 查看内核消息 dmesg | tail -50 # 查看特定服务的日志 journalctl -u zynq-startup.service
-
测试脚本:永远先手动运行脚本 (
/path/to/script.sh) 确保它能正常工作,再设置为开机启动。 -
检查路径:在脚本中始终使用绝对路径(如
/usr/sbin/hostapd而不是hostapd)。

被折叠的 条评论
为什么被折叠?



