summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRahul Dadhich <r.dadhich@samsung.com>2018-02-19 16:45:04 +0530
committerRahul Dadhich <r.dadhich@samsung.com>2018-02-20 15:09:09 +0530
commit79f89e67b04bbcb584703657ea92d9b18dd7d5be (patch)
tree10bf5aafd0b2f3b53a024929c6115fbc15cdbf63
parent0621916a4b7d8f515ad33f240fdf97e010159b25 (diff)
downloadqemu-79f89e67b04bbcb584703657ea92d9b18dd7d5be.tar.gz
qemu-79f89e67b04bbcb584703657ea92d9b18dd7d5be.tar.bz2
qemu-79f89e67b04bbcb584703657ea92d9b18dd7d5be.zip
Added support to install addon rpms
Change-Id: Ibf370b82caf5f0e3fefd3e4874e1db27fbbea6f4 Signed-off-by: Rahul Dadhich <r.dadhich@samsung.com>
-rw-r--r--tizen/src/ecs/ecs_msg_injector.c105
1 files changed, 102 insertions, 3 deletions
diff --git a/tizen/src/ecs/ecs_msg_injector.c b/tizen/src/ecs/ecs_msg_injector.c
index 7c1191823e..e5a0fdc5b2 100644
--- a/tizen/src/ecs/ecs_msg_injector.c
+++ b/tizen/src/ecs/ecs_msg_injector.c
@@ -355,7 +355,7 @@ void ecs_suspend_lock_state(int state)
msgproc_injector_req(NULL, &msg);
}
-static bool do_push_package(char *cmd)
+static bool do_execute_command(char *cmd)
{
char buf[MAX_PKGS_LIST];
FILE *fp = popen(cmd, "r");
@@ -423,7 +423,7 @@ static bool push_package(const char *data)
LOG_INFO("[pkgs] SDB push command: %s\n", cmd);
- if (do_push_package(cmd)) {
+ if (do_execute_command(cmd)) {
LOG_INFO("[pkgs] SDB push SUCCESS\n");
return true;
}
@@ -450,7 +450,7 @@ static bool push_package(const char *data)
#endif
while (index != MAX_SDB_TRIAL) {
- if (do_push_package(cmd)) {
+ if (do_execute_command(cmd)) {
LOG_INFO("[pkgs] SDB push SUCCESS.\n");
return true;
}
@@ -480,6 +480,94 @@ static void show_error_popup(char *data)
error_report("%s", fail_msg);
}
+static void set_read_write_mode(void)
+{
+#ifndef CONFIG_WIN32
+ const char *sdb_path = "../../../../../tools/sdb";
+#else
+ const char *sdb_path = "..\\..\\..\\..\\..\\tools\\sdb.exe";
+#endif
+ const char *bin_dir = get_bin_path();
+ char cmd[MAX_PKGS_LIST];
+ int ret = 0;
+
+ memset(cmd, 0, sizeof(cmd));
+#ifndef CONFIG_WIN32
+ ret = sprintf(cmd, "\"%s%s\" -s emulator-%d root on",
+#else
+ ret = sprintf(cmd, "cmd /S /C \"\"%s%s\" -s emulator-%d root on\"",
+#endif
+ bin_dir, sdb_path, get_vm_device_serial_number());
+ if (ret < 0) {
+ LOG_SEVERE("SDB root on command is Wrong : %s\n", cmd);
+ return;
+ }
+ if (!do_execute_command(cmd)) {
+ LOG_SEVERE("SDB root on FAILED");
+ return;
+ }
+
+ memset(cmd, 0, sizeof(cmd));
+#ifndef CONFIG_WIN32
+ ret = sprintf(cmd, "\"%s%s\" -s emulator-%d shell \"mount -o remount,rw /\"",
+#else
+ ret = sprintf(cmd, "cmd /S /C \"\"%s%s\" -s emulator-%d shell \"mount -o remount,rw /\"\"",
+#endif
+ bin_dir, sdb_path, get_vm_device_serial_number());
+ if (ret < 0) {
+ LOG_INFO("SDB mount command is wrong: %s\n", cmd);
+ return;
+ }
+ if (!do_execute_command(cmd)) {
+ LOG_INFO("mount FAILED\n");
+ return;
+ }
+}
+
+static void *set_read_mode(void *args)
+{
+#ifndef CONFIG_WIN32
+ const char *sdb_path = "../../../../../tools/sdb";
+#else
+ const char *sdb_path = "..\\..\\..\\..\\..\\tools\\sdb.exe";
+#endif
+ const char *bin_dir = get_bin_path();
+ char cmd[MAX_PKGS_LIST];
+ int ret = 0;
+
+ memset(cmd, 0, sizeof(cmd));
+#ifndef CONFIG_WIN32
+ ret = sprintf(cmd, "\"%s%s\" -s emulator-%d shell \"mount -o remount,ro /\"",
+#else
+ ret = sprintf(cmd, "cmd /S /C \"\"%s%s\" -s emulator-%d shell \"mount -o remount,ro /\"\"",
+#endif
+ bin_dir, sdb_path, get_vm_device_serial_number());
+ if (ret < 0) {
+ LOG_INFO("SDB mount command is wrong: %s\n", cmd);
+ return NULL;
+ }
+ if (!do_execute_command(cmd)) {
+ LOG_INFO("mount FAILED\n");
+ return NULL;
+ }
+ memset(cmd, 0, sizeof(cmd));
+#ifndef CONFIG_WIN32
+ ret = sprintf(cmd, "\"%s%s\" -s emulator-%d root off",
+#else
+ ret = sprintf(cmd, "cmd /S /C \"\"%s%s\" -s emulator-%d root off\"",
+#endif
+ bin_dir, sdb_path, get_vm_device_serial_number());
+ if (ret < 0) {
+ LOG_SEVERE("SDB root off command is Wrong : %s\n", cmd);
+ return NULL;
+ }
+ if (!do_execute_command(cmd)) {
+ LOG_SEVERE("SDB root off FAILED");
+ return NULL;
+ }
+ return NULL;
+}
+
static void *push_pkgs_thread(void *args)
{
char *pkg_data = (char *)args;
@@ -497,6 +585,9 @@ static void *push_pkgs_thread(void *args)
return NULL;
}
+ /*Set read write mode */
+ set_read_write_mode();
+
/* request to install rpms */
LOG_INFO("[pkgs] Request to install : %s\n", data);
send_msg_to_guest(MSG_TYPE_PACKAGE, 0, 2, data, strlen(data) + 1);
@@ -523,8 +614,16 @@ static void do_package(char *cat, type_action action, const char *data)
qemu_thread_create(&sdb_thread_id, "sdb_push", push_pkgs_thread, (void *)pkgs, QEMU_THREAD_DETACHED);
} else if (action == 3) {
LOG_INFO("[pkgs] Package Installation Success: %s\n", data);
+
+ /*Set read mode */
+ qemu_thread_create(&sdb_thread_id, "sdb_push", set_read_mode, NULL, QEMU_THREAD_DETACHED);
+
} else if (action == 4) {
LOG_INFO("[pkgs] Package Installation Failed: %s\n", data);
+
+ /*Set read mode */
+ qemu_thread_create(&sdb_thread_id, "sdb_push", set_read_mode, NULL, QEMU_THREAD_DETACHED);
+
show_error_popup((char *)data);
} else {
LOG_SEVERE("unknown pkgs action: %d\n", action);