fprintf(stdout, "\n====================================================\n");
#if defined(CONFIG_JAVA_UI)
- fprintf(stdout, "skin args: =========================================\n");
- for (i = 0; i < _skin_argc; ++i) {
- fprintf(stdout, "%s ", _skin_argv[i]);
+ if (_skin_argc > 0) {
+ fprintf(stdout, "skin args: =========================================\n");
+ for (i = 0; i < _skin_argc; ++i) {
+ fprintf(stdout, "%s ", _skin_argv[i]);
+ }
+ fprintf(stdout, "\n====================================================\n");
}
- fprintf(stdout, "\n====================================================\n");
#endif
fflush(stdout);
{
gchar * tmp_str;
+ LOG_INFO("Prepare_basic_features\n");
set_base_port();
tmp_str = g_strdup_printf(" sdb_port=%d,"
" vm_resolution=%dx%d", get_emul_vm_base_port(),
{
LOG_INFO("Prepare maru specified feature\n");
+ atexit(maru_atexit);
+ emulator_add_exit_notifier(&emulator_exit);
+
+ socket_init();
+
+ print_system_info();
+
g_strlcpy(maru_kernel_cmdline, kernel_cmdline, LEN_MARU_KERNEL_CMDLINE);
+
/* Prepare basic features */
- LOG_INFO("Prepare_basic_features\n");
prepare_basic_features(maru_kernel_cmdline);
LOG_INFO("kernel command : %s\n", maru_kernel_cmdline);
void prepare_maru_after_device_init(void)
{
make_vm_lock_os();
+ set_qemu_input_mode();
maru_device_hotplug_init();
start_ecs();
start_sdb_noti_server(get_emul_vm_base_port() + SDB_UDP_SENSOR_INDEX);
#endif
int c = 0;
+ int qemu_arg_index = 0;
_qemu_argv = g_malloc(sizeof(char*) * ARGS_LIMIT);
#if defined(CONFIG_JAVA_UI)
while (c != -1) {
static struct option long_options[] = {
{"conf", required_argument, 0, 'c' },
+ {"qemu", required_argument, 0, 'q' },
{0, 0, 0, 0 }
};
- c = getopt_long(argc, argv, "c:", long_options, NULL);
+ c = getopt_long(argc, argv, "c:q:", long_options, NULL);
if (c == -1)
break;
case 'c':
launch_conf_file = g_strdup(optarg);
break;
+ case 'q':
+ c = -1;
+ qemu_arg_index = optind - 1;
+ break;
default:
break;
}
}
- if (!launch_conf_file) {
+ if (!launch_conf_file && qemu_arg_index == 0) {
fprintf(stderr, "Usage: %s {-c|--conf} conf_file ...\n",
basename(argv[0]));
set_bin_path_os(_qemu_argv[0]);
- if (!load_conf(launch_conf_file)) {
- return -1;
- }
-
- // set emulator resolution
- {
- char *resolution = get_variable("resolution");
- if (!resolution) {
- fprintf(stderr, "[resolution] is required.\n");
+ if (launch_conf_file) {
+ if (!load_conf(launch_conf_file)) {
return -1;
}
- char **splitted = g_strsplit(resolution, "x", 2);
- if (!splitted[0] || !splitted[1]) {
- fprintf(stderr, "resolution value [%s] is weird. Please use format \"WIDTHxHEIGHT\"\n", resolution);
+
+ // set emulator resolution
+ {
+ char *resolution = get_variable("resolution");
+ if (!resolution) {
+ fprintf(stderr, "[resolution] is required.\n");
+ return -1;
+ }
+ char **splitted = g_strsplit(resolution, "x", 2);
+ if (!splitted[0] || !splitted[1]) {
+ fprintf(stderr, "resolution value [%s] is weird. Please use format \"WIDTHxHEIGHT\"\n", resolution);
+ g_strfreev(splitted);
+ return -1;
+ }
+ else {
+ set_emul_resolution(g_ascii_strtoull(splitted[0], NULL, 0),
+ g_ascii_strtoull(splitted[1], NULL, 0));
+ }
g_strfreev(splitted);
- return -1;
- }
- else {
- set_emul_resolution(g_ascii_strtoull(splitted[0], NULL, 0),
- g_ascii_strtoull(splitted[1], NULL, 0));
}
- g_strfreev(splitted);
- }
- // assemble arguments for qemu and skin
+ // assemble arguments for qemu and skin
#ifdef SUPPORT_SKIN_OPTIONS
- if (!assemble_emulator_args(&_qemu_argc, _qemu_argv,
- &_skin_argc, _skin_argv)) {
- return -1;
- }
+ if (!assemble_emulator_args(&_qemu_argc, _qemu_argv,
+ &_skin_argc, _skin_argv)) {
+ return -1;
+ }
#else
- if (!assemble_emulator_args(&_qemu_argc, _qemu_argv)) {
- return -1;
- }
- #if defined(CONFIG_JAVA_UI)
- // java skin is deprecated, it is used for only debugging...
- _skin_argv[_skin_argc++] =
- g_strdup_printf("skin.path=%s", get_emul_skin_path());
- _skin_argv[_skin_argc++] =
- g_strdup_printf("resolution=%s", get_variable("resolution"));
- _skin_argv[_skin_argc++] =
- g_strdup_printf("vm.path=%s/%s",
- get_variable("vms_path"), get_variable("vm_name"));
- #endif
+ if (!assemble_emulator_args(&_qemu_argc, _qemu_argv)) {
+ return -1;
+ }
+#if defined(CONFIG_JAVA_UI)
+ // java skin is deprecated, it is used for only debugging...
+ _skin_argv[_skin_argc++] =
+ g_strdup_printf("skin.path=%s", get_emul_skin_path());
+ _skin_argv[_skin_argc++] =
+ g_strdup_printf("resolution=%s", get_variable("resolution"));
+ _skin_argv[_skin_argc++] =
+ g_strdup_printf("vm.path=%s/%s",
+ get_variable("vms_path"), get_variable("vm_name"));
#endif
+#endif
+ }
+ // if "--qemu" is specified, we should respect specified args
+ if (qemu_arg_index > 0) {
+ while (qemu_arg_index < argc) {
+ _qemu_argv[_qemu_argc++] = g_strdup(argv[qemu_arg_index++]);
+ }
+ }
LOG_INFO("Start emulator...\n");
- atexit(maru_atexit);
- emulator_add_exit_notifier(&emulator_exit);
-
- set_qemu_input_mode();
-
- print_system_info();
-
print_options_info();
- LOG_INFO("socket initialize...\n");
- socket_init();
-
LOG_INFO("qemu main start...\n");
qemu_main(_qemu_argc, _qemu_argv, envp);