mirror of
https://gitee.com/openharmony/startup_init
synced 2025-02-25 23:15:38 +00:00
Bugfix: console配置支持使用/dev/kmsg
console配置支持使用/dev/kmsg: 0: 进程的stdio重定向到/dev/null 1: 进程的stdio重定向到/dev/console 2: 进程的stdio重定向到/dev/kmsg(新增) Signed-off-by: handyohos <zhangxiaotian@huawei.com> Change-Id: I758b4eb1c101e61166b410233903603ffce9dd5b
This commit is contained in:
parent
2a6bca812d
commit
b92c0acbb4
@ -79,6 +79,7 @@ int InUpdaterMode(void);
|
||||
int StringReplaceChr(char *strl, char oldChr, char newChr);
|
||||
|
||||
int OpenConsole(void);
|
||||
int OpenKmsg(void);
|
||||
void TrimTail(char *str, char c);
|
||||
char *TrimHead(char *str, char c);
|
||||
|
||||
|
@ -53,6 +53,7 @@ extern "C" {
|
||||
|
||||
#define SERVICE_ATTR_NOTIFY_STATE 0x1000 // service notify state
|
||||
#define SERVICE_ATTR_MODULE_UPDATE 0x2000 // module update
|
||||
#define SERVICE_ATTR_KMSG 0x4000 // kmsg
|
||||
|
||||
#define MAX_SERVICE_NAME 32
|
||||
#define MAX_APL_NAME 32
|
||||
|
@ -362,6 +362,9 @@ static int InitServiceProperties(Service *service, const ServiceArgs *pathArgs)
|
||||
return INIT_ECONSOLE,
|
||||
"Service error %d %s, failed to open console.", errno, service->name);
|
||||
}
|
||||
if ((service->attribute & SERVICE_ATTR_KMSG)) {
|
||||
OpenKmsg();
|
||||
}
|
||||
|
||||
INIT_ERROR_CHECK(PublishHoldFds(service) == 0,
|
||||
service->lastErrno = INIT_EHOLDER;
|
||||
|
@ -841,6 +841,19 @@ static void ParseOneServiceArgs(const cJSON *curItem, Service *service)
|
||||
(void)GetCpuArgs(curItem, CPU_CORE_STR_IN_CFG, service);
|
||||
}
|
||||
|
||||
static int SetConsoleValue(Service *service, const char *attrName, int value, int flag)
|
||||
{
|
||||
UNUSED(attrName);
|
||||
UNUSED(flag);
|
||||
INIT_ERROR_CHECK(service != NULL, return SERVICE_FAILURE, "Set service attr failed! null ptr.");
|
||||
if (value == 1) {
|
||||
service->attribute |= SERVICE_ATTR_CONSOLE;
|
||||
} if (value == 2) {
|
||||
service->attribute |= SERVICE_ATTR_KMSG;
|
||||
}
|
||||
return SERVICE_SUCCESS;
|
||||
}
|
||||
|
||||
int ParseOneService(const cJSON *curItem, Service *service)
|
||||
{
|
||||
INIT_CHECK_RETURN_VALUE(curItem != NULL && service != NULL, SERVICE_FAILURE);
|
||||
@ -866,7 +879,7 @@ int ParseOneService(const cJSON *curItem, Service *service)
|
||||
INIT_ERROR_CHECK(ret == 0, return SERVICE_FAILURE, "Failed to get critical flag for service %s", service->name);
|
||||
ret = GetServiceAttr(curItem, service, DISABLED_STR_IN_CFG, SERVICE_ATTR_DISABLED, NULL);
|
||||
INIT_ERROR_CHECK(ret == 0, return SERVICE_FAILURE, "Failed to get disabled flag for service %s", service->name);
|
||||
ret = GetServiceAttr(curItem, service, CONSOLE_STR_IN_CFG, SERVICE_ATTR_CONSOLE, NULL);
|
||||
ret = GetServiceAttr(curItem, service, CONSOLE_STR_IN_CFG, SERVICE_ATTR_CONSOLE, SetConsoleValue);
|
||||
INIT_ERROR_CHECK(ret == 0, return SERVICE_FAILURE, "Failed to get console for service %s", service->name);
|
||||
ret = GetServiceAttr(curItem, service, "notify-state", SERVICE_ATTR_NOTIFY_STATE, NULL);
|
||||
INIT_ERROR_CHECK(ret == 0, return SERVICE_FAILURE, "Failed to get notify-state for service %s", service->name);
|
||||
|
@ -593,22 +593,36 @@ static void RedirectStdio(int fd)
|
||||
}
|
||||
#endif
|
||||
|
||||
int OpenConsole(void)
|
||||
{
|
||||
#ifndef __LITEOS_M__
|
||||
static int OpenStdioDevice(const char *dev)
|
||||
{
|
||||
setsid();
|
||||
WaitForFile("/dev/console", WAIT_MAX_SECOND);
|
||||
int fd = open("/dev/console", O_RDWR);
|
||||
WaitForFile(dev, WAIT_MAX_SECOND);
|
||||
int fd = open(dev, O_RDWR);
|
||||
if (fd >= 0) {
|
||||
ioctl(fd, TIOCSCTTY, 0);
|
||||
RedirectStdio(fd);
|
||||
close(fd);
|
||||
if (fd > 2) {
|
||||
close(fd);
|
||||
}
|
||||
} else {
|
||||
return errno;
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int OpenConsole(void)
|
||||
{
|
||||
#ifndef __LITEOS_M__
|
||||
return OpenStdioDevice("/dev/console");
|
||||
#endif
|
||||
}
|
||||
|
||||
int OpenKmsg(void)
|
||||
{
|
||||
#ifndef __LITEOS_M__
|
||||
return OpenStdioDevice("/dev/kmsg");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user