1.浅谈sysvinit与systemd区别

(1)更传统的init脚本自启动 Sysvinit

  • 机制:启动顺序靠  /etc/init.d/(或 /etc/rc*.d/) 下的脚本,系统初始化时 /etc/rcS 或类似脚本会遍历这些目录,按编号顺序依次执行(如 S01、S02…S90)。

root@OK527:/etc/init.d# ls
S01syslogd  S30dbus      S50adb_start       S70vsftpd            rcS
S02klogd    S30rpcbind   S50lighttpd        S80audio
S02sysctl   S35iptables  S50sshd            S90camera
S10udev     S40network   S60Matrix_Browser  S99swupdate_autorun
S20urandom  S40nxp       S60nfs             rcK
rcS代码如下:

#!/bin/sh
# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
        *.sh)
            # Source shell script for speed.
            (
                trap - INT QUIT TSTP
                set start
                . $i
            )
            ;;
        *)
            # No sh extension, so fork subprocess.
            $i start
            ;;
    esac
done

由上述rcS代码可知,其在遍历etc/init.d目录中以S开头的脚本,且序号越小,优先级越大

  • 写法:就是 shell 脚本,内容随便写,但必须有执行权限,且格式为 Unix。

  • 管理方式:一般用 service 或直接 /etc/init.d/xxx start/stop

  • 适用范围:嵌入式/早期 Linux/简化型发行版(如 busybox)。

  • 优缺点

    • 优点:简单直观、兼容性好、资源占用低。

    • 缺点:功能单一、不支持依赖管理、不会自动重启/监控、日志管理弱。


(2)systemd服务

机制:基于 .service 单元,放在 /etc/systemd/system/ 下。

写法:写 .service 配置文件,支持依赖、定时、日志、守护进程等丰富功能。

管理方式:systemctl start/stop/status/enable/disable xxx.service。

适用范围:现代主流 Linux(如 Ubuntu、CentOS、Debian、Arch)。

优缺点

优点:支持依赖关系、自动重启、资源限制、标准日志、状态监控等。

缺点:配置比 shell 脚本略复杂,资源占用比传统 initd 略高。

(这个systemd后面再出一期讲解)


2.编写与启用自启动脚本

以S90camera为例

(1)编写脚本内容为:

#!/bin/sh

/mnt/csi_test_008_2 &
 注意:第一行必须写 #!/bin/sh,表示这是 shell 脚本。
            之后内容写入你想要让其自启动执行的程序或操作
            csi_test_008_2是将源码交叉编译后用于运行的二进制产物。
            用 & 表示后台启动的进程即使关闭终端也不会自动停止,要自己 kill。即脚本内容可以在后台运行。

 (2)确认脚本格式为UNIX

 若格式不对则报错:

格式转换命令:

dos2unix /etc/init.d/S90camera

若你是在Windows下进行脚本的编写再上传到嵌入式系统的话,需要特别注意脚本格式!!,如上报错就是因为:脚本在 Windows 下写的,里面带了 Windows 风格的换行符(\r\n,也就是 ^M),导致 Linux 下解析器找不到 /bin/sh^M 这个路径。

(3)将编写好的脚本放入 /etc/init.d/

(4)赋予脚本执行权限

chmod +x /etc/init.d/S90camera

(5)系统启动时执行

系统会自动执行 /etc/init.d/ 目录下的脚本

(6)调试脚本是否可以单独运行

调试命令(以S90camera举例):

/etc/init.d/S90camera

3.查找并杀死自启动进程命令

ps aux

找到你脚本中启用的那一个操作或程序进程,并记下其进程PID

然后直接kill杀死进程即可

kill <PID>

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐