Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Startup Init Lite
提交
754d3970
S
Startup Init Lite
项目概览
OpenHarmony
/
Startup Init Lite
接近 2 年 前同步成功
通知
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看板
提交
754d3970
编写于
7月 09, 2021
作者:
O
openharmony_ci
提交者:
Gitee
7月 09, 2021
浏览文件
操作
浏览文件
下载
差异文件
!51 修改L2 init
Merge pull request !51 from 钟柠/init0708
上级
6af95970
7173a750
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
510 addition
and
45 deletion
+510
-45
services/BUILD.gn
services/BUILD.gn
+18
-0
services/etc/init.cfg
services/etc/init.cfg
+7
-3
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/src/device.c
services/src/device.c
+8
-0
services/src/init_capability.c
services/src/init_capability.c
+8
-8
services/src/init_cmds.c
services/src/init_cmds.c
+2
-18
services/src/init_reboot.c
services/src/init_reboot.c
+17
-10
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
+22
-0
未找到文件。
services/BUILD.gn
浏览文件 @
754d3970
...
@@ -156,12 +156,30 @@ if (defined(ohos_lite)) {
...
@@ -156,12 +156,30 @@ if (defined(ohos_lite)) {
part_name = "init"
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") {
group("startup_init") {
deps = [
deps = [
":init",
":init",
":init.cfg",
":init.cfg",
":passwd",
":passwd",
":init.Hi3516DV300.cfg",
":init.Hi3516DV300.cfg",
":init.usb.cfg",
":init.usb.configfs.cfg",
":init.Hi3516DV300.usb.cfg",
":updaterueventd",
":updaterueventd",
"//base/startup/init_lite/services/param:getparam",
"//base/startup/init_lite/services/param:getparam",
"//base/startup/init_lite/services/param:paramclient",
"//base/startup/init_lite/services/param:paramclient",
...
...
services/etc/init.cfg
浏览文件 @
754d3970
...
@@ -5,7 +5,10 @@
...
@@ -5,7 +5,10 @@
"/init.${ro.hardware}.cfg",
"/init.${ro.hardware}.cfg",
"/init.Hi3516DV300.cfg",
"/init.Hi3516DV300.cfg",
"/init.usb.configfs.cfg",
"/init.usb.configfs.cfg",
"/init.${ro.zygote}.cfg"
"/init.${ro.zygote}.cfg",
"/init.Hi3516DV300.usb.cfg",
"/init.usb.configfs.cfg",
"/init.usb.cfg"
],
],
"jobs" : [{
"jobs" : [{
"name" : "pre-init",
"name" : "pre-init",
...
@@ -17,15 +20,15 @@
...
@@ -17,15 +20,15 @@
"mkdir /dev/memcg/apps/ 0755 system system",
"mkdir /dev/memcg/apps/ 0755 system system",
"mkdir /dev/memcg/system 0550 system system",
"mkdir /dev/memcg/system 0550 system system",
"start ueventd",
"start ueventd",
"start console",
"mkdir /vendor",
"mkdir /vendor",
"mkdir /data",
"mkdir /data",
"mount ext4 /dev/block/platform/soc/10100000.himci.eMMC/by-name/vendor /vendor wait rdonly barrier=1",
"mount ext4 /dev/block/platform/soc/10100000.himci.eMMC/by-name/vendor /vendor wait rdonly barrier=1",
"mount ext4 /dev/block/platform/soc/10100000.himci.eMMC/by-name/userdata /data wait nosuid nodev noatime barrier=1,data=o
rdered,noauto_da_alloc"
"mount ext4 /dev/block/platform/soc/10100000.himci.eMMC/by-name/userdata /data wait nosuid nodev noatime barrier=1,data=ordered,noauto_da_alloc"
]
]
}, {
}, {
"name" : "init",
"name" : "init",
"cmds" : [
"cmds" : [
"start console",
"copy /proc/cmdline /dev/urandom",
"copy /proc/cmdline /dev/urandom",
"copy /system/etc/prop.default /dev/urandom",
"copy /system/etc/prop.default /dev/urandom",
"symlink /proc/self/fd/0 /dev/stdin",
"symlink /proc/self/fd/0 /dev/stdin",
...
@@ -554,6 +557,7 @@
...
@@ -554,6 +557,7 @@
"name" : "console",
"name" : "console",
"path" : ["/system/bin/sh"],
"path" : ["/system/bin/sh"],
"disabled" : 1,
"disabled" : 1,
"console" : 1,
"uid" : "root",
"uid" : "root",
"gid" : ["shell", "log", "readproc"]
"gid" : ["shell", "log", "readproc"]
}, {
}, {
...
...
services/etc/init.usb.cfg
0 → 100755
浏览文件 @
754d3970
{
"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
浏览文件 @
754d3970
{
"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
浏览文件 @
754d3970
...
@@ -38,6 +38,7 @@ extern "C" {
...
@@ -38,6 +38,7 @@ extern "C" {
#define SERVICE_ATTR_IMPORTANT 0x010 // will reboot if it crash
#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_CRITICAL 0x020 // critical, will reboot if it crash 4 times in 4 minutes
#define SERVICE_ATTR_DISABLED 0x040 // disabled
#define SERVICE_ATTR_DISABLED 0x040 // disabled
#define SERVICE_ATTR_CONSOLE 0x080 // console
#define MAX_SERVICE_NAME 32
#define MAX_SERVICE_NAME 32
#define MAX_WRITEPID_FILES 100
#define MAX_WRITEPID_FILES 100
...
...
services/include/init_service_manager.h
浏览文件 @
754d3970
...
@@ -32,6 +32,7 @@ extern "C" {
...
@@ -32,6 +32,7 @@ extern "C" {
#define BIN_SH_NOT_ALLOWED "/bin/sh"
#define BIN_SH_NOT_ALLOWED "/bin/sh"
#define CRITICAL_STR_IN_CFG "critical"
#define CRITICAL_STR_IN_CFG "critical"
#define DISABLED_STR_IN_CFG "disabled"
#define DISABLED_STR_IN_CFG "disabled"
#define CONSOLE_STR_IN_CFG "console"
#define MAX_SERVICES_CNT_IN_FILE 100
#define MAX_SERVICES_CNT_IN_FILE 100
...
...
services/include/init_utils.h
浏览文件 @
754d3970
...
@@ -37,6 +37,7 @@ int DecodeUid(const char *name);
...
@@ -37,6 +37,7 @@ int DecodeUid(const char *name);
void
CheckAndCreateDir
(
const
char
*
fileName
);
void
CheckAndCreateDir
(
const
char
*
fileName
);
char
*
ReadFileToBuf
(
const
char
*
configFile
);
char
*
ReadFileToBuf
(
const
char
*
configFile
);
int
SplitString
(
char
*
srcPtr
,
char
**
dstPtr
,
int
maxNum
);
int
SplitString
(
char
*
srcPtr
,
char
**
dstPtr
,
int
maxNum
);
void
WaitForFile
(
const
char
*
source
,
unsigned
int
maxCount
);
#ifdef __cplusplus
#ifdef __cplusplus
#if __cplusplus
#if __cplusplus
...
...
services/src/device.c
浏览文件 @
754d3970
...
@@ -34,6 +34,14 @@ void MountBasicFs()
...
@@ -34,6 +34,14 @@ void MountBasicFs()
if
(
mount
(
"tmpfs"
,
"/dev"
,
"tmpfs"
,
MS_NOSUID
,
"mode=0755"
)
!=
0
)
{
if
(
mount
(
"tmpfs"
,
"/dev"
,
"tmpfs"
,
MS_NOSUID
,
"mode=0755"
)
!=
0
)
{
INIT_LOGE
(
"Mount tmpfs failed. %s
\n
"
,
strerror
(
errno
));
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
)
{
if
(
mount
(
"proc"
,
"/proc"
,
"proc"
,
0
,
"hidepid=2"
)
!=
0
)
{
INIT_LOGE
(
"Mount procfs failed. %s
\n
"
,
strerror
(
errno
));
INIT_LOGE
(
"Mount procfs failed. %s
\n
"
,
strerror
(
errno
));
}
}
...
...
services/src/init_capability.c
浏览文件 @
754d3970
...
@@ -85,7 +85,7 @@ static int GetServiceStringCaps(const cJSON* filedJ, Service* curServ)
...
@@ -85,7 +85,7 @@ static int GetServiceStringCaps(const cJSON* filedJ, Service* curServ)
for
(;
i
<
curServ
->
servPerm
.
capsCnt
;
++
i
)
{
for
(;
i
<
curServ
->
servPerm
.
capsCnt
;
++
i
)
{
if
(
cJSON_GetArrayItem
(
filedJ
,
i
)
==
NULL
||
!
cJSON_GetStringValue
(
cJSON_GetArrayItem
(
filedJ
,
i
))
if
(
cJSON_GetArrayItem
(
filedJ
,
i
)
==
NULL
||
!
cJSON_GetStringValue
(
cJSON_GetArrayItem
(
filedJ
,
i
))
||
strlen
(
cJSON_GetStringValue
(
cJSON_GetArrayItem
(
filedJ
,
i
)))
<=
0
)
{
// check all errors
||
strlen
(
cJSON_GetStringValue
(
cJSON_GetArrayItem
(
filedJ
,
i
)))
<=
0
)
{
// check all errors
INIT_LOGE
(
"
[init]
service=%s, parse item[%d] as string, error.
\n
"
,
curServ
->
name
,
i
);
INIT_LOGE
(
"service=%s, parse item[%d] as string, error.
\n
"
,
curServ
->
name
,
i
);
break
;
break
;
}
}
char
*
fieldStr
=
cJSON_GetStringValue
(
cJSON_GetArrayItem
(
filedJ
,
i
));
char
*
fieldStr
=
cJSON_GetStringValue
(
cJSON_GetArrayItem
(
filedJ
,
i
));
...
@@ -99,12 +99,12 @@ static int GetServiceStringCaps(const cJSON* filedJ, Service* curServ)
...
@@ -99,12 +99,12 @@ static int GetServiceStringCaps(const cJSON* filedJ, Service* curServ)
if
(
j
<
mapSize
)
{
if
(
j
<
mapSize
)
{
curServ
->
servPerm
.
caps
[
i
]
=
g_capStrCapNum
[
j
].
CapNum
;
curServ
->
servPerm
.
caps
[
i
]
=
g_capStrCapNum
[
j
].
CapNum
;
}
else
{
}
else
{
INIT_LOGE
(
"
[init]
service=%s, CapbilityName=%s, error.
\n
"
,
curServ
->
name
,
fieldStr
);
INIT_LOGE
(
"service=%s, CapbilityName=%s, error.
\n
"
,
curServ
->
name
,
fieldStr
);
break
;
break
;
}
}
if
(
curServ
->
servPerm
.
caps
[
i
]
>
CAP_LAST_CAP
&&
curServ
->
servPerm
.
caps
[
i
]
!=
FULL_CAP
)
{
if
(
curServ
->
servPerm
.
caps
[
i
]
>
CAP_LAST_CAP
&&
curServ
->
servPerm
.
caps
[
i
]
!=
FULL_CAP
)
{
// resources will be released by function: ReleaseServiceMem
// resources will be released by function: ReleaseServiceMem
INIT_LOGE
(
"
[init]
service=%s, cap = %d, error.
\n
"
,
curServ
->
name
,
curServ
->
servPerm
.
caps
[
i
]);
INIT_LOGE
(
"service=%s, cap = %d, error.
\n
"
,
curServ
->
name
,
curServ
->
servPerm
.
caps
[
i
]);
return
SERVICE_FAILURE
;
return
SERVICE_FAILURE
;
}
}
}
}
...
@@ -121,7 +121,7 @@ int GetServiceCaps(const cJSON* curArrItem, Service* curServ)
...
@@ -121,7 +121,7 @@ int GetServiceCaps(const cJSON* curArrItem, Service* curServ)
return
SERVICE_SUCCESS
;
return
SERVICE_SUCCESS
;
}
}
if
(
!
cJSON_IsArray
(
filedJ
))
{
if
(
!
cJSON_IsArray
(
filedJ
))
{
INIT_LOGE
(
"
[init]
service=%s, caps is not a list, error.
\n
"
,
curServ
->
name
);
INIT_LOGE
(
"service=%s, caps is not a list, error.
\n
"
,
curServ
->
name
);
return
SERVICE_FAILURE
;
return
SERVICE_FAILURE
;
}
}
// caps array does not exist, means do not need any capability
// caps array does not exist, means do not need any capability
...
@@ -130,13 +130,13 @@ int GetServiceCaps(const cJSON* curArrItem, Service* curServ)
...
@@ -130,13 +130,13 @@ int GetServiceCaps(const cJSON* curArrItem, Service* curServ)
return
SERVICE_SUCCESS
;
return
SERVICE_SUCCESS
;
}
}
if
(
capsCnt
>
MAX_CAPS_CNT_FOR_ONE_SERVICE
)
{
if
(
capsCnt
>
MAX_CAPS_CNT_FOR_ONE_SERVICE
)
{
INIT_LOGE
(
"
[init],
service=%s, too many caps[cnt %d] for one service, max is %d.
\n
"
,
INIT_LOGE
(
"service=%s, too many caps[cnt %d] for one service, max is %d.
\n
"
,
curServ
->
name
,
capsCnt
,
MAX_CAPS_CNT_FOR_ONE_SERVICE
);
curServ
->
name
,
capsCnt
,
MAX_CAPS_CNT_FOR_ONE_SERVICE
);
return
SERVICE_FAILURE
;
return
SERVICE_FAILURE
;
}
}
curServ
->
servPerm
.
caps
=
(
unsigned
int
*
)
malloc
(
sizeof
(
unsigned
int
)
*
capsCnt
);
curServ
->
servPerm
.
caps
=
(
unsigned
int
*
)
malloc
(
sizeof
(
unsigned
int
)
*
capsCnt
);
if
(
curServ
->
servPerm
.
caps
==
NULL
)
{
if
(
curServ
->
servPerm
.
caps
==
NULL
)
{
INIT_LOGE
(
"
[init]
GetServiceCaps, service=%s, malloc error.
\n
"
,
curServ
->
name
);
INIT_LOGE
(
"GetServiceCaps, service=%s, malloc error.
\n
"
,
curServ
->
name
);
return
SERVICE_FAILURE
;
return
SERVICE_FAILURE
;
}
}
curServ
->
servPerm
.
capsCnt
=
capsCnt
;
curServ
->
servPerm
.
capsCnt
=
capsCnt
;
...
@@ -145,13 +145,13 @@ int GetServiceCaps(const cJSON* curArrItem, Service* curServ)
...
@@ -145,13 +145,13 @@ int GetServiceCaps(const cJSON* curArrItem, Service* curServ)
cJSON
*
capJ
=
cJSON_GetArrayItem
(
filedJ
,
i
);
cJSON
*
capJ
=
cJSON_GetArrayItem
(
filedJ
,
i
);
if
(
!
cJSON_IsNumber
(
capJ
)
||
cJSON_GetNumberValue
(
capJ
)
<
0
)
{
if
(
!
cJSON_IsNumber
(
capJ
)
||
cJSON_GetNumberValue
(
capJ
)
<
0
)
{
// resources will be released by function: ReleaseServiceMem
// resources will be released by function: ReleaseServiceMem
INIT_LOGI
(
"
[init],
service=%s, Capbility is not a number or < 0, error.
\n
"
,
curServ
->
name
);
INIT_LOGI
(
"service=%s, Capbility is not a number or < 0, error.
\n
"
,
curServ
->
name
);
break
;
break
;
}
}
curServ
->
servPerm
.
caps
[
i
]
=
(
unsigned
int
)
cJSON_GetNumberValue
(
capJ
);
curServ
->
servPerm
.
caps
[
i
]
=
(
unsigned
int
)
cJSON_GetNumberValue
(
capJ
);
if
(
curServ
->
servPerm
.
caps
[
i
]
>
CAP_LAST_CAP
&&
curServ
->
servPerm
.
caps
[
i
]
!=
FULL_CAP
)
{
// CAP_LAST_CAP = 37
if
(
curServ
->
servPerm
.
caps
[
i
]
>
CAP_LAST_CAP
&&
curServ
->
servPerm
.
caps
[
i
]
!=
FULL_CAP
)
{
// CAP_LAST_CAP = 37
// resources will be released by function: ReleaseServiceMem
// resources will be released by function: ReleaseServiceMem
INIT_LOGE
(
"
[init]
service=%s, caps = %d, error.
\n
"
,
curServ
->
name
,
curServ
->
servPerm
.
caps
[
i
]);
INIT_LOGE
(
"service=%s, caps = %d, error.
\n
"
,
curServ
->
name
,
curServ
->
servPerm
.
caps
[
i
]);
return
SERVICE_FAILURE
;
return
SERVICE_FAILURE
;
}
}
}
}
...
...
services/src/init_cmds.c
浏览文件 @
754d3970
...
@@ -51,7 +51,7 @@
...
@@ -51,7 +51,7 @@
#define OCTAL_TYPE 8 // 8 means octal to decimal
#define OCTAL_TYPE 8 // 8 means octal to decimal
#define MAX_BUFFER 256
#define MAX_BUFFER 256
#define AUTHORITY_MAX_SIZE 128
#define AUTHORITY_MAX_SIZE 128
#define
CONVERT_MICROSEC_TO_SEC(x) ((x) / 1000 / 1000)
#define
WAIT_MAX_COUNT 10
static
const
char
*
g_supportCfg
[]
=
{
static
const
char
*
g_supportCfg
[]
=
{
"/etc/patch.cfg"
,
"/etc/patch.cfg"
,
...
@@ -305,22 +305,6 @@ static char* CopySubStr(const char* srcStr, size_t startPos, size_t endPos)
...
@@ -305,22 +305,6 @@ static char* CopySubStr(const char* srcStr, size_t startPos, size_t endPos)
return
retStr
;
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
)
static
int
GetMountFlag
(
unsigned
long
*
mountflags
,
const
char
*
targetStr
,
const
char
*
source
)
{
{
if
(
targetStr
==
NULL
)
{
if
(
targetStr
==
NULL
)
{
...
@@ -338,7 +322,7 @@ static int GetMountFlag(unsigned long* mountflags, const char* targetStr, const
...
@@ -338,7 +322,7 @@ static int GetMountFlag(unsigned long* mountflags, const char* targetStr, const
}
else
if
(
strncmp
(
targetStr
,
"noatime"
,
strlen
(
"noatime"
))
==
0
)
{
}
else
if
(
strncmp
(
targetStr
,
"noatime"
,
strlen
(
"noatime"
))
==
0
)
{
(
*
mountflags
)
|=
MS_NOATIME
;
(
*
mountflags
)
|=
MS_NOATIME
;
}
else
if
(
strncmp
(
targetStr
,
"wait"
,
strlen
(
"wait"
))
==
0
)
{
}
else
if
(
strncmp
(
targetStr
,
"wait"
,
strlen
(
"wait"
))
==
0
)
{
WaitForFile
(
source
);
WaitForFile
(
source
,
WAIT_MAX_COUNT
);
}
else
{
}
else
{
return
0
;
return
0
;
}
}
...
...
services/src/init_reboot.c
浏览文件 @
754d3970
...
@@ -80,7 +80,7 @@ static int GetMountStatusForMountPoint(const char *mountPoint)
...
@@ -80,7 +80,7 @@ static int GetMountStatusForMountPoint(const char *mountPoint)
const
char
*
mountFile
=
"/proc/mounts"
;
const
char
*
mountFile
=
"/proc/mounts"
;
FILE
*
fp
=
fopen
(
mountFile
,
"r"
);
FILE
*
fp
=
fopen
(
mountFile
,
"r"
);
if
(
fp
==
NULL
)
{
if
(
fp
==
NULL
)
{
INIT_LOGE
(
"
[init]
DoReboot %s can't open.
\n
"
,
mountPoint
);
INIT_LOGE
(
"DoReboot %s can't open.
\n
"
,
mountPoint
);
return
1
;
return
1
;
}
}
...
@@ -103,24 +103,32 @@ static int GetMountStatusForMountPoint(const char *mountPoint)
...
@@ -103,24 +103,32 @@ static int GetMountStatusForMountPoint(const char *mountPoint)
void
DoReboot
(
const
char
*
value
)
void
DoReboot
(
const
char
*
value
)
{
{
if
(
value
==
NULL
)
{
if
(
value
==
NULL
)
{
INIT_LOGE
(
"
[init]
DoReboot value = NULL
\n
"
);
INIT_LOGE
(
"DoReboot value = NULL
\n
"
);
return
;
return
;
}
}
INIT_LOGI
(
"
[init]
DoReboot value = %s
\n
"
,
value
);
INIT_LOGI
(
"DoReboot value = %s
\n
"
,
value
);
if
(
strlen
(
value
)
>
MAX_VALUE_LENGTH
)
{
if
(
strlen
(
value
)
>
MAX_VALUE_LENGTH
)
{
INIT_LOGE
(
"
[init]
DoReboot reboot value error, value = %s.
\n
"
,
value
);
INIT_LOGE
(
"DoReboot reboot value error, value = %s.
\n
"
,
value
);
return
;
return
;
}
}
const
char
*
valueData
=
NULL
;
const
char
*
valueData
=
NULL
;
if
(
strncmp
(
value
,
"reboot,"
,
strlen
(
"reboot,"
))
!=
0
)
{
if
(
strncmp
(
value
,
"reboot,"
,
strlen
(
"reboot,"
))
!=
0
)
{
INIT_LOGE
(
"
[init]
DoReboot reboot value = %s, must started with reboot ,error.
\n
"
,
value
);
INIT_LOGE
(
"DoReboot reboot value = %s, must started with reboot ,error.
\n
"
,
value
);
return
;
return
;
}
else
{
}
else
{
valueData
=
value
+
strlen
(
"reboot,"
);
valueData
=
value
+
strlen
(
"reboot,"
);
}
}
if
(
strncmp
(
valueData
,
"shutdown"
,
strlen
(
"shutdown"
))
!=
0
&&
strncmp
(
valueData
,
"updater:"
,
strlen
(
"updater:"
))
!=
0
&&
strncmp
(
valueData
,
"updater"
,
strlen
(
"updater"
))
!=
0
&&
strncmp
(
valueData
,
"NoArgument"
,
strlen
(
"NoArgument"
))
!=
0
)
{
INIT_LOGE
(
"DoReboot value = %s, parameters error.
\n
"
,
value
);
return
;
}
StopAllServicesBeforeReboot
();
if
(
GetMountStatusForMountPoint
(
"/vendor"
))
{
if
(
GetMountStatusForMountPoint
(
"/vendor"
))
{
if
(
umount
(
"/vendor"
)
!=
0
)
{
if
(
umount
(
"/vendor"
)
!=
0
)
{
INIT_LOGE
(
"DoReboot umount vendor failed! errno = %d.
\n
"
,
errno
);
INIT_LOGE
(
"DoReboot umount vendor failed! errno = %d.
\n
"
,
errno
);
...
@@ -131,7 +139,6 @@ void DoReboot(const char *value)
...
@@ -131,7 +139,6 @@ void DoReboot(const char *value)
INIT_LOGE
(
"DoReboot umount data failed! errno = %d.
\n
"
,
errno
);
INIT_LOGE
(
"DoReboot umount data failed! errno = %d.
\n
"
,
errno
);
}
}
}
}
StopAllServicesBeforeReboot
();
// "shutdown"
// "shutdown"
if
(
strncmp
(
valueData
,
"shutdown"
,
strlen
(
"shutdown"
))
==
0
)
{
if
(
strncmp
(
valueData
,
"shutdown"
,
strlen
(
"shutdown"
))
==
0
)
{
int
ret
=
reboot
(
RB_POWER_OFF
);
int
ret
=
reboot
(
RB_POWER_OFF
);
...
@@ -145,7 +152,7 @@ void DoReboot(const char *value)
...
@@ -145,7 +152,7 @@ void DoReboot(const char *value)
struct
RBMiscUpdateMessage
msg
;
struct
RBMiscUpdateMessage
msg
;
bool
ret
=
RBMiscReadUpdaterMessage
(
miscFile
,
&
msg
);
bool
ret
=
RBMiscReadUpdaterMessage
(
miscFile
,
&
msg
);
if
(
!
ret
)
{
if
(
!
ret
)
{
INIT_LOGE
(
"
[init]
DoReboot RBMiscReadUpdaterMessage error.
\n
"
);
INIT_LOGE
(
"DoReboot RBMiscReadUpdaterMessage error.
\n
"
);
return
;
return
;
}
}
const
int
commandSize
=
12
;
const
int
commandSize
=
12
;
...
@@ -155,13 +162,13 @@ void DoReboot(const char *value)
...
@@ -155,13 +162,13 @@ void DoReboot(const char *value)
if
(
strlen
(
valueData
)
>
strlen
(
"updater:"
)
&&
strncmp
(
valueData
,
"updater:"
,
strlen
(
"updater:"
))
==
0
)
{
if
(
strlen
(
valueData
)
>
strlen
(
"updater:"
)
&&
strncmp
(
valueData
,
"updater:"
,
strlen
(
"updater:"
))
==
0
)
{
const
char
*
p
=
valueData
+
strlen
(
"updater:"
);
const
char
*
p
=
valueData
+
strlen
(
"updater:"
);
if
(
snprintf
(
msg
.
update
,
MAX_UPDATE_SIZE
,
"%s"
,
p
)
>
MAX_UPDATE_SIZE
)
{
if
(
snprintf
(
msg
.
update
,
MAX_UPDATE_SIZE
,
"%s"
,
p
)
>
MAX_UPDATE_SIZE
)
{
INIT_LOGE
(
"
[init]
DoReboot updater: RBMiscWriteUpdaterMessage error
\n
"
);
INIT_LOGE
(
"DoReboot updater: RBMiscWriteUpdaterMessage error
\n
"
);
return
;
return
;
}
}
msg
.
update
[
MAX_UPDATE_SIZE
-
1
]
=
0
;
msg
.
update
[
MAX_UPDATE_SIZE
-
1
]
=
0
;
ret
=
RBMiscWriteUpdaterMessage
(
miscFile
,
&
msg
);
ret
=
RBMiscWriteUpdaterMessage
(
miscFile
,
&
msg
);
if
(
true
!=
ret
)
{
if
(
true
!=
ret
)
{
INIT_LOGE
(
"
[init]
DoReboot updater: RBMiscWriteUpdaterMessage error
\n
"
);
INIT_LOGE
(
"DoReboot updater: RBMiscWriteUpdaterMessage error
\n
"
);
return
;
return
;
}
}
ret
=
reboot
(
RB_AUTOBOOT
);
ret
=
reboot
(
RB_AUTOBOOT
);
...
@@ -173,7 +180,7 @@ void DoReboot(const char *value)
...
@@ -173,7 +180,7 @@ void DoReboot(const char *value)
if
(
strlen
(
valueData
)
==
strlen
(
"updater"
)
&&
strncmp
(
valueData
,
"updater"
,
strlen
(
"updater"
))
==
0
)
{
if
(
strlen
(
valueData
)
==
strlen
(
"updater"
)
&&
strncmp
(
valueData
,
"updater"
,
strlen
(
"updater"
))
==
0
)
{
ret
=
RBMiscWriteUpdaterMessage
(
miscFile
,
&
msg
);
ret
=
RBMiscWriteUpdaterMessage
(
miscFile
,
&
msg
);
if
(
true
!=
ret
)
{
if
(
true
!=
ret
)
{
INIT_LOGE
(
"
[init]
DoReboot updater RBMiscWriteUpdaterMessage error
\n
"
);
INIT_LOGE
(
"DoReboot updater RBMiscWriteUpdaterMessage error
\n
"
);
return
;
return
;
}
}
ret
=
reboot
(
RB_AUTOBOOT
);
ret
=
reboot
(
RB_AUTOBOOT
);
...
...
services/src/init_service.c
浏览文件 @
754d3970
...
@@ -15,10 +15,16 @@
...
@@ -15,10 +15,16 @@
#include "init_service.h"
#include "init_service.h"
#include <bits/ioctl.h>
#include <errno.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <signal.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#ifdef __MUSL__
#include <stropts.h>
#endif
#include <sys/param.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include <time.h>
#include <time.h>
...
@@ -29,9 +35,14 @@
...
@@ -29,9 +35,14 @@
#include "init_log.h"
#include "init_log.h"
#include "init_perms.h"
#include "init_perms.h"
#include "init_service_socket.h"
#include "init_service_socket.h"
#include "init_utils.h"
#define CAP_NUM 2
#define CAP_NUM 2
#define WAIT_MAX_COUNT 10
#ifndef TIOCSCTTY
#define TIOCSCTTY 0x540E
#endif
// 240 seconds, 4 minutes
// 240 seconds, 4 minutes
static
const
int
CRASH_TIME_LIMIT
=
240
;
static
const
int
CRASH_TIME_LIMIT
=
240
;
// maximum number of crashes within time CRASH_TIME_LIMIT for one service
// maximum number of crashes within time CRASH_TIME_LIMIT for one service
...
@@ -110,6 +121,23 @@ static int SetPerms(const Service *service)
...
@@ -110,6 +121,23 @@ static int SetPerms(const Service *service)
return
SERVICE_SUCCESS
;
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
)
int
ServiceStart
(
Service
*
service
)
{
{
if
(
service
==
NULL
)
{
if
(
service
==
NULL
)
{
...
@@ -141,6 +169,9 @@ int ServiceStart(Service *service)
...
@@ -141,6 +169,9 @@ int ServiceStart(Service *service)
_exit
(
0x7f
);
// 0x7f: user specified
_exit
(
0x7f
);
// 0x7f: user specified
}
}
}
}
if
(
service
->
attribute
&
SERVICE_ATTR_CONSOLE
)
{
OpenConsole
();
}
// permissions
// permissions
if
(
SetPerms
(
service
)
!=
SERVICE_SUCCESS
)
{
if
(
SetPerms
(
service
)
!=
SERVICE_SUCCESS
)
{
INIT_LOGE
(
"service %s exit! set perms failed! err %d.
\n
"
,
service
->
name
,
errno
);
INIT_LOGE
(
"service %s exit! set perms failed! err %d.
\n
"
,
service
->
name
,
errno
);
...
...
services/src/init_service_manager.c
浏览文件 @
754d3970
...
@@ -348,8 +348,9 @@ static int GetServiceNumber(const cJSON* curArrItem, Service* curServ, const cha
...
@@ -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
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
,
DISABLED_STR_IN_CFG
,
strlen
(
DISABLED_STR_IN_CFG
))
==
0
||
strncmp
(
targetField
,
ONCE_STR_IN_CFG
,
strlen
(
ONCE_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
))
{
||
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
,
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
))
{
if
(
!
cJSON_IsNumber
(
filedJ
))
{
...
@@ -384,6 +385,11 @@ static int GetServiceNumber(const cJSON* curArrItem, Service* curServ, const cha
...
@@ -384,6 +385,11 @@ static int GetServiceNumber(const cJSON* curArrItem, Service* curServ, const cha
if
(
value
==
1
)
{
if
(
value
==
1
)
{
curServ
->
attribute
|=
SERVICE_ATTR_DISABLED
;
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
{
}
else
{
INIT_LOGE
(
"GetServiceNumber, item = %s, not expected, error.
\n
"
,
targetField
);
INIT_LOGE
(
"GetServiceNumber, item = %s, not expected, error.
\n
"
,
targetField
);
return
SERVICE_FAILURE
;
return
SERVICE_FAILURE
;
...
@@ -574,7 +580,7 @@ static int GetServiceOnRestart(const cJSON* curArrItem, Service* curServ)
...
@@ -574,7 +580,7 @@ static int GetServiceOnRestart(const cJSON* curArrItem, Service* curServ)
static
int
CheckServiceKeyName
(
const
cJSON
*
curService
)
static
int
CheckServiceKeyName
(
const
cJSON
*
curService
)
{
{
char
*
cfgServiceKeyList
[]
=
{
"name"
,
"path"
,
"uid"
,
"gid"
,
"once"
,
char
*
cfgServiceKeyList
[]
=
{
"name"
,
"path"
,
"uid"
,
"gid"
,
"once"
,
"importance"
,
"caps"
,
"disabled"
,
"writepid"
,
"critical"
,
"socket"
,
"importance"
,
"caps"
,
"disabled"
,
"writepid"
,
"critical"
,
"socket"
,
"console"
};
};
if
(
curService
==
NULL
)
{
if
(
curService
==
NULL
)
{
return
SERVICE_FAILURE
;
return
SERVICE_FAILURE
;
...
@@ -645,9 +651,10 @@ void ParseAllServices(const cJSON* fileRoot)
...
@@ -645,9 +651,10 @@ void ParseAllServices(const cJSON* fileRoot)
int
ret6
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
IMPORTANT_STR_IN_CFG
);
int
ret6
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
IMPORTANT_STR_IN_CFG
);
int
ret7
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
CRITICAL_STR_IN_CFG
);
// critical
int
ret7
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
CRITICAL_STR_IN_CFG
);
// critical
int
ret8
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
DISABLED_STR_IN_CFG
);
// disabled
int
ret8
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
DISABLED_STR_IN_CFG
);
// disabled
int
ret9
=
GetWritepidStrings
(
curItem
,
&
tmp
[
i
]);
// writepid
int
ret9
=
GetServiceNumber
(
curItem
,
&
tmp
[
i
],
CONSOLE_STR_IN_CFG
);
// console
int
reta
=
GetServiceCaps
(
curItem
,
&
tmp
[
i
]);
int
reta
=
GetWritepidStrings
(
curItem
,
&
tmp
[
i
]);
// writepid
int
retAll
=
ret1
|
ret2
|
ret3
|
ret4
|
ret5
|
ret6
|
ret7
|
ret8
|
ret9
|
reta
;
int
retb
=
GetServiceCaps
(
curItem
,
&
tmp
[
i
]);
int
retAll
=
ret1
|
ret2
|
ret3
|
ret4
|
ret5
|
ret6
|
ret7
|
ret8
|
ret9
|
reta
|
retb
;
if
(
retAll
!=
SERVICE_SUCCESS
)
{
if
(
retAll
!=
SERVICE_SUCCESS
)
{
// release resources if it fails
// release resources if it fails
ReleaseServiceMem
(
&
tmp
[
i
]);
ReleaseServiceMem
(
&
tmp
[
i
]);
...
...
services/src/init_utils.c
浏览文件 @
754d3970
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
#include "init_utils.h"
#include "init_utils.h"
#include "securec.h"
#include "securec.h"
#define WAIT_MAX_COUNT 10
#define MAX_BUF_SIZE 1024
#define MAX_BUF_SIZE 1024
#ifdef STARTUP_UT
#ifdef STARTUP_UT
#define LOG_FILE_NAME "/media/sf_ubuntu/test/log.txt"
#define LOG_FILE_NAME "/media/sf_ubuntu/test/log.txt"
...
@@ -43,6 +44,7 @@
...
@@ -43,6 +44,7 @@
#define MAX_BUFFER 256
#define MAX_BUFFER 256
#define MAX_EACH_CMD_LENGTH 30
#define MAX_EACH_CMD_LENGTH 30
#define MAX_JSON_FILE_LEN 102400 // max init.cfg size 100KB
#define MAX_JSON_FILE_LEN 102400 // max init.cfg size 100KB
#define CONVERT_MICROSEC_TO_SEC(x) ((x) / 1000 / 1000.0)
struct
CmdArgs
*
GetCmd
(
const
char
*
cmdContent
,
const
char
*
delim
)
struct
CmdArgs
*
GetCmd
(
const
char
*
cmdContent
,
const
char
*
delim
)
{
{
...
@@ -177,3 +179,23 @@ int SplitString(char *srcPtr, char **dstPtr, int maxNum)
...
@@ -177,3 +179,23 @@ int SplitString(char *srcPtr, char **dstPtr, int maxNum)
}
}
return
num
;
return
num
;
}
}
void
WaitForFile
(
const
char
*
source
,
unsigned
int
maxCount
)
{
if
(
maxCount
>
WAIT_MAX_COUNT
)
{
INIT_LOGE
(
"WaitForFile max time is 5s"
);
maxCount
=
WAIT_MAX_COUNT
;
}
struct
stat
sourceInfo
;
unsigned
int
waitTime
=
500000
;
unsigned
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 %f.
\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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录