设备上电自启动服务和程序

使用设备依旧为AG215S

开机自启动方式有init.d和systemctl。

使用命令查询安卓版本号

1
2
adb shell getprop ro.build.version.release
202306281416#返回的信息

init.d自启动的方法

方法限制条件

  • Android设备的init进程支持init.d目录。
  • 设备已经取得root权限(超级用户权限)。

确认init.d目录是否存在:

在Android设备上,init.d目录通常位于 /system/etc/init.d/。您可以通过连接到设备的ADB Shell来检查是否存在:

1
adb shell ls /system/etc/init.d/

经过查询,AG215S并不存在。

目录可手动创建

1
2
3
mkdir etc
cd etc
mkdir init.d

创建自启动脚本

  1. init.d目录下创建一个Shell脚本文件,例如 start.sh

    1
    2
    3
    4
    5
    6
    systemctl start qrtr        # 开启qrtr功能
    qmi_test_service_test # 测试qrtr功能
    systemctl start netmgrd
    systemctl start QCMAP_ConnectionManagerd
    systemctl start cv2x-launcher # 开启cv2x
    cv2x-config --get-v2x-status # 获取cv2x状态
  2. 重启设备:

    重新启动设备,您创建的脚本应该在开机时自动执行。

systemctl开启自启动服务

  1. 创建服务文件

创建一个以 .service 为后缀的服务单元文件。例如,假设我们创建一个名为 my_service.service 的文件。

此为服务文件的模板:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=My Custom Service
After=network.target

[Service]
ExecStart=/path/to/your/command_or_script
Restart=always
User=your_username
Group=your_groupname

[Install]
WantedBy=default.target

在上述文件中,您需要替换以下内容:

  • /path/to/your/command_or_script:您希望在启动时运行的命令或脚本的路径。
  • your_username:服务运行的用户名。
  • your_groupname:服务运行的用户组名。

本人使用的内容如下:

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Start Service
After=multi-user.target

[Service]
ExecStart=/data/hanfeng/start.sh
Restart=always
User=root

[Install]
WantedBy=default.target
  1. 重新加载 Systemd 配置:

    在保存服务单元文件后,使用以下命令重新加载 Systemd 配置:

    1
    sudo systemctl daemon-reload
  2. 将服务文件复制到/etc/systemd/system/目录下:

    1
    sudo cp my_service.service /etc/systemd/system/
  3. 启用服务:

    1
    sudo systemctl enable my_service.service

    这将在系统启动时启用该服务。

  4. 检查服务状态:

    1
    sudo systemctl status my_service.service

    这将显示服务的当前状态和相关信息。

现在,您的服务应该已经配置为在系统启动时自动启动。请注意,此方法假设您有足够的权限来执行上述步骤。

yocto系统的自启动服务