SmartAudio/package/busybox-init-base-files/files/etc/init.d/README.txt

134 lines
5.6 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

一、简介
tina 使用busybox init方式启动首先调用执行pseudo_init挂载文件系统如/proc、/tmp、/sys
/etc、/usr接着会调用/sbin/init进程而init进程调用的第一个启动脚本为/etc/init.d/rcS。
------------------------------------------------------------------------------------------
二、平台的自定义
不同的平台文件系统具有其共性与特殊性。tina/packge/busybox-init-base-files/files下提供了
所有平台的基础文件。而在tina/target/allwinner/XXX/busybox-init-base-files下存放的是平台特性
文件,其优先级高于前者,即当前者目录和后者存在有相同文件时,以后者为准。如有以下两个文件:
Atina/target/allwinner/banjo-R11_pref1/busybox-init-base-files/etc/banner
Btina/package/busybox-init-base-files/files/etc/banner
最终拷贝到文件系统中的为A。
------------------------------------------------------------------------------------------
三、pseudo_init与rcS
pseudo_init与rcS文件中存在很多平台共性的代码避免系统充斥大量冗余代码,以及方便基础文件的维护和开发。
所以不允许在特定平台下自定义pseudo_init、rcS文件必须使用tina/packge/busybox-init-base-files/files下
的pseudo_init、rcS
如果需要添加平台特定配置pseudo_initrcS没有配置可将其写到rc.preboot,rc.final中参考第四节。
------------------------------------------------------------------------------------------
四、rcS脚本
1.功能描述
1执行/etc/init.d/rc.preboot。
为了满足开机快速启动的需求提供了用户可自定义rc.preboot文件
即在tina/target/allwinner/XXX/busybox-init-base-files/etc/init.d/目录下创建rc.preboot脚本文件
将会被rcS最先调用执行。
2配置打印级别主机名称。
3执行/etc/init.d/rc.log配置系统log信息。
系统默认使用的是tina/package/busybox-init-base-files/files/etc/init.d/rc.log脚本进行
配置系统log信息。用户可在tina/target/allwinner/XXX/busybox-init-base-files/etc/init.d/
下创建rc.log自定义rc.log。
如果需要使用默认rc.log需要在make menuconfig配置。
Base system --->
busybox-init-base-files......................... Busybox init base system --->
[*] Use the rc.log
4挂载UDISK。
5执行/etc/init.d/rc.modules加载内核模块。
系统默认使用的是tina/package/busybox-init-base-files/files/etc/init.d/rc.modules脚本
进行内核模块自加载用户可在tina/target/allwinner/XXX/busybox-init-base-files/etc/init.d/
下创建rc.modules自定义rc.modules。
如果需要使用默认rc.modules需要在make menuconfig配置如下。
Base system --->
busybox-init-base-files......................... Busybox init base system --->
[*] Use the rc.modules
6启动/etc/rc.d下的脚本。
关于执行rc.d下的启动脚本目的为兼容procd式的应用脚本。/etc/rc.d下的脚本是链接到/etc/init.d/下,
默认情况下只执行adbd,如果需要执行其他脚本需要在tina/target/allwinner/XXX/busybox-init-base-files/etc/init.d/下,
自定义load_script.conf文件文件内容中写上要启动的应用如adbd注意每一个应用占一行。可参考
tina/packge/busybox-init-base-files/files/etc/init.d/load_script.conf。
如果需要执行rc.d下的启动脚本需要在make menuconfig做如下配置。
Base system --->
busybox-init-base-files......................... Busybox init base system --->
[*] Auto load the script in /etc/rc.d
7ota初始化。
8执行/etc/init.d/rc.final,用户自定义启动脚本。
用户可在tina/packge/busybox-init-base-files/files/etc/init.d/下创建一个rc.final脚本自定义
启动应用程序,该脚本将会被rcS最后调用执行。
2.rc.preboot与rc.final的区别
rc.preboot比rc.final先运行在执行rc.preboot脚本的时候系统的一些初始化操作还没完成如挂载UDISK、
内核模块自加载、ota等等操作。而rc.final执行的时候以上的初始化操作已经完成。
五.如何写应用的启动脚本
example开机自启动smartlinkdtina/package/allwinner/smartlinkd/files/smartlinkd.init
1.方法一(特定格式要求)
详细的格式参考:
https://wiki.openwrt.org/inbox/procd-init-scripts
https://wiki.openwrt.org/doc/techref/initscripts
1procd式
------------------------------------------------------------------------------------------
#!/bin/sh /etc/rc.common #本质为script脚本,以#!开头, 之后执行/etc/rc.common
START=98 #开机启动优先级(序列) [数值越小, 越先启动]
STOP=98 #关机停止优先级(序列) [数值越小, 越先关闭]
USE_PROCD=1
PROG=smartlinkd
start_service() { #启动函数
procd_open_instance
procd_set_param command $PROG -d
procd_close_instance
}
shutdown() {
echo shutdown
}
------------------------------------------------------------------------------------------
2Sys式
------------------------------------------------------------------------------------------
#!/bin/sh /etc/rc.common
START=98
STOP=98
PROG=smartlinkd
start() {
smartlinkd -d &
}
------------------------------------------------------------------------------------------
使用上述procd式和sys式脚本既能兼容procd init启动和busybox init的启动方式。
另外如果使用的是busybox init的启动方式还需要在load_script.conf文件中换行添加内容smartlinkd
2.方法二(无特定格式要求)
创建rc.preboot或者rc.final脚本添加启动smartlinkd的内容。