简介

先确定版本

  1. [root@imx6ull:~]# cat /proc/version
  2. 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 脚本,此脚本一般来说会调用一些脚本做一些初始化。

  1. [root@imx6ull:/etc/init.d]# cat rcS
  2. #!/bin/sh
  3. # Start all init scripts in /etc/init.d
  4. # executing them in numerical order.
  5. #
  6. for i in /etc/init.d/S??* ;do
  7. # Ignore dangling symlinks (if any).
  8. [ ! -f "$i" ] && continue
  9. case "$i" in
  10. *.sh)
  11. # Source shell script for speed.
  12. (
  13. trap - INT QUIT TSTP
  14. set start
  15. . $i
  16. )
  17. ;;
  18. *)
  19. # No sh extension, so fork subprocess.
  20. $i start
  21. ;;
  22. esac
  23. done
  24. [root@imx6ull:/etc/init.d]# ls
  25. S01syslogd S09modload S30dbus S46ofono S50lighttpd S53neard rcK
  26. S02klogd S10udev S40network S48sntp S50sshd S91smb rcS
  27. S07hmi S20urandom S45connman S49ntp S50telnet autofs

实现

既然是自动调用脚本。那么就自己新建一个这个文件来实现,

  1. # InitializeTheScript.sh
  2. # 被调用脚本
  3. enable() {
  4. # do something
  5. status=$?
  6. if [ "$status" -eq 0 ]; then
  7. echo "enable OK"
  8. else
  9. echo "enable FAIL"
  10. fi
  11. return $status
  12. }
  13. case "$1" in
  14. restart | start | init | enable | disable)
  15. "$1"
  16. ;;
  17. *)
  18. echo "Usage: $0 {start|init|enable|disable}"
  19. exit 1
  20. ;;
  21. esac
  • 修改 rcS文件
  1. echo "$EOF/bin/bash InitializeTheScript.sh$EOF" >> /etc/init.d/rcS

TIPS

需要注意的是,这个本地脚本的调用方式需要根据板子上文件系统的 rcS 文件来设置的。因此需要首先读懂 rcS文件。明白其调用形式

参考资料

linux系统初始化——sysinit文件写法详解
Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)