一、简介
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下存放的是平台特性文件,其优先级高于前者,即当前者目录和后者存在有相同文件时,以后者为准。如有以下两个文件:
a:tina/target/allwinner/r11-r11_pref1/busybox-init-base-files/etc/banner
b:tina/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_init,rcs没有配置),可将其写到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
(7)ota初始化。
(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:开机自启动smartlinkd(tina/package/allwinner/smartlinkd/files/smartlinkd.init)
1.方法一(特定格式要求)
(1)procd式
#!/bin/sh /etc/rc.common #本质为script脚本,以#!开头, 之后执行/etc/rc.commonstart=98 #开机启动优先级(序列) [数值越小, 越先启动]stop=98 #关机停止优先级(序列) [数值越小, 越先关闭]use_procd=1prog=smartlinkdstart_service() { #启动函数 procd_open_instance procd_set_param command $prog -d procd_close_instance}shutdown() { echo shutdown}(2)sys式
#!/bin/sh /etc/rc.commonstart=98stop=98prog=smartlinkdstart() { smartlinkd -d &}使用上述procd式和sys式脚本,既能兼容procd init启动和busybox init的启动方式。
另外如果使用的是busybox init的启动方式,还需要在load_script.conf文件中换行添加内容:smartlinkd
2.方法二(无特定格式要求)
创建rc.preboot或者rc.final脚本,添加启动smartlinkd的内容。
针对英特尔,博通、微软、谷歌他们做了什么
嵌入式系统在光伏监控系统中的应用
IT业务员的基本素养
Tengine是什么?最好用的Arm嵌入式系统AI框架是它吗?
2017款长安欧尚尊贵型,面子里子全都有,家用车的最佳选择,买车要慎重选择哦!
全志Tina Linux下busybox init简介
国芯思辰|中科阿尔法霍尔电流传感器AH911用于温控器电流检测,可实现过流保护功能
华为鸿蒙有望下月规模化推送_流畅度和动画效果大有提升
奥其斯暂停经营,陆续披露多则诉讼
六大实例,标志着5G和IoT正在改变全球范围内的商业模式
Java程序员面试失败的五大原因
基于模糊理论的PLC锅炉水位控制器
华为的sco unix培训教材
阿普奇正式推出了新国货旗舰机--IPC400 Series
苹果iOS10.2好评“稳定性又回来了”IOS10.2.1公测版为修复BUG?
华为与澳大利亚开撕:澳政府禁止华为参与5G网络竞标
电源浪涌保护器如何才能稳定可靠地工作
新能源行业SCARA工业机器人各种新品的性能和特点分析
怎样通过RC延迟和运放来实现三角波和方波呢?
什么是配电系统?配电管理系统的组成 配电系统主要由哪三部分组成