示例#1
0
文件: kernel.c 项目: sbingner/cyanide
int kernel_cmd(int argc, CmdArg* argv) {
	char* action = NULL;
	unsigned int size = 0;
	unsigned int* compressed = 0;
	unsigned char* address = NULL;
	if(argc < 2) {
		puts("usage: kernel <load/patch/boot> [options]\n");
		puts("  load <address> <size>         \t\tload filesystem kernel to address\n");
		puts("  patch <address> <size>        \t\tpatches kernel at address in memory\n");
		puts("  bootargs <string>             \t\treplace current bootargs with another\n");
		puts("  boot                          \t\tboot a loaded kernel\n");
		return 0;
	}

	action = argv[1].string;
	size = argv[3].uinteger;
	address = (unsigned char*) argv[2].uinteger;
	if(!strcmp(action, "load")) {
		if(strstr((char*) (IBOOT_BASEADDR + 0x200), "k66ap")) {
			printf("Loading AppleTV kernelcache from %s\n", KERNEL_PATH);
			kernel_atv_load(KERNEL_PATH, &gKernelAddr);
		} else {
			printf("Loading kernelcache from 0x%x\n", address);
			kernel_load((void*) address, size, &gKernelAddr);
		}
		printf("kernelcache prepped at %p with phymem %p\n", gKernelAddr, *gKernelPhyMem);
	}
	else if(!strcmp(action, "patch")) {
		printf("patching kernel...\n");
		if(gKernelAddr) {
			patch_kernel(gKernelAddr, 0xC00000);
		}
	}
	else if(!strcmp(action, "bootargs")) {
		kernel_bootargs(argc, argv);
	}
	else if(!strcmp(action, "boot")) {
		if(gKernelAddr) {
			printf("booting kernel...\n");
			jump_to(3, gKernelAddr, *gKernelPhyMem);
		}
	}
	return 0;
}
示例#2
0
文件: mach1.c 项目: aquasync/mach1
object_t *kernel_require(static_context_t *this_context, object_t *self, object_t *filename_obj)
{
	object_t *filename_str = coerce_to_s(this_context, filename_obj);
	char *filename = STRING_PTR(filename_str);
	int i;
	for (i = 0; i < ARRAY_LEN(load_path); i++) {
		char *path = STRING_PTR(coerce_to_s(this_context, ARRAY_PTR(load_path)[i]));
		char buf[strlen(path) + STRING_LEN(filename_str) + 10];
		sprintf(buf, "%s/%s.rb", path, filename);
		FILE *file = fopen(buf, "rb");
		if (!file)
			continue;
		fclose(file);
		/* we've found the file */
		kernel_load(this_context, self, string_new_cstr(buf));
		return Qnil;
	}
	raise(LoadError, "no such file to load -- %s", filename);
}
示例#3
0
文件: mach1.c 项目: aquasync/mach1
int main(int argc, char *argv[])
{
	init();
	init2();
	static_context_t ctx;
	ctx.file = (char *)__FILE__;
	ctx.method = (char *)__FUNCTION__;
	ctx.line = __LINE__;
	ctx.parent = 0;
	ctx.block = 0;
	static_context_t *this_context = &ctx;
	/* awesome hardcoding work here */
	load_path = array_new();
	array_push(this_context, load_path, string_new_cstr("."));
	array_push(this_context, load_path, string_new_cstr("./mspec/lib"));
	jump_begin(JUMP_RESCUE)
		send3(Kernel, s_define_method, intern("load"), kernel_load, 1);
		send3(Kernel, s_define_method, intern("require"), kernel_require, 1);
		send3(Kernel, s_define_method, intern("eval"), kernel_eval, -1);
		Init_hash(this_context);
		Init_regexp(this_context);
		init_core(&ctx, g_main);
		if (argc > 1) {
			set_argv(this_context, argc - 2, argv + 2);
			kernel_load(this_context, g_main, string_new_cstr(argv[1]));
		}
		else {
			set_argv(this_context, 0, 0);
			simple_irb(this_context, g_main);
		}
	jump_rescue
		object_t *cls = send0(exc, s_class);
		printf("%s: %s\n", ((symbol_t *)((class_t *)cls)->name)->string, ((string_t *)((exception_t *)exc)->message)->bytes);
		array_t *array = (array_t *)((exception_t *)exc)->backtrace;
		int i;
		for (i = 0; i < array->used; i++)
			printf("\tfrom %s\n", ((string_t *)array->values[i])->bytes);
	jump_ensure
	jump_end
	exit(0);
	return 0;
}
示例#4
0
int main(int argc, char **argv)
{
printf("\33[0;40;33m\n");	
printf("    FemtoForth  Copyright (C) 2014 Victor Yurkovsky\n");
printf("    This program comes with ABSOLUTELY NO WARRANTY'.\n");
printf("    This is free software, and you are welcome to redistribute it\n");
printf("    under certain conditions; type 'license' for details.\n\n");
color(COLOR_RESET);color(FORE_WHITE);
//---------------------------------------------------------------------
// Data segment.  Houses var at the bottom...  
//
        // memmap data segment
        U8* data_base = mmap((void*)0x04000000,
                 CODE_SIZE,
                 PROT_READ+PROT_WRITE+PROT_EXEC,
                 MAP_ANONYMOUS|MAP_PRIVATE|MAP_FIXED,
                 0,0);
        //var structure is placed into bottom RESERVED (512) bytes of data!
        lay = (sMemLayout*)data_base;           // HOST_RESERVED bytes 
        var = (sVar*)(data_base+HOST_RESERVED); // SYS_RESERVED bytes 
        
        // install system var structure at bottom
        lay->data_bottom = data_base;
        lay->data_top = data_base + CODE_SIZE;
        //
        var->data_ptr = lay->data_bottom + HOST_RESERVED + SYS_RESERVED;

        printf("data at %p->%p ",lay->data_bottom,lay->data_top);

//---------------------------------------------------------------------
// Table - runtime 
//
        lay->table_bottom = mmap((U8**)(CODE_ADDRESS/4),
                 sizeof(TINDEX)*TABLE_SIZE,
                 PROT_READ+PROT_WRITE+PROT_EXEC,
                 MAP_ANONYMOUS|MAP_SHARED|MAP_FIXED,
                 0,0);
        printf("TABLE at %p ",lay->table_bottom);
        lay->table_top = (U8*)lay->table_bottom + sizeof(TINDEX)*TABLE_SIZE;
       // var->table_ptr = (U8**)var->table_bottom;
       // *var->table_ptr++ = 0 ; //first table entry is always 0 !
      
//---------------------------------------------------------------------
// DSP
//
// 
        lay->dsp_bottom = (U8*)malloc(DSP_SIZE);
        lay->dsp_top = lay->dsp_bottom + DSP_SIZE;
 printf("DSP at %p ",lay->dsp_top);
//---------------------------------------------------------------------
// RSP
        lay->rsp_bottom = (U8*)malloc(RSP_SIZE);
        lay->rsp_top = lay->rsp_bottom + RSP_SIZE;
        var->sp_meow = (sRegsMM*)lay->rsp_top;
 printf("RSP at %p ",lay->rsp_top);
//---------------------------------------------------------------------
// HEAD
        lay->head_bottom = (U8*)malloc(HEAD_SIZE);
        lay->head_top = lay->head_bottom + HEAD_SIZE;
        var->head_ptr = lay->head_bottom;
 printf("HEAD at %p \n",lay->head_bottom);
//---------------------------------------------------------------------
// SRC 
        lay->src_bottom =  (char*)malloc(256);
        src_reset(); 
      
        head_build();
     
//  printf("data pointer is now at %p\n",var->data_ptr);
        kernel_load();
//  printf("data pointer is now at %p\n",var->data_ptr);
  
        cmd_init();
        lang_init();

//        int i;
//for(i=0;i<20;i++)

      
// U32 qqq = xxx(0x3456,0x1234);
// printf("bindings returns %x\n",1);
    interpret_init();
// src_error("ass");
//  call_meow();
  
 
   while(1)
      interpret_outer();
 // line();
//        int z = armFunction(99);
//        printf("assembly returnst %d\n",z);       
        exit(0);
}
示例#5
0
文件: main.c 项目: kmeaw/bootos
int sequence(void)
{
	static int tick = 0, tack = 0;
	switch (gstate) {
	case STATE_START:
		printf("Waiting for DHCP lease...\n");
		gstate = STATE_WAIT_NET;
		break;
	case STATE_WAIT_NET:
		if (!(tick & 0xFFFF))
		{
			tick = 0;
			tack++;
		}
		tick++;
		if (tack == 1000)
		{
			tftp = tftp_new();
			printf("Timed out...\n");
			return 1;
		}

		if (eth.dhcp->state == DHCP_BOUND) {
			gstate = STATE_GOT_NET;
		}
		break;
	case STATE_GOT_NET:
		printf("Network is up:\n");
		printf(" IP address:  %d.%d.%d.%d\n", P_IP(eth.ip_addr.addr));
		printf(" Netmask:     %d.%d.%d.%d\n", P_IP(eth.netmask.addr));
		printf(" Gateway:     %d.%d.%d.%d\n", P_IP(eth.gw.addr));
		printf(" TFTP server: %d.%d.%d.%d\n", P_IP(eth.dhcp->offered_si_addr.addr));
		if (eth.dhcp->boot_file_name)
			printf(" Bootfile:    %s\n", eth.dhcp->boot_file_name);
		else
			printf(" Bootfile:    NONE\n");

#ifdef NETRPC_ENABLE
		netrpc_init();
#endif
#ifdef AUTO_TFTP
		if (eth.dhcp->offered_si_addr.addr == 0 || !eth.dhcp->boot_file_name) {
			tftp = tftp_new();
			printf("Missing boot settings, falling back to embedded kernel...\n");
			return 1;
		}

		tftp = tftp_new();
		if (!tftp)
			fatal("tftp alloc failed");

		tftp_connect(tftp, &eth.dhcp->offered_si_addr, 69);

		printf("Downloading configuration file...\n");
		seq_tftp_get((char*)eth.dhcp->boot_file_name, conf_buf, MAX_KBOOTCONF_SIZE-1, STATE_GOT_CONF);
#else
		gstate = STATE_IDLE;
#endif
		break;

	case STATE_GOT_CONF:
		if (t_status != TFTP_STATUS_OK) {
			printf("Transfer did not complete successfully\n");
			printf("Rebooting...\n");
			lv1_panic(1);
		}

		printf("Configuration: %ld bytes\n", t_recvd);
		conf_buf[t_recvd] = 0;

		kbootconf_parse();

		if (conf.num_kernels == 0) {
			printf("No kernels found in configuration file. Rebooting...\n");
			lv1_panic(1);
		}

		boot_entry = conf.default_idx;

		printf("Starting to boot '%s'\n", conf.kernels[boot_entry].label);
		printf("Downloading kernel...\n");

		kernel_buf = mm_highmem_freestart();
		seq_tftp_get(conf.kernels[boot_entry].kernel, kernel_buf, mm_highmem_freesize(), STATE_GOT_KERNEL);
		break;

	case STATE_GOT_KERNEL:
		if (t_status != TFTP_STATUS_OK) {
			printf("Transfer did not complete successfully. Rebooting...\n");
			lv1_panic(1);
		}

		if (kernel_load(kernel_buf, t_recvd) != 0) {
			printf("Failed to load kernel. Rebooting...\n");
			lv1_panic(1);
		}

		if (conf.kernels[boot_entry].initrd && conf.kernels[boot_entry].initrd[0]) {
			printf("Downloading initrd...\n");
			initrd_buf = mm_highmem_freestart();
			seq_tftp_get(conf.kernels[boot_entry].initrd, initrd_buf, mm_highmem_freesize(), STATE_GOT_INITRD);
		} else {
			gstate = STATE_BOOT;
		}
		break;

	case STATE_GOT_INITRD:
		if (t_status != TFTP_STATUS_OK) {
			printf("Transfer did not complete successfully. Rebooting...\n");
			lv1_panic(1);
		}

		mm_highmem_reserve(t_recvd);
		kernel_set_initrd(initrd_buf, t_recvd);

		gstate = STATE_BOOT;
		break;

	case STATE_BOOT:
		kernel_build_cmdline(conf.kernels[boot_entry].parameters, conf.kernels[boot_entry].root);
		shutdown_and_launch();
		break;

	case STATE_WAIT_TFTP:
		break;

	case STATE_IDLE:
		break;
	}

	return 0;
}
示例#6
0
文件: main.c 项目: kmeaw/bootos
int main(void)
{
	int res;
	udelay(2000000);
	debug_init();
	printf("\n\nBootOS Stage 2 starting.\n");
	printf("Waiting for thread 1...\n");
	while(!_thread1_active);
	printf("Thread 1 is alive, all systems go.\n");

	exceptions_init();
	lv2_cleanup();
	mm_init();

#ifdef USE_NETWORK
	net_init();

	gstate = STATE_START;
	while(1) {
		net_poll();
		if(sequence())
			break;
	}
#endif
#ifdef AUTO_HDD
	static FATFS fatfs;
	DSTATUS stat;

	stat = disk_initialize(0);
	if (stat & ~STA_PROTECT)
		fatal("disk_initialize() failed");

	printf("Mounting filesystem...\n");
	res = f_mount(0, &fatfs);
	if (res != FR_OK)
		fatal("f_mount() failed");

	printf("Reading kboot.conf...\n");
	res = readfile("/kboot.conf", conf_buf, MAX_KBOOTCONF_SIZE-1);
	if (res <= 0) {
		printf("Could not read kboot.conf (%d), panicking\n", res);
		lv1_panic(0);
	}
	conf_buf[res] = 0;
	kbootconf_parse();

	if (conf.num_kernels == 0) {
		printf("No kernels found in configuration file. Panicing...\n");
		lv1_panic(0);
	}

	boot_entry = conf.default_idx;

	printf("Starting to boot '%s'\n", conf.kernels[boot_entry].label);
	printf("Loading kernel (%s)...\n", conf.kernels[boot_entry].kernel);

	kernel_buf = mm_highmem_freestart();
	res = readfile(conf.kernels[boot_entry].kernel, kernel_buf, mm_highmem_freesize());
	if (res <= 0) {
		printf("Could not read kernel (%d), panicking\n", res);
		lv1_panic(0);
	}
	printf("Kernel size: %d\n", res);

	if (kernel_load(kernel_buf, res) != 0) {
		printf("Failed to load kernel. Rebooting...\n");
		lv1_panic(1);
	}

	if (conf.kernels[boot_entry].initrd && conf.kernels[boot_entry].initrd[0]) {
		initrd_buf = mm_highmem_freestart();
		res = readfile(conf.kernels[boot_entry].initrd, initrd_buf, mm_highmem_freesize());
		if (res <= 0) {
			printf("Could not read initrd (%d), panicking\n", res);
			lv1_panic(0);
		}
		printf("Initrd size: %d\n", res);
		mm_highmem_reserve(res);
		kernel_set_initrd(initrd_buf, res);
	}

	kernel_build_cmdline(conf.kernels[boot_entry].parameters, conf.kernels[boot_entry].root);

	f_mount(0, NULL);
	disk_shutdown(0);
	mm_shutdown();
	kernel_launch();

#endif
	printf("Loading embedded kernel...\n");
	kernel_buf = mm_highmem_freestart();
	printf("Decompressing kernel to %lX...\n", (u64) kernel_buf);
	res = unzpipe (kernel_buf, __vmlinux, &kernel_sz);
	if (res)
	{
		printf("Cannot decompress kernel, error %d.\n", res);
		lv1_panic(1);
	}
	printf("Kernel size: %ld\n", kernel_sz);
	if (kernel_load(kernel_buf, kernel_sz) != 0)
	{
		printf("Failed to load embedded kernel. Rebooting...\n");
		lv1_panic(1);
	}
	kernel_build_cmdline("video=ps3fb:mode:0 panic=5", "/dev/sda1");
	shutdown_and_launch();

	printf("End of main() reached! Rebooting...\n");
	lv1_panic(1);
	return 0;
}