Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Startup Init Lite
提交
c0f5a512
S
Startup Init Lite
项目概览
OpenHarmony
/
Startup Init Lite
9 个月 前同步成功
通知
3
Star
37
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Startup Init Lite
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
c0f5a512
编写于
7月 08, 2021
作者:
Z
zhong_ning
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify l2 init
Signed-off-by:
N
zhong_ning
<
zhong_ning@hoperun.com
>
上级
6af95970
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
476 addition
and
26 deletion
+476
-26
services/BUILD.gn
services/BUILD.gn
+18
-0
services/etc/init.cfg
services/etc/init.cfg
+2
-1
services/etc/init.usb.cfg
services/etc/init.usb.cfg
+161
-0
services/etc/init.usb.configfs.cfg
services/etc/init.usb.configfs.cfg
+220
-0
services/include/init_service.h
services/include/init_service.h
+1
-0
services/include/init_service_manager.h
services/include/init_service_manager.h
+1
-0
services/include/init_utils.h
services/include/init_utils.h
+1
-0
services/log/init_log.c
services/log/init_log.c
+1
-1
services/src/device.c
services/src/device.c
+8
-0
services/src/init_cmds.c
services/src/init_cmds.c
+2
-18
services/src/init_service.c
services/src/init_service.c
+31
-0
services/src/init_service_manager.c
services/src/init_service_manager.c
+13
-6
services/src/init_utils.c
services/src/init_utils.c
+17
-0
未找到文件。
services/BUILD.gn
浏览文件 @
c0f5a512
...
...
@@ -156,12 +156,30 @@ if (defined(ohos_lite)) {
part_name = "init"
}
ohos_prebuilt_etc("init.usb.cfg") {
source = "//base/startup/init_lite/services/etc/init.usb.cfg"
part_name = "init"
}
ohos_prebuilt_etc("init.usb.configfs.cfg") {
source = "//base/startup/init_lite/services/etc/init.usb.configfs.cfg"
part_name = "init"
}
ohos_prebuilt_etc("init.Hi3516DV300.usb.cfg") {
source = "//device/hisilicon/hi3516dv300/build/rootfs/init.Hi3516DV300.usb.cfg"
part_name = "init"
}
group("startup_init") {
deps = [
":init",
":init.cfg",
":passwd",
":init.Hi3516DV300.cfg",
":init.usb.cfg",
":init.usb.configfs.cfg",
":init.Hi3516DV300.usb.cfg",
":updaterueventd",
"//base/startup/init_lite/services/param:getparam",
"//base/startup/init_lite/services/param:paramclient",
...
...
services/etc/init.cfg
浏览文件 @
c0f5a512
...
...
@@ -17,7 +17,6 @@
"mkdir /dev/memcg/apps/ 0755 system system",
"mkdir /dev/memcg/system 0550 system system",
"start ueventd",
"start console",
"mkdir /vendor",
"mkdir /data",
"mount ext4 /dev/block/platform/soc/10100000.himci.eMMC/by-name/vendor /vendor wait rdonly barrier=1",
...
...
@@ -26,6 +25,7 @@
}, {
"name" : "init",
"cmds" : [
"start console",
"copy /proc/cmdline /dev/urandom",
"copy /system/etc/prop.default /dev/urandom",
"symlink /proc/self/fd/0 /dev/stdin",
...
...
@@ -554,6 +554,7 @@
"name" : "console",
"path" : ["/system/bin/sh"],
"disabled" : 1,
"console" : 1,
"uid" : "root",
"gid" : ["shell", "log", "readproc"]
}, {
...
...
services/etc/init.usb.cfg
0 → 100755
浏览文件 @
c0f5a512
{
"jobs" : [{
"name" : "post-fs-data",
"cmds" : [
"chown system system /sys/class/android_usb/android0/f_mass_storage/lun/file",
"chmod 0660 /sys/class/android_usb/android0/f_mass_storage/lun/file",
"chown system system /sys/class/android_usb/android0/f_rndis/ethaddr",
"chmod 0660 /sys/class/android_usb/android0/f_rndis/ethaddr",
"mkdir /data/misc/adb 02750 system shell",
"mkdir /data/adb 0700 root root",
"start adbd"
]
}, {
"name" : "boot",
"cmds" : [
"setparam sys.usb.configfs 0"
]
}, {
"name" : "property:sys.usb.config=none && property:sys.usb.configfs=0",
"condition" : "sys.usb.config=none && sys.usb.configfs=0",
"cmds" : [
"stop adbd",
"write /sys/class/android_usb/android0/enable 0",
"write /sys/class/android_usb/android0/bDeviceClass 0",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=adb && property:sys.usb.configfs=0",
"condition" : "sys.usb.config=adb && sys.usb.configfs=0",
"cmds" : [
"write /sys/class/android_usb/android0/enable 0",
"write /sys/class/android_usb/android0/idVendor 18d1",
"write /sys/class/android_usb/android0/idProduct 4EE7",
"write /sys/class/android_usb/android0/functions ${sys.usb.config}",
"write /sys/class/android_usb/android0/enable 1",
"start adbd",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=accessory && property:sys.usb.configfs=0",
"condition" : "sys.usb.config=accessory && sys.usb.configfs=0",
"cmds" : [
"write /sys/class/android_usb/android0/enable 0",
"write /sys/class/android_usb/android0/idVendor 18d1",
"write /sys/class/android_usb/android0/idProduct 2d00",
"write /sys/class/android_usb/android0/functions ${sys.usb.config}",
"write /sys/class/android_usb/android0/enable 1",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=accessory,adb && property:sys.usb.configfs=0",
"condition" : "sys.usb.config=accessory,adb && sys.usb.configfs=0",
"cmds" : [
"write /sys/class/android_usb/android0/enable 0",
"write /sys/class/android_usb/android0/idVendor 18d1",
"write /sys/class/android_usb/android0/idProduct 2d01",
"write /sys/class/android_usb/android0/functions ${sys.usb.config}",
"write /sys/class/android_usb/android0/enable 1",
"start adbd",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=audio_source && property:sys.usb.configfs=0",
"condition" : "sys.usb.config=audio_source && sys.usb.configfs=0",
"cmds" : [
"write /sys/class/android_usb/android0/enable 0",
"write /sys/class/android_usb/android0/idVendor 18d1",
"write /sys/class/android_usb/android0/idProduct 2d02",
"write /sys/class/android_usb/android0/functions ${sys.usb.config}",
"write /sys/class/android_usb/android0/enable 1",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=audio_source,adb && property:sys.usb.configfs=0",
"condition" : "sys.usb.config=audio_source,adb && sys.usb.configfs=0",
"cmds" : [
"write /sys/class/android_usb/android0/enable 0",
"write /sys/class/android_usb/android0/idVendor 18d1",
"write /sys/class/android_usb/android0/idProduct 2d03",
"write /sys/class/android_usb/android0/functions ${sys.usb.config}",
"write /sys/class/android_usb/android0/enable 1",
"start adbd",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=accessory,audio_source && property:sys.usb.configfs=0",
"condition" : "sys.usb.config=accessory,audio_source && sys.usb.configfs=0",
"cmds" : [
"write /sys/class/android_usb/android0/enable 0",
"write /sys/class/android_usb/android0/idVendor 18d1",
"write /sys/class/android_usb/android0/idProduct 2d04",
"write /sys/class/android_usb/android0/functions ${sys.usb.config}",
"write /sys/class/android_usb/android0/enable 1",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=accessory,audio_source,adb && property:sys.usb.configfs=0",
"condition" : "sys.usb.config=accessory,audio_source,adb && sys.usb.configfs=0",
"cmds" : [
"write /sys/class/android_usb/android0/enable 0",
"write /sys/class/android_usb/android0/idVendor 18d1",
"write /sys/class/android_usb/android0/idProduct 2d05",
"write /sys/class/android_usb/android0/functions ${sys.usb.config}",
"write /sys/class/android_usb/android0/enable 1",
"start adbd",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.typec.mode=dfp",
"condition" : "sys.usb.typec.mode=dfp",
"cmds" : [
"write /sys/class/dual_role_usb/otg_default/mode ${sys.usb.typec.mode}",
"setparam sys.usb.typec.state ${sys.usb.typec.mode}"
]
}, {
"name" : "property:sys.usb.typec.mode=ufp",
"condition" : "sys.usb.typec.mode=ufp",
"cmds" : [
"write /sys/class/dual_role_usb/otg_default/mode ${sys.usb.typec.mode}",
"setparam sys.usb.typec.state ${sys.usb.typec.mode}"
]
}, {
"name" : "property:sys.usb.typec.data_role=device",
"condition" : "sys.usb.typec.data_role=device",
"cmds" : [
"write /sys/class/dual_role_usb/otg_default/data_role ${sys.usb.typec.data_role}",
"setparam sys.usb.typec.state ${sys.usb.typec.data_role}"
]
}, {
"name" : "property:sys.usb.typec.data_role=host",
"condition" : "sys.usb.typec.data_role=host",
"cmds" : [
"write /sys/class/dual_role_usb/otg_default/data_role ${sys.usb.typec.data_role}",
"setparam sys.usb.typec.state ${sys.usb.typec.data_role}"
]
}, {
"name" : "property:sys.usb.typec.power_role=source",
"condition" : "sys.usb.typec.power_role=source",
"cmds" : [
"write /sys/class/dual_role_usb/otg_default/power_role ${sys.usb.typec.power_role}",
"setparam sys.usb.typec.state ${sys.usb.typec.power_role}"
]
}, {
"name" : "property:sys.usb.typec.power_role=sink",
"condition" : "sys.usb.typec.power_role=sink",
"cmds" : [
"write /sys/class/dual_role_usb/otg_default/power_role ${sys.usb.typec.power_role}",
"setparam sys.usb.typec.state ${sys.usb.typec.power_role}"
]
}
],
"services" : [{
"name" : "adbd",
"path" : ["/system/bin/hdcd"],
"socket" : [
"adbd seqpacket 660 system system false"
],
"disabled" : 1
}
]
}
services/etc/init.usb.configfs.cfg
0 → 100755
浏览文件 @
c0f5a512
{
"jobs" : [{
"name" : "property:sys.usb.config=none && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=none && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/UDC \"none\"",
"stop adbd",
"setparam sys.usb.ffs.ready 0",
"write /config/usb_gadget/g1/bDeviceClass 0",
"write /config/usb_gadget/g1/bDeviceSubClass 0",
"write /config/usb_gadget/g1/bDeviceProtocol 0",
"rm /config/usb_gadget/g1/configs/b.1/f1",
"rm /config/usb_gadget/g1/configs/b.1/f2",
"rm /config/usb_gadget/g1/configs/b.1/f3",
"rmdir /config/usb_gadget/g1/functions/rndis.gs4",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:init.svc.adbd=stopped",
"condition" : "init.svc.adbd=stopped",
"cmds" : [
"setparam sys.usb.ffs.ready 0"
]
}, {
"name" : "property:sys.usb.config=adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=adb && sys.usb.configfs=1",
"cmds" : [
"start adbd"
]
}, {
"name" : "property:sys.usb.ffs.ready=1 && property:sys.usb.config=adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.ffs.ready=1 && sys.usb.config=adb && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"adb\"",
"symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f1",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=mtp && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=mtp && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"mtp\"",
"symlink /config/usb_gadget/g1/functions/mtp.gs0 /config/usb_gadget/g1/configs/b.1/f1",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=mtp,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=mtp,adb && sys.usb.configfs=1",
"cmds" : [
"start adbd"
]
}, {
"name" : "property:sys.usb.ffs.ready=1 && property:sys.usb.config=mtp,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.ffs.ready=1 && sys.usb.config=mtp,adb && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"mtp_adb\"",
"symlink /config/usb_gadget/g1/functions/mtp.gs0 /config/usb_gadget/g1/configs/b.1/f1",
"symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=ptp && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=ptp && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"ptp\"",
"symlink /config/usb_gadget/g1/functions/ptp.gs1 /config/usb_gadget/g1/configs/b.1/f1",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=ptp,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=ptp,adb && sys.usb.configfs=1",
"cmds" : [
"start adbd"
]
}, {
"name" : "property:sys.usb.ffs.ready=1 && property:sys.usb.config=ptp,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.ffs.ready=1 && sys.usb.config=ptp,adb && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"ptp_adb\"",
"symlink /config/usb_gadget/g1/functions/ptp.gs1 /config/usb_gadget/g1/configs/b.1/f1",
"symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=accessory && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=accessory && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"accessory\"",
"symlink /config/usb_gadget/g1/functions/accessory.gs2 /config/usb_gadget/g1/configs/b.1/f1",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=accessory,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=accessory,adb && sys.usb.configfs=1",
"cmds" : [
"start adbd"
]
}, {
"name" : "property:sys.usb.ffs.ready=1 && property:sys.usb.config=accessory,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.ffs.ready=1 && sys.usb.config=accessory,adb && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"accessory_adb\"",
"symlink /config/usb_gadget/g1/functions/accessory.gs2 /config/usb_gadget/g1/configs/b.1/f1",
"symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=audio_source && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=audio_source && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"audiosource\"",
"symlink /config/usb_gadget/g1/functions/audio_source.gs3 /config/usb_gadget/g1/configs/b.1/f1",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=audio_source,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=audio_source,adb && sys.usb.configfs=1",
"cmds" : [
"start adbd"
]
}, {
"name" : "property:sys.usb.ffs.ready=1 && property:sys.usb.config=audio_source,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.ffs.ready=1 && sys.usb.config=audio_source,adb && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"audiosource_adb\"",
"symlink /config/usb_gadget/g1/functions/audio_source.gs3 /config/usb_gadget/g1/configs/b.1/f1",
"symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=accessory,audio_source && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=accessory,audio_source && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"accessory_audiosource\"",
"symlink /config/usb_gadget/g1/functions/accessory.gs2 /config/usb_gadget/g1/configs/b.1/f1",
"symlink /config/usb_gadget/g1/functions/audio_source.gs3 /config/usb_gadget/g1/configs/b.1/f2",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=accessory,audio_source,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=accessory,audio_source,adb && sys.usb.configfs=1",
"cmds" : [
"start adbd"
]
}, {
"name" : "property:sys.usb.ffs.ready=1 && property:sys.usb.config=accessory,audio_source,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.ffs.ready=1 && sys.usb.config=accessory,audio_source,adb && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"accessory_audiosource_adb\"",
"symlink /config/usb_gadget/g1/functions/accessory.gs2 /config/usb_gadget/g1/configs/b.1/f1",
"symlink /config/usb_gadget/g1/functions/audio_source.gs3 /config/usb_gadget/g1/configs/b.1/f2",
"symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f3",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=midi && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=midi && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"midi\"",
"symlink /config/usb_gadget/g1/functions/midi.gs5 /config/usb_gadget/g1/configs/b.1/f1",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=midi,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=midi,adb && sys.usb.configfs=1",
"cmds" : [
"start adbd"
]
}, {
"name" : "property:sys.usb.ffs.ready=1 && property:sys.usb.config=midi,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.ffs.ready=1 && sys.usb.config=midi,adb && sys.usb.configfs=1",
"cmds" : [
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"midi_adb\"",
"symlink /config/usb_gadget/g1/functions/midi.gs5 /config/usb_gadget/g1/configs/b.1/f1",
"symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=rndis && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=rndis && sys.usb.configfs=1",
"cmds" : [
"mkdir /config/usb_gadget/g1/functions/rndis.gs4",
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"rndis\"",
"symlink /config/usb_gadget/g1/functions/rndis.gs4 /config/usb_gadget/g1/configs/b.1/f1",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}, {
"name" : "property:sys.usb.config=rndis,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.config=rndis,adb && sys.usb.configfs=1",
"cmds" : [
"start adbd"
]
}, {
"name" : "property:sys.usb.ffs.ready=1 && property:sys.usb.config=rndis,adb && property:sys.usb.configfs=1",
"condition" : "sys.usb.ffs.ready=1 && sys.usb.config=rndis,adb && sys.usb.configfs=1",
"cmds" : [
"mkdir /config/usb_gadget/g1/functions/rndis.gs4",
"write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration \"rndis_adb\"",
"symlink /config/usb_gadget/g1/functions/rndis.gs4 /config/usb_gadget/g1/configs/b.1/f1",
"symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2",
"write /config/usb_gadget/g1/UDC ${sys.usb.controller}",
"setparam sys.usb.state ${sys.usb.config}"
]
}
]
}
services/include/init_service.h
浏览文件 @
c0f5a512
...
...
@@ -38,6 +38,7 @@ extern "C" {
#define SERVICE_ATTR_IMPORTANT 0x010 // will reboot if it crash
#define SERVICE_ATTR_CRITICAL 0x020 // critical, will reboot if it crash 4 times in 4 minutes
#define SERVICE_ATTR_DISABLED 0x040 // disabled
#define SERVICE_ATTR_CONSOLE 0x080 // console
#define MAX_SERVICE_NAME 32
#define MAX_WRITEPID_FILES 100
...
...
services/include/init_service_manager.h
浏览文件 @
c0f5a512
...
...
@@ -32,6 +32,7 @@ extern "C" {
#define BIN_SH_NOT_ALLOWED "/bin/sh"
#define CRITICAL_STR_IN_CFG "critical"
#define DISABLED_STR_IN_CFG "disabled"
#define CONSOLE_STR_IN_CFG "console"
#define MAX_SERVICES_CNT_IN_FILE 100
...
...
services/include/init_utils.h
浏览文件 @
c0f5a512
...
...
@@ -37,6 +37,7 @@ int DecodeUid(const char *name);
void
CheckAndCreateDir
(
const
char
*
fileName
);
char
*
ReadFileToBuf
(
const
char
*
configFile
);
int
SplitString
(
char
*
srcPtr
,
char
**
dstPtr
,
int
maxNum
);
void
WaitForFile
(
const
char
*
source
,
int
maxCount
);
#ifdef __cplusplus
#if __cplusplus
...
...
services/log/init_log.c
浏览文件 @
c0f5a512
...
...
@@ -42,7 +42,7 @@ void InitLog(const char *tag, InitLogLevel logLevel, const char *fileName, int l
if
(
logLevel
<
g_logLevel
)
{
return
;
}
//
可以替换stdout这个为对应的文件句柄
//
????stdout??????????
time_t
logTime
;
time
(
&
logTime
);
struct
tm
*
t
=
gmtime
(
&
logTime
);
...
...
services/src/device.c
浏览文件 @
c0f5a512
...
...
@@ -34,6 +34,14 @@ void MountBasicFs()
if
(
mount
(
"tmpfs"
,
"/dev"
,
"tmpfs"
,
MS_NOSUID
,
"mode=0755"
)
!=
0
)
{
INIT_LOGE
(
"Mount tmpfs failed. %s
\n
"
,
strerror
(
errno
));
}
#ifndef __LITEOS__
if
(
mkdir
(
"/dev/pts"
,
S_IRWXU
|
S_IRGRP
|
S_IXGRP
|
S_IROTH
|
S_IXOTH
)
!=
0
)
{
INIT_LOGE
(
"mkdir /dev/pts failed. %s
\n
"
,
strerror
(
errno
));
}
if
(
mount
(
"devpts"
,
"/dev/pts"
,
"devpts"
,
0
,
NULL
)
!=
0
)
{
INIT_LOGE
(
"Mount devpts failed. %s
\n
"
,
strerror
(
errno
));
}
#endif
if
(
mount
(
"proc"
,
"/proc"
,
"proc"
,
0
,
"hidepid=2"
)
!=
0
)
{
INIT_LOGE
(
"Mount procfs failed. %s
\n
"
,
strerror
(
errno
));
}
...
...
services/src/init_cmds.c
浏览文件 @
c0f5a512
...
...
@@ -51,7 +51,7 @@
#define OCTAL_TYPE 8 // 8 means octal to decimal
#define MAX_BUFFER 256
#define AUTHORITY_MAX_SIZE 128
#define
CONVERT_MICROSEC_TO_SEC(x) ((x) / 1000 / 1000)
#define
WAIT_MAX_COUNT 10
static
const
char
*
g_supportCfg
[]
=
{
"/etc/patch.cfg"
,
...
...
@@ -305,22 +305,6 @@ static char* CopySubStr(const char* srcStr, size_t startPos, size_t endPos)
return
retStr
;
}
static
void
WaitForFile
(
const
char
*
source
)
{
struct
stat
sourceInfo
;
unsigned
int
waitTime
=
500000
;
int
maxCount
=
10
;
// 10 means that sleep 10 times, 500ms at a time
int
count
=
0
;
do
{
usleep
(
waitTime
);
count
++
;
}
while
((
stat
(
source
,
&
sourceInfo
)
<
0
)
&&
(
errno
==
ENOENT
)
&&
(
count
<
maxCount
));
if
(
count
==
maxCount
)
{
INIT_LOGE
(
"wait for file:%s failed after %d.
\n
"
,
source
,
maxCount
*
CONVERT_MICROSEC_TO_SEC
(
waitTime
));
}
return
;
}
static
int
GetMountFlag
(
unsigned
long
*
mountflags
,
const
char
*
targetStr
,
const
char
*
source
)
{
if
(
targetStr
==
NULL
)
{
...
...
@@ -338,7 +322,7 @@ static int GetMountFlag(unsigned long* mountflags, const char* targetStr, const
}
else
if
(
strncmp
(
targetStr
,
"noatime"
,
strlen
(
"noatime"
))
==
0
)
{
(
*
mountflags
)
|=
MS_NOATIME
;
}
else
if
(
strncmp
(
targetStr
,
"wait"
,
strlen
(
"wait"
))
==
0
)
{
WaitForFile
(
source
);
WaitForFile
(
source
,
WAIT_MAX_COUNT
);
}
else
{
return
0
;
}
...
...
services/src/init_service.c
浏览文件 @
c0f5a512
...
...
@@ -15,10 +15,16 @@
#include "init_service.h"
#include <bits/ioctl.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef __MUSL__
#include <stropts.h>
#endif
#include <sys/param.h>
#include <sys/stat.h>
#include <time.h>
...
...
@@ -29,9 +35,14 @@
#include "init_log.h"
#include "init_perms.h"
#include "init_service_socket.h"
#include "init_utils.h"
#define CAP_NUM 2
#define WAIT_MAX_COUNT 10
#ifndef TIOCSCTTY
#define TIOCSCTTY 0x540E
#endif
// 240 seconds, 4 minutes
static
const
int
CRASH_TIME_LIMIT
=
240
;
// maximum number of crashes within time CRASH_TIME_LIMIT for one service
...
...
@@ -110,6 +121,23 @@ static int SetPerms(const Service *service)
return
SERVICE_SUCCESS
;
}
static
void
OpenConsole
()
{
setsid
();
WaitForFile
(
"/dev/console"
,
WAIT_MAX_COUNT
);
int
fd
=
open
(
"/dev/console"
,
O_RDWR
);
if
(
fd
>=
0
)
{
ioctl
(
fd
,
TIOCSCTTY
,
0
);
dup2
(
fd
,
0
);
dup2
(
fd
,
1
);
dup2
(
fd
,
2
);
close
(
fd
);
}
else
{
INIT_LOGE
(
"Open /dev/console failed. err = %d
\n
"
,
errno
);
}
return
;
}
int
ServiceStart
(
Service
*
service
)
{
if
(
service
==
NULL
)
{
...
...
@@ -141,6 +169,9 @@ int ServiceStart(Service *service)
_exit
(
0x7f
);
// 0x7f: user specified
}
}
if
(
service
->
attribute
&
SERVICE_ATTR_CONSOLE
)
{
OpenConsole
();
}
// permissions
if
(
SetPerms
(
service
)
!=
SERVICE_SUCCESS
)
{
INIT_LOGE
(
"service %s exit! set perms failed! err %d.
\n
"
,
service
->
name
,
errno
);
...
...
services/src/init_service_manager.c
浏览文件 @
c0f5a512
...
...
@@ -348,8 +348,9 @@ static int GetServiceNumber(const cJSON* curArrItem, Service* curServ, const cha
if
(
filedJ
==
NULL
&&
(
strncmp
(
targetField
,
CRITICAL_STR_IN_CFG
,
strlen
(
CRITICAL_STR_IN_CFG
))
==
0
||
strncmp
(
targetField
,
DISABLED_STR_IN_CFG
,
strlen
(
DISABLED_STR_IN_CFG
))
==
0
||
strncmp
(
targetField
,
ONCE_STR_IN_CFG
,
strlen
(
ONCE_STR_IN_CFG
))
==
0
||
strncmp
(
targetField
,
IMPORTANT_STR_IN_CFG
,
strlen
(
IMPORTANT_STR_IN_CFG
))
==
0
))
{
return
SERVICE_SUCCESS
;
// not found "critical","disabled","once","importance" item is ok
||
strncmp
(
targetField
,
IMPORTANT_STR_IN_CFG
,
strlen
(
IMPORTANT_STR_IN_CFG
))
==
0
||
strncmp
(
targetField
,
CONSOLE_STR_IN_CFG
,
strlen
(
CONSOLE_STR_IN_CFG
))
==
0
))
{
return
SERVICE_SUCCESS
;
// not found "critical","disabled","once","importance","console" item is ok
}
if
(
!
cJSON_IsNumber
(
filedJ
))
{
...
...
@@ -384,6 +385,11 @@ static int GetServiceNumber(const cJSON* curArrItem, Service* curServ, const cha
if
(
value
==
1
)
{
curServ
->
attribute
|=
SERVICE_ATTR_DISABLED
;
}
}
else
if
(
strncmp
(
targetField
,
CONSOLE_STR_IN_CFG
,
strlen
(
CONSOLE_STR_IN_CFG
))
==
0
)
{
// set console
curServ
->
attribute
&=
~
SERVICE_ATTR_CONSOLE
;
if
(
value
==
1
)
{
curServ
->
attribute
|=
SERVICE_ATTR_CONSOLE
;
}
}
else
{
INIT_LOGE
(
"GetServiceNumber, item = %s, not expected, error.
\n
"
,
targetField
);
return
SERVICE_FAILURE
;
...
...
@@ -574,7 +580,7 @@ static int GetServiceOnRestart(const cJSON* curArrItem, Service* curServ)
static
int
CheckServiceKeyName
(
const
cJSON
*
curService
)
{
char
*
cfgServiceKeyList
[]
=
{
"name"
,
"path"
,
"uid"
,
"gid"
,
"once"
,
"importance"
,
"caps"
,
"disabled"
,
"writepid"
,
"critical"
,
"socket"
,
"importance"
,
"caps"
,
"disabled"
,
"writepid"
,
"critical"
,
"socket"
,
"console"
};
if
(
curService
==
NULL
)
{
return
SERVICE_FAILURE
;
...
...
@@ -645,9 +651,10 @@ void ParseAllServices(const cJSON* fileRoot)
int
ret6
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
IMPORTANT_STR_IN_CFG
);
int
ret7
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
CRITICAL_STR_IN_CFG
);
// critical
int
ret8
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
DISABLED_STR_IN_CFG
);
// disabled
int
ret9
=
GetWritepidStrings
(
curItem
,
&
tmp
[
i
]);
// writepid
int
reta
=
GetServiceCaps
(
curItem
,
&
tmp
[
i
]);
int
retAll
=
ret1
|
ret2
|
ret3
|
ret4
|
ret5
|
ret6
|
ret7
|
ret8
|
ret9
|
reta
;
int
ret9
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
CONSOLE_STR_IN_CFG
);
// console
int
reta
=
GetWritepidStrings
(
curItem
,
&
tmp
[
i
]);
// writepid
int
retb
=
GetServiceCaps
(
curItem
,
&
tmp
[
i
]);
int
retAll
=
ret1
|
ret2
|
ret3
|
ret4
|
ret5
|
ret6
|
ret7
|
ret8
|
ret9
|
reta
|
retb
;
if
(
retAll
!=
SERVICE_SUCCESS
)
{
// release resources if it fails
ReleaseServiceMem
(
&
tmp
[
i
]);
...
...
services/src/init_utils.c
浏览文件 @
c0f5a512
...
...
@@ -43,6 +43,7 @@
#define MAX_BUFFER 256
#define MAX_EACH_CMD_LENGTH 30
#define MAX_JSON_FILE_LEN 102400 // max init.cfg size 100KB
#define CONVERT_MICROSEC_TO_SEC(x) ((x) / 1000 / 1000)
struct
CmdArgs
*
GetCmd
(
const
char
*
cmdContent
,
const
char
*
delim
)
{
...
...
@@ -177,3 +178,19 @@ int SplitString(char *srcPtr, char **dstPtr, int maxNum)
}
return
num
;
}
void
WaitForFile
(
const
char
*
source
,
int
maxCount
)
{
struct
stat
sourceInfo
;
unsigned
int
waitTime
=
500000
;
int
count
=
0
;
do
{
usleep
(
waitTime
);
count
++
;
}
while
((
stat
(
source
,
&
sourceInfo
)
<
0
)
&&
(
errno
==
ENOENT
)
&&
(
count
<
maxCount
));
if
(
count
==
maxCount
)
{
INIT_LOGE
(
"wait for file:%s failed after %d.
\n
"
,
source
,
maxCount
*
CONVERT_MICROSEC_TO_SEC
(
waitTime
));
}
return
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录