提交 c18a3a12 编写于 作者: C cheng_jinsong 提交者: Gitee

Merge branch 'master' of gitee.com:openharmony/startup_init into init_cov

Signed-off-by: Ncheng_jinsong <chengjinsong2@huawei.com>
......@@ -44,7 +44,8 @@ int32_t DeviceInfoProxy::GetUdid(std::string& result)
MessageParcel reply;
MessageOption option { MessageOption::TF_SYNC };
data.WriteInterfaceToken(DeviceInfoProxy::GetDescriptor());
int32_t ret = DeviceInfoSendRequest(static_cast<uint32_t> (DeviceInfoInterfaceCode::COMMAND_GET_UDID), data, reply, option);
int32_t ret = DeviceInfoSendRequest(static_cast<uint32_t> (DeviceInfoInterfaceCode::COMMAND_GET_UDID),
data, reply, option);
DINFO_LOGI("DeviceInfoProxy::GetUdid: %d", ret);
DINFO_CHECK(ret == ERR_NONE, return ret, "getUdid failed, error code is %d", ret);
result = Str16ToStr8(reply.ReadString16());
......@@ -58,7 +59,8 @@ int32_t DeviceInfoProxy::GetSerialID(std::string& result)
MessageOption option { MessageOption::TF_SYNC };
data.WriteInterfaceToken(DeviceInfoProxy::GetDescriptor());
int32_t ret = DeviceInfoSendRequest(static_cast<uint32_t> (DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID), data, reply, option);
int32_t ret = DeviceInfoSendRequest(static_cast<uint32_t> (DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID),
data, reply, option);
DINFO_LOGI("DeviceInfoProxy::GetSerialID: %d", ret);
DINFO_CHECK(ret == ERR_NONE, return ret, "GetSerial failed, error code is %d", ret);
result = Str16ToStr8(reply.ReadString16());
......
......@@ -16,12 +16,12 @@
#ifndef DEVICEINFOSERVICE_IPC_INTERFACE_CODE_H
#define DEVICEINFOSERVICE_IPC_INTERFACE_CODE_H
/*SAID: 3902 */
/* SAID: 3902 */
namespace OHOS {
namespace device_info {
enum class DeviceInfoInterfaceCode {
COMMAND_GET_UDID = 1,
COMMAND_GET_SERIAL_ID = 2,
COMMAND_GET_UDID = 1,
COMMAND_GET_SERIAL_ID = 2,
};
} // namespace device_info
} // namespace OHOS
......
......@@ -67,6 +67,7 @@ typedef enum InitLogLevel {
INIT_PUBLIC_API void StartupLog(InitLogLevel logLevel, uint32_t domain, const char *tag, const char *fmt, ...);
INIT_PUBLIC_API void SetInitLogLevel(InitLogLevel level);
INIT_PUBLIC_API InitLogLevel GetInitLogLevel(void);
#if defined(INIT_NO_LOG)
#define STARTUP_LOGV(domain, tag, fmt, ...)
......@@ -162,4 +163,4 @@ INIT_PUBLIC_API void SetInitLogLevel(InitLogLevel level);
}
#endif
#endif
#endif
\ No newline at end of file
#endif
......@@ -27,6 +27,7 @@ package_info:x:1032:
logd:x:1036:
shared_relro:x:1037:
audio:x:1041:
intell_voice:x:1042:
cameraserver:x:1047:
uiserver:x:1048:
servicectrl:x:1050:root,shell,system,samgr,hdf_devmgr,foundation,update
......
......@@ -29,7 +29,7 @@ const.build.product=default
const.product.hardwareversion=default
const.product.bootloader.version=bootloader
const.product.cpu.abilist=default
const.product.software.version=OpenHarmony 4.0.9.2
const.product.software.version=OpenHarmony 4.0.9.3
const.product.incremental.version=default
const.product.firstapiversion=1
const.product.build.type=default
......
......@@ -13,4 +13,4 @@
const.ohos.version.security_patch=2023/07/01
const.ohos.releasetype=Beta2
const.ohos.apiversion=10
const.ohos.fullname=OpenHarmony-4.0.9.2
const.ohos.fullname=OpenHarmony-4.0.9.3
......@@ -26,6 +26,7 @@ package_info:x:1032:1032:::/bin/false
logd:x:1036:1036:::/bin/false
shared_relro:x:1037:1037:::/bin/false
audio:x:1041:1041:::/bin/false
intell_voice:x:1042:1042:::/bin/false
cameraserver:x:1047:1047:::/bin/false
uiserver:x:1048:1048:::/bin/false
hiview:x:1201:1201:::/bin/false
......
......@@ -14,4 +14,4 @@
const.ohos.releasetype=Beta2
const.ohos.apiversion=10
const.ohos.version.security_patch=2023/07/01
const.ohos.fullname=OpenHarmony-4.0.9.2
\ No newline at end of file
const.ohos.fullname=OpenHarmony-4.0.9.3
\ No newline at end of file
......@@ -91,6 +91,19 @@ void RedirectStdio(int fd);
int GetServiceGroupIdByPid(pid_t pid, gid_t *gids, uint32_t gidSize);
int GetParameterFromCmdLine(const char *paramName, char *value, size_t valueLen);
/**
* @brief Get string index from a string array
*
* @param strArray string array
* Attension: last item in the array must be NULL, for example:
* const char *strArray[] = { "val1", "val2", NULL }
* @param target string to be matched
* @param ignoreCase 0 means exact match, others mean ignore case
* @return return 0 if succeed; other values if failed.
*/
int StrArrayGetIndex(const char *strArray[], const char *target, int ignoreCase);
#ifdef __cplusplus
#if __cplusplus
}
......
......@@ -105,7 +105,7 @@ void ReadConfig(void)
char buffer[32] = {0}; // 32 reason max leb
uint32_t len = sizeof(buffer);
SystemReadParam("ohos.boot.reboot_reason", buffer, &len);
INIT_LOGV("ohos.boot.reboot_reason %s", buffer);
INIT_LOGI("ohos.boot.reboot_reason %s", buffer);
if (strcmp(buffer, "poweroff_charge") == 0) {
ParseInitCfg(INIT_CONFIGURATION_FILE, NULL);
ReadFileInDir(OTHER_CHARGE_PATH, ".cfg", ParseInitCfg, NULL);
......
......@@ -93,7 +93,6 @@ static int FdHolderSockInit(void)
void SystemInit(void)
{
SignalInit();
#ifndef STARTUP_INIT_TEST
// Set up a session keyring that all processes will have access to.
KeyCtrlGetKeyringId(KEY_SPEC_SESSION_KEYRING, 1);
......@@ -413,6 +412,9 @@ void SystemConfig(void)
PluginExecCmdByName("loadSelinuxPolicy", "");
RecordInitBootEvent("init.prepare");
// after selinux loaded
SignalInit();
RecordInitBootEvent("init.ParseCfg");
LoadSpecialParam();
......
......@@ -143,4 +143,9 @@ INIT_LOCAL_API void EnableInitLog(InitLogLevel level)
{
g_logLevel = level;
SetInitCommLog(InitLog);
}
\ No newline at end of file
}
INIT_PUBLIC_API InitLogLevel GetInitLogLevel()
{
return g_logLevel;
}
......@@ -142,10 +142,10 @@ static int BootEventTraversal(ListNode *node, void *root)
{
static int start = 0;
BOOT_EVENT_PARAM_ITEM *item = (BOOT_EVENT_PARAM_ITEM *)node;
double forkTime = item->timestamp[BOOTEVENT_FORK].tv_sec * SECTOMSEC +
(double)item->timestamp[BOOTEVENT_FORK].tv_nsec / MSECTONSEC;
double readyTime = item->timestamp[BOOTEVENT_READY].tv_sec * SECTOMSEC +
(double)item->timestamp[BOOTEVENT_READY].tv_nsec / MSECTONSEC;
double forkTime = item->timestamp[BOOTEVENT_FORK].tv_sec * MSECTONSEC +
(double)item->timestamp[BOOTEVENT_FORK].tv_nsec / USTONSEC;
double readyTime = item->timestamp[BOOTEVENT_READY].tv_sec * MSECTONSEC +
(double)item->timestamp[BOOTEVENT_READY].tv_nsec / USTONSEC;
double durTime = readyTime - forkTime;
if (item->pid == 0) {
if (durTime < SAVEINITBOOTEVENTMSEC) {
......
......@@ -33,9 +33,9 @@ extern "C" {
#define BOOT_EVENT_TIMESTAMP_MAX_LEN 50
#define BOOT_EVENT_FILEPATH_MAX_LEN 60
#define BOOT_EVENT_FINISH 2
#define SECTOMSEC 1000000
#define MSECTONSEC 1000000
#define SECTONSEC 1000000000
#define MSECTONSEC 1000
#define USTONSEC 1000
#define SAVEINITBOOTEVENTMSEC 100000
#define BOOTEVENT_OUTPUT_PATH "/data/service/el0/startup/init/"
......
......@@ -55,6 +55,8 @@ ohos_prebuilt_seccomp("appspawn_filter") {
part_name = INIT_PART
subsystem_name = "startup"
include_dirs = [ "." ]
install_enable = true
install_images = [ "system" ]
}
......
......@@ -14,11 +14,26 @@
@returnValue
TRAP
@headFiles
"seccomp_policy_constants.h"
@mode
ONLY_CHECK_ARGS
@allowListWithArgs
setresuid: if arg0 >= 1000 && arg1 >= 1000 && arg2 >= 1000; return ALLOW; else return TRAP;arm64
setresgid: if arg0 >= 1000 && arg1 >= 1000 && arg2 >= 1000; return ALLOW; else return TRAP;arm64
setresuid32: if arg0 >= 1000 && arg1 >= 1000 && arg2 >= 1000; return ALLOW; else return TRAP;arm
setresgid32: if arg0 >= 1000 && arg1 >= 1000 && arg2 >= 1000; return ALLOW; else return TRAP;arm
\ No newline at end of file
setresuid: if arg0 >= APP_UID_START && arg1 >= APP_UID_START && arg2 >= APP_UID_START; return ALLOW; else return TRAP;arm64
setresgid: if arg0 >= APP_UID_START && arg1 >= APP_UID_START && arg2 >= APP_UID_START; return ALLOW; else return TRAP;arm64
setresuid32: if arg0 >= APP_UID_START && arg1 >= APP_UID_START && arg2 >= APP_UID_START; return ALLOW; else return TRAP;arm
setresgid32: if arg0 >= APP_UID_START && arg1 >= APP_UID_START && arg2 >= APP_UID_START; return ALLOW; else return TRAP;arm
setuid: if arg0 >= APP_UID_START; return ALLOW; else return TRAP;all
setgid: if arg0 >= APP_UID_START; return ALLOW; else return TRAP;all
setuid32: if arg0 >= APP_UID_START; return ALLOW; else return TRAP;arm
setgid32: if arg0 >= APP_UID_START; return ALLOW; else return TRAP;arm
setreuid: if arg0 >= APP_UID_START && arg1 >= APP_UID_START; return ALLOW; else return TRAP;all
setregid: if arg0 >= APP_UID_START && arg1 >= APP_UID_START; return ALLOW; else return TRAP;all
setreuid32: if arg0 >= APP_UID_START && arg1 >= APP_UID_START; return ALLOW; else return TRAP;arm
setregid32: if arg0 >= APP_UID_START && arg1 >= APP_UID_START; return ALLOW; else return TRAP;arm
setfsuid: if arg0 >= APP_UID_START; return ALLOW; else return TRAP;all
setfsgid: if arg0 >= APP_UID_START; return ALLOW; else return TRAP;all
setfsuid32: if arg0 >= APP_UID_START; return ALLOW; else return TRAP;arm
setfsgid32: if arg0 >= APP_UID_START; return ALLOW; else return TRAP;arm
\ No newline at end of file
......@@ -296,4 +296,5 @@ fstatat64;arm
sync_file_range2;arm
clock_gettime64;arm
cacheflush;arm
set_tls;arm
\ No newline at end of file
set_tls;arm
setitimer;all
\ No newline at end of file
......@@ -25,6 +25,8 @@ extern "C" {
#define START_UID_FOR_RENDER_PROCESS (1000000)
#define END_UID_FOR_RENDER_PROCESS (1099999)
#define APP_UID_START (10000)
#ifdef __cplusplus
#if __cplusplus
}
......
......@@ -59,9 +59,9 @@ static int TraversalEvent(ListNode *node, void *root)
len = sprintf_s(args->buffer + args->currLen, args->bufferLen - args->currLen, ",%u:%u,%u:%u;",
(uint32_t)item->timestamp[BOOTEVENT_FORK].tv_sec,
(uint32_t)(item->timestamp[BOOTEVENT_FORK].tv_nsec / MSECTONSEC),
(uint32_t)(item->timestamp[BOOTEVENT_FORK].tv_nsec / USTONSEC),
(uint32_t)item->timestamp[BOOTEVENT_READY].tv_sec,
(uint32_t)(item->timestamp[BOOTEVENT_READY].tv_nsec / MSECTONSEC));
(uint32_t)(item->timestamp[BOOTEVENT_READY].tv_nsec / USTONSEC));
PLUGIN_CHECK(len > 0 && (((uint32_t)len + args->currLen) < args->bufferLen), return -1,
"Failed to format service time %s", item->paramName);
args->currLen += (uint32_t)len;
......@@ -86,8 +86,8 @@ PLUGIN_STATIC void ReportBootEventComplete(ListNode *events)
StartupTimeEvent startupTime = {};
startupTime.event.type = STARTUP_TIME;
startupTime.totalTime = curr.tv_sec;
startupTime.totalTime = startupTime.totalTime * SECTOMSEC;
startupTime.totalTime += curr.tv_nsec / MSECTONSEC;
startupTime.totalTime = startupTime.totalTime * MSECTONSEC;
startupTime.totalTime += curr.tv_nsec / USTONSEC;
startupTime.detailTime = buffer;
char *reason = buffer + MAX_BUFFER_FOR_EVENT;
uint32_t size = PARAM_VALUE_LEN_MAX;
......@@ -100,7 +100,7 @@ PLUGIN_STATIC void ReportBootEventComplete(ListNode *events)
startupTime.firstStart = 0;
}
PLUGIN_LOGI("SysEventInit %u.%u detailTime len %u '%s'",
(uint32_t)curr.tv_sec, (uint32_t)(curr.tv_nsec / MSECTONSEC), args.currLen, startupTime.detailTime);
(uint32_t)curr.tv_sec, (uint32_t)(curr.tv_nsec / USTONSEC), args.currLen, startupTime.detailTime);
ReportSysEvent(&startupTime.event);
free(buffer);
}
......
......@@ -44,7 +44,7 @@ typedef struct {
int RegisterPersistParamOps(PersistParamOps *ops);
#ifndef STARTUP_INIT_TEST
#define PARAM_MUST_SAVE_PARAM_DIFF 10 // 10s
#define PARAM_MUST_SAVE_PARAM_DIFF 1 // 1s
#else
#define PARAM_MUST_SAVE_PARAM_DIFF 1
void TimerCallbackForSave(ParamTaskPtr timer, void *context);
......
......@@ -29,7 +29,8 @@ uint32_t WatcherManagerProxy::AddRemoteWatcher(uint32_t id, const sptr<IWatcher>
MessageParcel reply;
MessageOption option { MessageOption::TF_SYNC };
int32_t res = SendWatcherMsg(static_cast<uint32_t>(ParamWatcherInterfaceCode::ADD_REMOTE_AGENT), data, reply, option);
int32_t res = SendWatcherMsg(static_cast<uint32_t>(ParamWatcherInterfaceCode::ADD_REMOTE_AGENT),
data, reply, option);
WATCHER_CHECK(res == ERR_OK, return 0, "Transact error %d", res);
return reply.ReadUint32();
}
......@@ -41,7 +42,8 @@ int32_t WatcherManagerProxy::DelRemoteWatcher(uint32_t remoteWatcherId)
data.WriteUint32(remoteWatcherId);
MessageParcel reply;
MessageOption option { MessageOption::TF_SYNC };
int32_t res = SendWatcherMsg(static_cast<uint32_t>(ParamWatcherInterfaceCode::DEL_REMOTE_AGENT), data, reply, option);
int32_t res = SendWatcherMsg(static_cast<uint32_t>(ParamWatcherInterfaceCode::DEL_REMOTE_AGENT),
data, reply, option);
WATCHER_CHECK(res == ERR_OK, return ERR_FLATTEN_OBJECT, "Transact error");
return reply.ReadInt32();
}
......
......@@ -16,15 +16,15 @@
#ifndef PARAM_WATCHER_IPC_INTERFACE_CODE_H
#define PARAM_WATCHER_IPC_INTERFACE_CODE_H
/*SAID: 3901 */
/* SAID: 3901 */
namespace OHOS {
namespace init_param {
enum class ParamWatcherInterfaceCode {
ADD_WATCHER = 0,
DEL_WATCHER,
ADD_REMOTE_AGENT,
DEL_REMOTE_AGENT,
REFRESH_WATCHER
ADD_WATCHER = 0,
DEL_WATCHER,
ADD_REMOTE_AGENT,
DEL_REMOTE_AGENT,
REFRESH_WATCHER
};
} // namespace init_param
} // namespace OHOS
......
......@@ -91,45 +91,8 @@
"sandbox-flags" : [ "bind", "rec", "private" ]
}
],
"mount-bind-files" : [
{
"src-path" : "/vendor/lib/libcodec_component_manager_service_1.0.z.so",
"sandbox-path" : "/vendor/lib/libcodec_component_manager_service_1.0.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}, {
"src-path" : "/vendor/lib/libOMX_Core.z.so",
"sandbox-path" : "/vendor/lib/libOMX_Core.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}, {
"src-path" : "/vendor/lib/libomxvpu_dec.z.so",
"sandbox-path" : "/vendor/lib/libomxvpu_dec.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}, {
"src-path" : "/vendor/lib/libomxvpu_enc.z.so",
"sandbox-path" : "/vendor/lib/libomxvpu_enc.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}, {
"src-path" : "/vendor/lib/libOMX_Pluginhw.z.so",
"sandbox-path" : "/vendor/lib/libOMX_Pluginhw.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}, {
"src-path" : "/vendor/lib/libRkOMX_Resourcemanager.z.so",
"sandbox-path" : "/vendor/lib/libRkOMX_Resourcemanager.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}, {
"src-path" : "/vendor/lib/librockchip_vpu.z.so",
"sandbox-path" : "/vendor/lib/librockchip_vpu.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}, {
"src-path" : "/vendor/lib/librga.z.so",
"sandbox-path" : "/vendor/lib/librga.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}, {
"src-path" : "/vendor/lib/librockchip_mpp.z.so",
"sandbox-path" : "/vendor/lib/librockchip_mpp.z.so",
"sandbox-flags" : [ "bind", "rec", "private" ]
}
],
"mount-bind-files" : [{
}],
"symbol-links" : [{
"target-name" : "/system/lib",
"link-name" : "/lib"
......
......@@ -696,3 +696,28 @@ uint32_t IntervalTime(struct timespec *startTime, struct timespec *endTime)
}
return diff;
}
int StrArrayGetIndex(const char *strArray[], const char *target, int ignoreCase)
{
int i;
if ((target == NULL) || (target[0] == '\0')) {
return -1;
}
if (ignoreCase) {
for (i = 0; strArray[i] != NULL; i++) {
if (strcasecmp(strArray[i], target) == 0) {
return i;
}
}
return -1;
}
for (i = 0; strArray[i] != NULL; i++) {
if (strcmp(strArray[i], target) == 0) {
return i;
}
}
return -1;
}
......@@ -181,6 +181,7 @@ ohos_unittest("init_unittest") {
"init/utils_unittest.cpp",
"innerkits/innerkits_unittest.cpp",
"loopevent/loopevent_unittest.cpp",
"loopevent/loopserver_unittest.cpp",
"loopevent/loopsignal_unittest.cpp",
"modules/eng_unittest.cpp",
"modules/modules_unittest.cpp",
......
......@@ -126,7 +126,8 @@ HWTEST_F(DeviceInfoUnittest, DeviceInfoServiceInvalidTokenTest, TestSize.Level1)
MessageOption option;
g_tokenType = OHOS::Security::AccessToken::TOKEN_INVALID;
data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor());
deviceInfoService->OnRemoteRequest(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID), data, reply, option);
deviceInfoService->OnRemoteRequest
(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID), data, reply, option);
}
HWTEST_F(DeviceInfoUnittest, DeviceInfoServiceFailTest, TestSize.Level1)
......@@ -142,10 +143,14 @@ HWTEST_F(DeviceInfoUnittest, DeviceInfoServiceFailTest, TestSize.Level1)
// udid
data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor());
deviceInfoService->OnRemoteRequest(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID), data, reply, option);
deviceInfoService->OnRemoteRequest
(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID),
data, reply, option);
// serial
data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor());
deviceInfoService->OnRemoteRequest(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID), data, reply, option);
deviceInfoService->OnRemoteRequest
(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID),
data, reply, option);
}
HWTEST_F(DeviceInfoUnittest, DeviceInfoServiceTest, TestSize.Level1)
......@@ -159,13 +164,21 @@ HWTEST_F(DeviceInfoUnittest, DeviceInfoServiceTest, TestSize.Level1)
g_tokenType = OHOS::Security::AccessToken::TOKEN_HAP;
g_tokenVerifyResult = OHOS::Security::AccessToken::TypePermissionState::PERMISSION_GRANTED;
data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor());
deviceInfoService->OnRemoteRequest(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID), data, reply, option);
deviceInfoService->OnRemoteRequest
(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID),
data, reply, option);
data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor());
deviceInfoService->OnRemoteRequest(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID), data, reply, option);
deviceInfoService->OnRemoteRequest
(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID),
data, reply, option);
data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor());
deviceInfoService->OnRemoteRequest(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID) + 1, data, reply, option);
deviceInfoService->OnRemoteRequest
(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID) + 1,
data, reply, option);
deviceInfoService->OnRemoteRequest(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID) + 1, data, reply, option);
deviceInfoService->OnRemoteRequest
(static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID) + 1,
data, reply, option);
std::this_thread::sleep_for(std::chrono::seconds(3)); // wait sa unload 3s
deviceInfoService->GetUdid(result);
deviceInfoService->GetSerialID(result);
......
......@@ -63,8 +63,7 @@ static void DecodeMessage(const char *buffer, size_t nread, uint32_t &cmd)
return;
}
template<typename... Args>
static void SendMessage(const LoopHandle loopHandle, const TaskHandle taskHandle, const char *message, Args... args)
static void SendMessage(const LoopHandle loopHandle, const TaskHandle taskHandle, const char *message, ...)
{
uint32_t bufferSize = 1024; // 1024 buffer size
BufferHandle handle = LE_CreateBuffer(loopHandle, bufferSize);
......@@ -98,21 +97,21 @@ static void TestOnReceiveRequest(const TaskHandle task, const uint8_t *buffer, u
if (buffer == nullptr) {
return;
}
printf("Server receive message %s \n", static_cast<const char *>(buffer));
printf("Server receive message %s \n", reinterpret_cast<const char *>(buffer));
uint32_t cmd = 0;
DecodeMessage(static_cast<const char *>(buffer), nread, cmd);
SendMessage(g_loopServer_, task, static_cast<const char *>(buffer));
DecodeMessage(reinterpret_cast<const char *>(buffer), nread, cmd);
SendMessage(g_loopServer_, task, reinterpret_cast<const char *>(buffer));
}
static void TestClientOnReceiveRequest(const TaskHandle task, const uint8_t *buffer, uint32_t nread)
{
printf("Client receive message %s \n", static_cast<const char *>(buffer));
printf("Client receive message %s \n", reinterpret_cast<const char *>(buffer));
EXPECT_NE(buffer, nullptr);
if (buffer == nullptr) {
return;
}
uint32_t cmd = 0;
DecodeMessage(static_cast<const char *>(buffer), nread, cmd);
DecodeMessage(reinterpret_cast<const char *>(buffer), nread, cmd);
if (cmd == 5 || cmd == 2) { // 2 5 close server
LE_StopLoop(g_loopClient_);
}
......@@ -132,7 +131,7 @@ static void TestSendMessageComplete(const TaskHandle taskHandle, BufferHandle ha
uint32_t bufferSize = 1024; // 1024 buffer size
char *buffer = (char *)LE_GetBufferInfo(handle, nullptr, &bufferSize);
uint32_t cmd = 0;
DecodeMessage(static_cast<const char *>(buffer), bufferSize, cmd);
DecodeMessage(reinterpret_cast<const char *>(buffer), bufferSize, cmd);
if (cmd == 5) { // 5 close server
LE_StopLoop(g_loopServer_);
}
......
......@@ -104,8 +104,8 @@ HWTEST_F(SysEventUnitTest, SysEventTest_004, TestSize.Level1)
StartupTimeEvent startupTime = {};
startupTime.event.type = STARTUP_TIME;
startupTime.totalTime = curr.tv_sec;
startupTime.totalTime = startupTime.totalTime * SECTOMSEC;
startupTime.totalTime += curr.tv_nsec / MSECTONSEC;
startupTime.totalTime = startupTime.totalTime * MSECTONSEC;
startupTime.totalTime += curr.tv_nsec / USTONSEC;
startupTime.detailTime = const_cast<char *>("buffer");
startupTime.reason = const_cast<char *>("");
startupTime.firstStart = 1;
......@@ -121,8 +121,8 @@ HWTEST_F(SysEventUnitTest, SysEventTest_005, TestSize.Level1)
StartupTimeEvent startupTime = {};
startupTime.event.type = STARTUP_EVENT_MAX;
startupTime.totalTime = curr.tv_sec;
startupTime.totalTime = startupTime.totalTime * SECTOMSEC;
startupTime.totalTime += curr.tv_nsec / MSECTONSEC;
startupTime.totalTime = startupTime.totalTime * MSECTONSEC;
startupTime.totalTime += curr.tv_nsec / USTONSEC;
startupTime.detailTime = const_cast<char *>("buffer");
startupTime.reason = const_cast<char *>("");
startupTime.firstStart = 1;
......
......@@ -78,7 +78,8 @@ public:
bool ret = data.WriteRemoteObject(watcher->AsObject());
WATCHER_CHECK(ret, return 0, "Can not get remote");
data.WriteUint32(agentId);
watcherManager->OnRemoteRequest(static_cast<uint32_t>(ParamWatcherInterfaceCode::ADD_REMOTE_AGENT), data, reply, option);
watcherManager->OnRemoteRequest(
static_cast<uint32_t> (ParamWatcherInterfaceCode::ADD_REMOTE_AGENT), data, reply, option);
watcherId = reply.ReadUint32();
EXPECT_NE(watcherId, 0);
......@@ -101,7 +102,8 @@ public:
data.WriteInterfaceToken(IWatcherManager::GetDescriptor());
data.WriteUint32(watcherId);
watcherManager->OnRemoteRequest(static_cast<uint32_t>(ParamWatcherInterfaceCode::DEL_REMOTE_AGENT), data, reply, option);
watcherManager->OnRemoteRequest(
static_cast<uint32_t> (ParamWatcherInterfaceCode::DEL_REMOTE_AGENT), data, reply, option);
EXPECT_EQ(reply.ReadInt32(), 0);
EXPECT_EQ(watcherManager->GetRemoteWatcher(watcherId) == nullptr, 1);
return 0;
......@@ -118,7 +120,8 @@ public:
data.WriteInterfaceToken(IWatcherManager::GetDescriptor());
data.WriteString(keyPrefix);
data.WriteUint32(watcherId);
watcherManager->OnRemoteRequest(static_cast<uint32_t>(ParamWatcherInterfaceCode::ADD_WATCHER), data, reply, option);
watcherManager->OnRemoteRequest(
static_cast<uint32_t> (ParamWatcherInterfaceCode::ADD_WATCHER), data, reply, option);
EXPECT_EQ(reply.ReadInt32(), 0);
EXPECT_EQ(watcherManager->GetWatcherGroup(keyPrefix) != nullptr, 1);
return 0;
......@@ -135,7 +138,8 @@ public:
data.WriteInterfaceToken(IWatcherManager::GetDescriptor());
data.WriteString(keyPrefix);
data.WriteUint32(watcherId);
watcherManager->OnRemoteRequest(static_cast<uint32_t>(ParamWatcherInterfaceCode::REFRESH_WATCHER), data, reply, option);
watcherManager->OnRemoteRequest(
static_cast<uint32_t> (ParamWatcherInterfaceCode::REFRESH_WATCHER), data, reply, option);
EXPECT_EQ(reply.ReadInt32(), 0);
EXPECT_EQ(watcherManager->GetWatcherGroup(keyPrefix) != nullptr, 1);
return 0;
......@@ -151,7 +155,8 @@ public:
data.WriteInterfaceToken(IWatcherManager::GetDescriptor());
data.WriteString(keyPrefix);
data.WriteUint32(watcherId);
watcherManager->OnRemoteRequest(static_cast<uint32_t>(ParamWatcherInterfaceCode::DEL_WATCHER), data, reply, option);
watcherManager->OnRemoteRequest(
static_cast<uint32_t> (ParamWatcherInterfaceCode::DEL_WATCHER), data, reply, option);
EXPECT_EQ(reply.ReadInt32(), 0);
return 0;
}
......@@ -231,11 +236,13 @@ public:
data.WriteInterfaceToken(IWatcherManager::GetDescriptor());
data.WriteString(keyPrefix);
data.WriteUint32(0);
watcherManager->OnRemoteRequest(static_cast<uint32_t>(ParamWatcherInterfaceCode::REFRESH_WATCHER) + 1, data, reply, option);
watcherManager->OnRemoteRequest(
static_cast<uint32_t> (ParamWatcherInterfaceCode::REFRESH_WATCHER) + 1, data, reply, option);
data.WriteInterfaceToken(IWatcherManager::GetDescriptor());
data.WriteString(keyPrefix);
watcherManager->OnRemoteRequest(static_cast<uint32_t>(ParamWatcherInterfaceCode::REFRESH_WATCHER) + 1, data, reply, option);
watcherManager->OnRemoteRequest(
static_cast<uint32_t> (ParamWatcherInterfaceCode::REFRESH_WATCHER) + 1, data, reply, option);
return 0;
}
......
......@@ -79,3 +79,5 @@
/dev/ttyUSB* 0666 0 0
/dev/video* 0660 camera_host camera_host
/dev/btdev* 0660 dsoftbus dsoftbus
/dev/block/by-name/misc 0660 update update
/dev/block/by-name/bootctrl 0660 update update
......@@ -241,7 +241,23 @@ static void AddUevent(struct Uevent *uevent, const char *event, size_t len)
} else if (STARTSWITH(event, "DEVNUM=")) {
uevent->devNum = StringToInt(event + strlen("DEVNUM="), -1);
}
// Ignore other events
INIT_LOGV("got uevent message:\n"
"subsystem: %s\n"
"parition: %s:%d\n"
"action: %s\n"
"devpath: %s\n"
"devname: %s\n"
"devnode: %d:%d\n"
"id: %d:%d",
uevent->subsystem,
uevent->partitionName, uevent->partitionNum,
uevent->action,
uevent->syspath,
uevent->deviceName,
uevent->major, uevent->minor,
uevent->ug.uid, uevent->ug.gid);
}
void ParseUeventMessage(const char *buffer, ssize_t length, struct Uevent *uevent)
......@@ -295,21 +311,24 @@ static void DoTrigger(const char *ueventPath, int sockFd, char **devices, int nu
return;
}
INIT_LOGV("------------------------\n"
"\nTry to trigger \" %s \" now ...", ueventPath);
int fd = open(ueventPath, O_WRONLY | O_CLOEXEC);
if (fd < 0) {
INIT_LOGE("Open \" %s \" failed, err = %d", ueventPath, errno);
} else {
ssize_t n = write(fd, "add\n", WRITE_SIZE);
if (n < 0) {
INIT_LOGE("Write \" %s \" failed, err = %d", ueventPath, errno);
close(fd);
} else {
close(fd);
// uevent triggered, now handle it.
if (sockFd >= 0) {
ProcessUevent(sockFd, devices, num);
}
}
return;
}
ssize_t n = write(fd, "add\n", WRITE_SIZE);
close(fd);
if (n < 0) {
INIT_LOGE("Write \" %s \" failed, err = %d", ueventPath, errno);
return;
}
// uevent triggered, now handle it.
if (sockFd >= 0) {
ProcessUevent(sockFd, devices, num);
}
}
......
......@@ -81,6 +81,7 @@ static void CreateSymbolLinks(const char *deviceNode, char **symLinks)
}
errno = 0;
INIT_LOGI("symlink %s->%s", deviceNode, linkName);
int rc = symlink(deviceNode, linkName);
if (rc != 0) {
if (errno != EEXIST) {
......@@ -199,10 +200,12 @@ static int RemoveDeviceNode(const char *deviceNode, char **symLinks)
continue;
}
if (STRINGEQUAL(deviceNode, realPath)) {
INIT_LOGI("unlink %s->%s", linkName);
unlink(linkName);
}
}
}
INIT_LOGI("unlink %s->%s", deviceNode);
return unlink(deviceNode);
}
......
......@@ -15,6 +15,7 @@
#include <limits.h>
#include <poll.h>
#include <unistd.h>
#include <stdbool.h>
#include "ueventd.h"
#include "ueventd_read_cfg.h"
......@@ -47,11 +48,27 @@ static void PollUeventdSocketTimeout(int ueventSockFd, bool ondemand)
}
}
int main(int argc, char **argv)
static int UeventdRetrigger(void)
{
const char *ueventdConfigs[] = {"/etc/ueventd.config", "/vendor/etc/ueventd.config", NULL};
int i = 0;
while (ueventdConfigs[i] != NULL) {
ParseUeventdConfigFile(ueventdConfigs[i++]);
}
int ueventSockFd = UeventdSocketInit();
if (ueventSockFd < 0) {
INIT_LOGE("Failed to create uevent socket!");
return -1;
}
RetriggerUevent(ueventSockFd, NULL, 0); // Not require boot devices
return 0;
}
static int UeventdDaemon(int listen_only)
{
// start log
EnableInitLog(INIT_INFO);
char *ueventdConfigs[] = {"/etc/ueventd.config", "/vendor/etc/ueventd.config", NULL};
const char *ueventdConfigs[] = {"/etc/ueventd.config", "/vendor/etc/ueventd.config", NULL};
int i = 0;
while (ueventdConfigs[i] != NULL) {
ParseUeventdConfigFile(ueventdConfigs[i++]);
......@@ -67,7 +84,7 @@ int main(int argc, char **argv)
INIT_LOGE("Failed to create uevent socket!");
return -1;
}
if (access(UEVENTD_FLAG, F_OK)) {
if (!listen_only && access(UEVENTD_FLAG, F_OK)) {
INIT_LOGI("Ueventd started, trigger uevent");
RetriggerUevent(ueventSockFd, NULL, 0); // Not require boot devices
int fd = open(UEVENTD_FLAG, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
......@@ -84,3 +101,105 @@ int main(int argc, char **argv)
CloseUeventConfig();
return 0;
}
static int UeventdEarlyBoot(void)
{
int ueventSockFd = UeventdSocketInit();
if (ueventSockFd < 0) {
return -1;
}
char *devices[] = {
"/dev/block/vdb",
"/dev/block/vdc"
};
RetriggerUevent(ueventSockFd, devices, 2);
close(ueventSockFd);
return 0;
}
#define UEVENTD_MODE_DEAMON 0
#define UEVENTD_MODE_EARLY_BOOT 1
#define UEVENTD_MODE_RETRIGGER 2
#define UEVENTD_MODE_LISTEN 3
static void usage(const char *name)
{
printf("Usage: %s [OPTION]\n"
"Listening kernel uevent to create device node.\n"
"It will read configs from {/,/system,/chipset}/etc/ueventd.config.\n\n"
"The options may be used to set listening mode.\n"
" -d, --daemon working in deamon mode(default mode)\n"
" -b, --boot working in early booting mode, create required device nodes\n"
" -l, --listen listen in verbose mode\n"
" -r, --retrigger retrigger all uevents\n"
" -v, --verbose log level\n"
" -h, --help print this help info\n", name);
}
static void UeventdLogPrint(int logLevel, uint32_t domain, const char *tag, const char *fmt, va_list vargs)
{
if (logLevel < GetInitLogLevel()) {
return;
}
vprintf(fmt, vargs);
printf("\n");
}
int main(int argc, char *argv[])
{
int opt;
const char *config;
int daemon = UEVENTD_MODE_DEAMON;
while ((opt = getopt(argc, argv, "drblv:h")) != -1) {
switch (opt) {
case 'd':
daemon = UEVENTD_MODE_DEAMON;
break;
case 'r':
SetInitCommLog(UeventdLogPrint);
daemon = UEVENTD_MODE_RETRIGGER;
break;
case 'b':
SetInitCommLog(UeventdLogPrint);
daemon = UEVENTD_MODE_EARLY_BOOT;
break;
case 'v':
EnableInitLog(atoi(optarg));
SetInitCommLog(UeventdLogPrint);
break;
case 'l':
EnableInitLog(0);
SetInitCommLog(UeventdLogPrint);
daemon = UEVENTD_MODE_LISTEN;
break;
case 'h':
usage(argv[0]);
exit(0);
break;
default: /* '?' */
fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",
argv[0]);
exit(EXIT_FAILURE);
}
}
config = NULL;
if (optind >= argc) {
config = argv[optind];
}
if (daemon == UEVENTD_MODE_DEAMON) {
return UeventdDaemon(0);
} else if (daemon == UEVENTD_MODE_RETRIGGER) {
return UeventdRetrigger();
} else if (daemon == UEVENTD_MODE_LISTEN) {
return UeventdDaemon(1);
} else {
UeventdEarlyBoot();
}
return 0;
}
......@@ -42,7 +42,7 @@ typedef enum SECTION {
typedef int (*ParseConfigFunc)(char *);
typedef struct FunctionMapper {
char *name;
const char *name;
ParseConfigFunc func;
} FUNCTIONMAPPER;
......@@ -166,7 +166,7 @@ static SECTION GetSection(const char *section)
}
}
static FUNCTIONMAPPER funcMapper[3] = {
static const FUNCTIONMAPPER funcMapper[3] = {
{"device", ParseDeviceConfig},
{"sysfs", ParseSysfsConfig},
{"firmware", ParseFirmwareConfig}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册