Zynq Linux 系统中配置开机脚本

方法一:使用 Systemd 服务 (最强力、最推荐)

这是现代 Linux 的标准方法,提供完整的生命周期管理。

步骤 1:创建你的启动脚本

首先,将你想要执行的所有命令写在一个脚本里。

  1. 创建脚本文件(例如在 /usr/local/bin/ 或 /home/root/scripts/):

    bash

    mkdir -p /home/root/scripts
    vi /home/root/scripts/mystartup.sh
  2. 编写脚本内容(根据你的需求修改):

    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
  3. 赋予脚本执行权限

    bash

    chmod +x /home/root/scripts/mystartup.sh
  4. 测试脚本

    bash

    /home/root/scripts/mystartup.sh
    echo $? # 查看返回值,0 表示成功

步骤 2:创建 Systemd 服务文件

这是核心步骤,告诉 systemd 如何管理你的脚本。

  1. 创建服务文件

    bash

    vi /etc/systemd/system/zynq-startup.service
  2. 输入以下内容

    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:启用并启动服务

  1. 重新加载 systemd 配置

    bash

    systemctl daemon-reload
  2. 启用开机自启

    bash

    systemctl enable zynq-startup.service
  3. 立即启动服务进行测试

    bash

    systemctl start zynq-startup.service
  4. 检查状态和日志

    bash

    # 查看服务状态
    systemctl status zynq-startup.service
    
    # 查看详细的启动日志(极其有用!)
    journalctl -u zynq-startup.service -b -f
    # -u: 指定服务名
    # -b: 本次启动以来的日志
    # -f: 实时跟踪日志输出

方法二:使用 /etc/rc.local (如果系统支持)

如果您的系统有 /etc/rc.local 的兼容性支持,可以这样操作:

  1. 创建或编辑文件

    bash

    vi /etc/rc.local
  2. 添加内容(必须在 exit 0 之前):

    bash

    #!/bin/sh -e
    
    # 等待网络(简单方式)
    sleep 5
    
    # 启动应用程序
    /home/root/my_app &
    
    # 启动 Hostapd
    /usr/sbin/hostapd -B /etc/hostapd.conf &
    
    exit 0
  3. 添加执行权限并启用服务

    bash

    chmod +x /etc/rc.local
    systemctl enable rc-local.service
    systemctl start rc-local.service

方法三:在特定目录放置脚本

有些系统会执行 /etc/rc.local.d/ 或 /etc/init.d/ 目录下的脚本。

  1. 创建脚本

    bash

    vi /etc/init.d/S99mystartup
  2. 编写内容

    bash

    #!/bin/sh
    /home/root/scripts/mystartup.sh
  3. 赋予权限

    bash

    chmod +x /etc/init.d/S99mystartup

调试技巧

无论用哪种方法,调试都是关键:

  1. 使用 echo 语句:在脚本中大量使用 echo "Step 1: Starting..." 来跟踪执行进度。

  2. 检查日志

    bash

    # 查看系统启动日志
    journalctl -b
    
    # 查看内核消息
    dmesg | tail -50
    
    # 查看特定服务的日志
    journalctl -u zynq-startup.service
  3. 测试脚本:永远先手动运行脚本 (/path/to/script.sh) 确保它能正常工作,再设置为开机启动。

  4. 检查路径:在脚本中始终使用绝对路径(如 /usr/sbin/hostapd 而不是 hostapd)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byxdaz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值