嵌入式Linux系统开机自启动脚本

前言

现代Linux系统通常用systemd管理进程,
但嵌入式Linux系统通常采用SystemV的模式,开机启动脚本保存在/etc/rcX.d目录下,X代表运行级别

运行级别

0:系统停机状态
1:单用户工作状态,也称为维护模式,只允许一个用户(通常是root)登录,用于系统维护和故障排除。它禁止远程登录。
2:多用户状态,但没有网络连接。这意味着允许多个用户登录,但系统不提供网络服务。
3:完全的多用户状态,具有网络连接。这个级别通常用于正常的系统操作,允许多个用户登录,并提供完整的网络服务。
4:通常未使用,保留给用户自定义。在某些发行版中,这个级别可能用于特殊目的。
5:图形界面模式。这个级别通常用于图形用户界面(GUI)操作,允许多个用户登录,并提供图形界面。
6:系统正常关闭并重启。这个级别会导致系统先关闭所有服务和进程,然后重新启动。

rcX.d目录

who -r或者who -a命令可以查看当前的运行级别
在这里插入图片描述

可以看到运行级别是5,那么我们看下/etc/rc5.d这个目录
在这里插入图片描述
S表示start,这里没有K,有的话代表Kill,意为启动和停止服务时的操作
启动就是系统启动的时候的操作;至于停止嘛,我估计是reboot命令时执行的操作,如果你啪一下把电断了那估计就啥都不执行了
S后面的数字代表执行顺序
在这里插入图片描述
在这里插入图片描述
系统启动时串口打印的服务启动顺序和数字对应的顺序一致

/etc/init.d/rc.local

S99rc.local这个文件就是用来执行用户自定义的初始化操作的
它是/etc/init.d/rc.local的软链接
在这里插入图片描述

让我们看下这个文件内容

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rc.local
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

do_start() {
	if [ -x /etc/rc.local ]; then
		echo -n "Running local boot scripts (/etc/rc.local)"
		/etc/rc.local
		[ $? = 0 ] && echo "." || echo "error"
		return $ES
	fi
}

case "$1" in
    start)
	do_start
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

可以看出来,它的目的就是去执行/etc/rc.local这个文件

/etc/rc.local

我们看下这个文件内容

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.


echo 30000 >  /proc/sys/vm/min_free_kbytes
source /etc/profile                  
/opt/QDesktop >/dev/null 2>&1 &
exit 0

设置低于30000字节时开始回收内存、初始化环境变量、还有个似乎是桌面程序的的QDesktop?输出都丢了

这就是启动时的自定义操作,如果想添加什么就在exit 0前追加

比如我想在启动的时候初始化eth0的ip地址:
在这里插入图片描述

rc.local之前

我现在拿的是正点原子的板子
在这里插入图片描述
他的init是一个名叫sysvinit的可执行文件,这个我不知道,不过在其他嵌入式的板子上看到过,他们的init是一个指向busybox的软链接
在busybox的源码里,init所做的动作就是去解析/etc/inittab

在这里插入图片描述
正点原子这块板子的inittab和其他板子不太一样
有些这里指定了rc.sysinit这个脚本
然后rc.sysinit会去加载rc.local

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值