本文介绍如何使用应用@ohos.systemParameterEnhance (系统参数)(系统接口)
来控制设备硬件,可以通过它在系统中执行一段shell命令,从而实现控制设备的效果。接下来以一个实际的样例来演示如何通过它来控制设备以太网接口
开源地址:https://gitee.com/from-north-to-north/ohos.systemParameterEnhance
开发环境
- DAYU200 rk3568开发板
- OpenHarmony 4.1r
- API 10 (full sdk)
- DevEco Studio 4.1 Release
1.应用开发部分
1.首先安装full sdk
- 安装full sdk教程:https://ost.51cto.com/posts/26752
2.修改full_sdk/toolchains/lib/UnsgnedDebugProfileTemplate.json文件
apl
的值从normal
改为system_basic
app-feature
值的由hos_normal_app
改为hos_system_app
3.新建一个OpenHarmony应用工程,调用如下方法,然后正常自动签名安装。
import systemparameter from '@ohos.systemParameterEnhance';
Text("关闭eth0以太网接口")
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(()=>{
try {
systemparameter.setSync("sys.ifconfig.eth0", "down");
}catch(e){
console.log("set unexpected error: " + e);
}
})
Text("开启eth0以太网接口")
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(()=>{
try {
systemparameter.setSync("sys.ifconfig.eth0", "up");
}catch(e){
console.log("set unexpected error: " + e);
}
})
4.然后获取该hap的证书指纹,进行应用特权配置。
hdc shell "bm dump -n 应用的bundle_name | grep finger"
5.配置应用特权。提取当前开发板中的特权配置文件install_list_capability.json,文件位于/etc/app/中。
hdc file recv /etc/app/install_list_capability.json D:\
在install_list_capability.json中添加 应用的配置信息
将特权配置文件install_list_capability.json推送回系统中,覆盖系统配置。然后
重启系统
使得系统配置生效。
hdc shell "mount -o remount,rw /"
hdc file send d:\install_list_capability.json /etc/app/install_list_capability.json
hdc shell reboot
系统开发部分
1.新建init services如下,放到开发板/system/etc/init下
{
"jobs" : [{
"name" : "param:sys.ifconfig.eth0=up",
"condition" : "sys.ifconfig.eth0=up",
"cmds" : [
"start if_eth0_up"
]
}, {
"name" : "param:sys.ifconfig.eth0=down",
"condition" : "sys.ifconfig.eth0=down",
"cmds" : [
"start if_eth0_down"
]
}
],
"services" : [{
"name" : "if_eth0_up",
"start-mode" : "condition",
"path" : ["/system/bin/ifconfig", "eth0", "up"],
"disabled" : 1,
"sandbox" : 0,
"uid" : "root",
"gid" : ["shell"],
"once" : 1,
"secon" : "u:object_r:sh_exec:s0"
},
{
"name" : "if_eth0_down",
"start-mode" : "condition",
"path" : ["/system/bin/ifconfig", "eth0", "down"],
"disabled" : 1,
"sandbox" : 0,
"uid" : "root",
"gid" : ["shell"],
"once" : 1,
"secon" : "u:object_r:sh_exec:s0"
}
]
}
hdc shell "mount -o remount,rw /"
hdc file send a.cfg /system/etc/init
hdc shell reboot
2.关闭selinux
- 默认DAC规则只允许三方应用对参数具有get, watch 的权限,因此三方应用若需要set权限需要重新设置DAC规则。 此外, 三方应用的selinux权限默认是未设置的,因此需要参照mac访问控制权限设置进行设置。如果需要设置请参考:https://docs.openharmony.cn/pages/v4.1/zh-cn/device-dev/subsystems/subsys-boot-init-sysparam.md#dac%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%9D%83%E9%99%90%E8%AE%BE%E7%BD%AE
- 此处我们选择关闭selinux来规避这个问题
临时关闭可进入shell使用如下命令:
hdc shell setenforce 0
永久性生效,执行以下命令:
hdc shell mount -o rw,remount /
hdc shell "sed -i 's/enforcing/permissive/g' /system/etc/selinux/config"
hdc shell "cat /system/etc/selinux/config |grep SELINUX="
hdc shell reboot
# 或者修改源码
1、base/security/selinux_adapter/selinux.gni里面把selinux_enforce改为false
2、vendor/hihope/rk3568/config.json里面把build_selinux改为false
观察运行效果
在终端执行ifconfig命令来观察以太网接口是否被关闭
拓展
1.如果需要执行/vendor/bin下面的bin文件,cfg文件需要放置在/vendor/etc/init下。
2.可以操作接口执行一下shell命令来控制dayu200的led灯
参考链接
1.https://laval.csdn.net/64b34a863a5d4a7c4342eade.html
2.https://forums.openharmony.cn/forum.php?mod=viewthread&tid=2109
3.https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-basic-services-kit/js-apis-system-parameterEnhance-sys.md#systemparametergetsync
4.https://forums.openharmony.cn/forum.php?mod=viewthread&tid=2108