META实现执行shell命令功能

META实现执行Shell命令功能

  1. 背景描述

TPStester工具datacheck脚本需要获取手机内存等信息,通过发送shell命令获得。

  1. 原理实现

TPStester工具发送FT_CUSTOMER_CMD_SHELL命令和参数,软件识别该命令并解析参数。参数即为要执行的shell命令。调用popen(参数),最后将结果返回给工具端。

  1. 软件端实现

3.1 tran_projects\projectname\device\transsion\projectname\ProjectConfig_BSP.mk打开宏控

TRAN_FT_CUSTOM_SHELL = yes

3.2 vendor/mediatek/proprietary/hardware/meta/common/Android.mk增加宏控

ifeq ($(strip $(TRAN_FT_CUSTOM_SHELL)), yes)
LOCAL_CFLAGS += -DTRAN_FT_CUSTOM_SHELL
endif

3.3 修改vendor/mediatek/proprietary/hardware/meta/common/FtModule.cpp

添加头文件

#if defined(TRAN_FT_CUSTOM_SHELL)
#include <sys/wait.h>
#endif

在FtCustomerCmd结构体中

typedef enum FT_CUSTOMER_CMD {
//………………………//省略
#if defined(TRAN_FT_CUSTOM_SHELL)
FT_CUSTOMER_CMD_SHELL = 3,
#endif
FT_CUSTOMER_CMD_MAX,
} FtCustomerCmd;

void FtModCustomer::exec(Frame *pFrm)
//………………………//省略
switch(req->cmd.m_u1Dummy)
{
#if defined(TRAN_FT_CUSTOM_SHELL)
case FT_CUSTOMER_CMD_SHELL:
{
char out_buf[1025] = {0};
ft_cnf.result.m_u1Dummy = FT_CUSTOMER_SUCCESS;
if (peer_buff_size <= 0) {
ft_cnf.result.m_u1Dummy = FT_CUSTOMER_FAILED;
META_LOG(“Shell command is null string”);
break;
}
META_LOG(“input shell command is:%s”, peer_buf);
FILE *file = popen(peer_buf, “r”);
if (NULL == file) {
META_LOG(“popen failed:0x%x, in %s file at %d line \n”, file, FILE, LINE);
ft_cnf.result.m_u1Dummy = FT_CUSTOMER_FAILED;
break;
}
int size = fread(out_buf, sizeof(char), sizeof(out_buf) - 1, file);
if (ferror(file)) {
META_LOG(“fread failed:0x%x, in %s file at %d line \n”, file, FILE, LINE);
ft_cnf.result.m_u1Dummy = FT_CUSTOMER_FAILED;
break;
}
out_buf[size] = ‘\0’;
int status = pclose(file);
if (WIFEXITED(status)) {
if (WEXITSTATUS(status) != 0) {
META_LOG(“WEXITSTATUS: %i”, WEXITSTATUS(status));
ft_cnf.result.m_u1Dummy = FT_CUSTOMER_FAILED;
break;
}
} else if (WIFSIGNALED(status)) {
META_LOG(“WTERMSIG: %i”, WTERMSIG(status));
ft_cnf.result.m_u1Dummy = FT_CUSTOMER_FAILED;
break;
}
META_LOG(“out size:0x%x, out buf:%s\n”, strlen(out_buf), out_buf);
ft_cnf.status = META_SUCCESS;
WriteDataToPC(&ft_cnf, sizeof(ft_cnf), out_buf, strlen(out_buf));
break;
}
#endif
default:
//………………………//省略

  1. 配置权限

修改device/mediatek/sepolicy/custom/module/ft_module/meta_tst.te 添加:

========================

this file is for FtModule custom command

#Purpose for meta executing shell command
allow meta_tst proc_meminfo:file r_file_perms;
allow meta_tst sysfs_batteryinfo:dir { search };
allow meta_tst sysfs_batteryinfo:file r_file_perms;
allow meta_tst proc:file { open read };
allow meta_tst sysfs_mmcblk:file r_file_perms;
allow meta_tst sysfs_mmcblk:dir { search };
device\mediatek\common\BoardConfig.mk

BOARD_SEPOLICY_DIRS += device/mediatek/sepolicy/custom/module/ft_module

  1. 提交链接

http://192.168.10.48/#/c/tran_projects/+/13592/

http://192.168.10.48/#/c/MTK_CODE/alps/vendor/mediatek/proprietary/hardware/meta/+/13593/

http://192.168.10.48/#/c/MTK_CODE/alps/device/mediatek/sepolicy/custom/+/12003/

  1. 测试方式

运行TPStester,选择测试脚本PSN或者datacheck;

点击start开始测试,手机关机状态下USB连接电脑;

脚本执行shell命令的测试项PASS,如PSN的Read_Ram、Read_Rom、或者Datacheck脚本中的Read_Battery、Read_Battery_Voltage等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值