Esempio n. 1
0
int main_loop(struct multiboot_info *boot_info)
{
    _kclear();
    syscall_init();
    module_start = (char*) *((unsigned int*)boot_info->mods_addr);
	module_end = *((unsigned int*)(boot_info->mods_addr+4));
    _kcolor(BRIGHT_GREEN);
    _kputs(DREAMOS_VER);
    _kcolor(WHITE);
    _kputs(LNG_SITE);
    _kcolor(BRIGHT_BLUE);
    _kputs(SITEURL);
    _kputs("\n");
    _kcolor(WHITE);
    _kputs("\n");    
    _kputs(LNG_GDT);
    init_gdt();
    _kprintOK();

    outportb(0xFF, MASTER_PORT_1);
    outportb(0xFF, SLAVE_PORT_1);
    _kputs(LNG_IDT);        
    asm("cli");   
    init_idt();
    _kprintOK();  
    _kputs(LNG_PIC8259);
    init_IRQ();   
    _kprintOK();            	
    printf(LNG_PIT8253);
    configure_PIT ();   
    //_kprintOK();   
    set_memorysize((boot_info->mem_upper+boot_info->mem_lower)*1024);
    init_mem();        
    asm("sti");
    _kprintOK();   
    init_paging();    
    _kprintOK();    	
    printf("Memory (upper) amount-> %d kb \n", boot_info->mem_upper);
    printf("Memory (lower) amount-> %d kb \n", boot_info->mem_lower);

    /* Alloc and fill CPUID structure */
    sinfo = kmalloc(sizeof(struct cpuinfo_generic));
    get_cpuid (sinfo);
        
    vfs_init();
    initfs_init();
	if(boot_info->mods_count > 0) printf("Found n. %d Modules\n", boot_info->mods_count);		
	//printf("Address of module: 0x%x - 0x%x\n", *((unsigned int*)boot_info->mods_addr),module_end-(unsigned int) module_start);
    printf("\n");
    printf("----\n");
    printf(LNG_SHELL);    
    _kprintOK();
		printf("[+] Address: 0x%x\n", &end);		   	        
		printf("\n");
#ifdef BOCHS_DEBUG
		dbg_bochs_print((const unsigned char*)"DreamOS Debug String for Bochs\n");
#endif
		shell();

    return 0;
}
Esempio n. 2
0
int main(int argc, char* argv[]) {
  (void)argc;
  (void)argv;
  struct coresrv_init *data = (struct coresrv_init *)_libc_init_get()->data;
  syscall_log("coresrv", "main", "initializing..");

  struct timeval time;
  gettimeofday(&time, 0);
  char msg[128];
  sprintf(msg, "Current UNIX time is %llu", (unsigned long long)time.tv_sec);
  syscall_log("coresrc", "main", msg);

  broker_init();

  vfs_init();
  vfs_t vfs;
  VFS_BIND(&vfs);
  syscall_log("coresrv", "main", "created VFS");

  // devfs needs to be bound first so that we can allocate device numbers.
  devfs_init();
  devfs_op_t devfs_op;
  DEVFS_BIND(&devfs_op);

  initfs_init();
  initfs_op_t initfs_op;
  INITFS_BIND(&initfs_op);
  vfs_fs_t initfs;
  dev_t init_dev = devfs_op.alloc_dev();
  if (initfs_op.create(data->initrd_base, data->initrd_size, init_dev, &initfs)) exit(-1);
  if (vfs.mount("/", &initfs)) exit(-1);
  syscall_log("coresrv", "main", "mounted initfs at /");

  vfs_fs_t devfs;
  if (devfs_op.create(&devfs)) exit(-1);
  if (vfs.mount("/dev", &devfs)) exit(-1);
  syscall_log("coresrv", "main", "mounted devfs at /dev");

  pci_init();
  pci_op_t pci_op;
  PCI_BIND(&pci_op);
  vfs_node_t pci;
  if (pci_op.create(&pci)) exit(-1);
  if (devfs_op.add_dev(&devfs, "pci", &pci, &pci.stat.st_rdev)) exit(-1);
  syscall_log("coresrv", "main", "added /dev/pci");

  console_init();
  console_op_t console_op;
  CONSOLE_BIND(&console_op);
  vfs_node_t console;
  if (console_op.create(&console)) exit(-1);
  if (devfs_op.add_dev(&devfs, "console", &console, &console.stat.st_rdev)) exit(-1);
  syscall_log("coresrv", "main", "added /dev/console");

  ramdisk_init();
  ramdisk_op_t ramdisk_op;
  RAMDISK_BIND(&ramdisk_op);
  vfs_node_t ramdisk;
  if (ramdisk_op.create(0x200000, &ramdisk)) exit(-1);
  if (devfs_op.add_dev(&devfs, "ramdisk$", &ramdisk, &ramdisk.stat.st_rdev)) exit(-1);
  syscall_log("coresrv", "main", "added /dev/ramdisk");

  tmpfs_init();
  tmpfs_op_t tmpfs_op;
  TMPFS_BIND(&tmpfs_op);
  vfs_fs_t tmpfs;
  dev_t tmp_dev = devfs_op.alloc_dev();
  if (tmpfs_op.create(0x200000, tmp_dev, &tmpfs)) exit(-1);
  if (vfs.mount("/tmp", &tmpfs)) exit(-1);
  syscall_log("coresrv", "main", "mounted tmpfs at /tmp");
  
  fat16_init();
  fat16_op_t fat16_op;
  FAT16_BIND(&fat16_op);
  vfs_fs_t fatfs;
  if (fat16_op.create(&ramdisk, &fatfs)) exit(-1);
  if (vfs.mount("/home", &fatfs)) exit(-1);
  syscall_log("coresrv", "main", "mounted fat16 at /home");

  /*
  pid_t init = fork();
  if (!init) {
    execl(argv[1], argv[1], (void*)0);
  } else while (wait(0) == -1);
  */

  ps2_init();

  // TODO: funny way to just sleep
  syscall_log("corsrv", "main", "sleeping for good.");
  syscall_set_signal_mask(~0ull);
  syscall_wait_signal(1<<SIGINT);
}