592 字
3 分钟
开源鸿蒙系统配置开机启动程序

开机启动方式:通过 OpenHarmony init 服务配置实现。

配置开机启动程序#

配置目录为 /system/etc/init/,该目录用于存放开机启动服务的 cfg 配置文件。

例如,要配置开机启动程序 my_program,将可执行文件放至如 /system/bin/my_program,并新建或修改 /system/etc/init/my_program.cfg 文件,内容如下:

{
"jobs": [{
"name": "init",
"cmds": ["start my_program"]
}],
"services": [{
"name": "my_program",
"path": ["/system/bin/my_program"],
"uid": "root",
"gid": ["root"]
}]
}

其中 path 为可执行文件的路径,也可以包含参数,例如:

"path": ["/system/bin/my_program", "--option1", "value1"],

示例:配置静态网络开机启动#

为方便后续切换网络环境,将网络参数与启动逻辑分离:网络参数保存在 /etc/network-static.conf,开机服务只调用固定的启动脚本 /bin/network-static.sh

首先创建网络参数文件 /etc/network-static.conf。以后只需修改此文件中的 IP、网关和 DNS,无需修改 init 服务文件:

Terminal window
cat > /etc/network-static.conf <<'EOF'
ifconfig eth0 192.168.31.100 netmask 255.255.255.0 up
route add default gw 192.168.31.1
echo nameserver 192.168.31.1 > /etc/resolv.conf
EOF
chmod 600 /etc/network-static.conf

创建网络启动脚本 /bin/network-static.sh

cat > /bin/network-static.sh <<'EOF'
#!/bin/sh
exec /bin/sh /etc/network-static.conf
EOF
chmod 700 /bin/network-static.sh

创建 OpenHarmony init 服务配置 /system/etc/init/network_static.cfg

Terminal window
cat > /system/etc/init/network_static.cfg <<'EOF'
{
"jobs": [{
"name": "post-fs-data",
"cmds": ["start network_static"]
}],
"services": [{
"name": "network_static",
"path": ["/bin/sh", "/bin/network-static.sh"],
"uid": "root",
"gid": ["root"],
"once": 1
}]
}
EOF

post-fs-data 阶段会在文件系统可用后执行网络脚本。once: 1 表示网络脚本配置完成后正常退出,不由 init 重复拉起。

示例:配置 Dropbear 开机启动#

Dropbear 需要在系统随机源初始化完成后再启动。此系统的 init 会在早期 init 阶段初始化 /dev/urandom,而 post-fs-data 发生在该阶段之后。下面的包装脚本会额外等待 /dev/urandom 可用,并在 Dropbear 异常退出后每 5 秒重试一次。

创建启动包装脚本 /bin/dropbear-start.sh

cat > /bin/dropbear-start.sh <<'EOF'
#!/bin/sh
# 等待 init 完成随机源初始化。
while [ ! -c /dev/urandom ]; do
sleep 1
done
# Dropbear 退出时延迟重试,避免启动失败时高频循环。
while :; do
/bin/dropbear -E -F -R -p 22
sleep 5
done
EOF
chmod 700 /bin/dropbear-start.sh

创建或替换 /system/etc/init/dropbear.cfg

Terminal window
cat > /system/etc/init/dropbear.cfg <<'EOF'
{
"jobs": [{
"name": "post-fs-data",
"cmds": ["start dropbear"]
}],
"services": [{
"name": "dropbear",
"path": ["/bin/sh", "/bin/dropbear-start.sh"],
"uid": "root",
"gid": ["root"]
}]
}
EOF

重启开发板后验证:

Terminal window
ifconfig eth0
route -n
cat /etc/resolv.conf
test -c /dev/urandom && echo RANDOM_READY
ps -ef | grep dropbear | grep -v grep

预期可以看到 eth0 的静态地址、默认路由、DNS,以及 sh /bin/dropbear-start.shdropbear -E -F -R -p 22 两个进程。

开源鸿蒙系统配置开机启动程序
https://blog.wely.fun/posts/开源鸿蒙系统配置开机启动程序/
作者
Wely
发布于
2026-09-22
许可协议
CC BY-NC-SA 4.0