Linux系统启动之后,会执行/sbin/init进程,init进程会调用启动脚本/etc/init.d/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
可以看到里面就一个for循环,遍历每一个/etc/init.d/S??*
的文件,这些文件会按顺序排列,例如:
# /etc/init.d$ ls S??*
S01syslogd S02klogd S02sysctl S10udev S11adb_server S20urandom S30dbus S40bluetooth S40network S50sshd S80dnsmasq S80swupdate
可以看到S后面的两位数决定了文件的顺序。rcS
文件会依次启动每一个文件,以此达到开机自启动的效果。
自己添加一个新的自启动项
我们需要创建类似S??*
文件名的文件,例如S50lvgl
,然后里面的内容要如下所示:
1 #!/bin/sh
2 #
3 # Start lvgl....
4 #
5
6
7 export $(dbus-launch)
8
9 start() {
10 printf "Starting 100ask lvgl: "
11 echo -e "\033[9;0]" > /dev/tty0 # 此行请自己手敲,直接复制可能会出错
12 echo -e "\033[?25l" > /dev/tty1 # 此行请自己手敲,直接复制可能会出错,其中 25l 是 L 的小写
13 export $(dbus-launch)
14 cd /usr/share/100ask_desktop/
15 ./100ask_lvgl_Main &
16 [ $? = 0 ] && echo "OK" || echo "FAIL"
17 }
18
19 stop() {
20 printf "Stopping lvgl: "
21 }
22
23 case "$1" in
24 start)
25 start
26 ;;
27 stop)
28 stop
29 ;;
30 restart|reload)
31 stop
32 start
33 ;;
34 *)
35 echo "Usage: $0 {start|stop|restart}"
36 exit 1
37 esac
38
39 exit $?
一定要有start
和stop
两个函数。