简介
先确定版本
[root@imx6ull:~]# cat /proc/version
Linux version 4.9.88 (zhou@zhou) (gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11) ) #3 SMP PREEMPT Mon Mar 2 06:31:06 UTC 2020
Linux上电将会调用 /etc/init.d/rcS
脚本,此脚本一般来说会调用一些脚本做一些初始化。
[root@imx6ull:/etc/init.d]# cat 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
[root@imx6ull:/etc/init.d]# ls
S01syslogd S09modload S30dbus S46ofono S50lighttpd S53neard rcK
S02klogd S10udev S40network S48sntp S50sshd S91smb rcS
S07hmi S20urandom S45connman S49ntp S50telnet autofs
实现
既然是自动调用脚本。那么就自己新建一个这个文件来实现,
# InitializeTheScript.sh
# 被调用脚本
enable() {
# do something
status=$?
if [ "$status" -eq 0 ]; then
echo "enable OK"
else
echo "enable FAIL"
fi
return $status
}
case "$1" in
restart | start | init | enable | disable)
"$1"
;;
*)
echo "Usage: $0 {start|init|enable|disable}"
exit 1
;;
esac
- 修改 rcS文件
echo "$EOF/bin/bash InitializeTheScript.sh$EOF" >> /etc/init.d/rcS
TIPS
需要注意的是,这个本地脚本的调用方式需要根据板子上文件系统的 rcS 文件
来设置的。因此需要首先读懂 rcS
文件。明白其调用形式
参考资料
linux系统初始化——sysinit文件写法详解
Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)