Пример #1
0
Файл: fb.c Проект: Zeke-OS/zeke
/*
 * TODO If fb is a default kerror output device then a fb should be registered
 * before kerror is initialized but there is no obvious way to do that, since
 * we definitely want to keep fb constructors in driver files to support
 * dynamic loading, in the future, just for example.
 */
int fb_register(struct fb_conf * fb)
{
    const int minor = atomic_inc(&fb_minor);
    dev_t devid_tty;
    dev_t devid_mm;
    int err;

    devid_tty = DEV_MMTODEV(VDEV_MJNR_FB, minor);
    devid_mm = DEV_MMTODEV(VDEV_MJNR_FBMM, minor);

    fb_console_init(fb);
    err = fb_console_maketty(fb, devid_tty);
    if (err) {
        KERROR(KERROR_ERR, "FB: maketty failed\n");
        return err;
    }

    err = fb_makemmdev(fb, devid_mm);
    if (err) {
        KERROR(KERROR_ERR, "FB: makemmdev failed\n");
        return err;
    }

    draw_splash(fb);
    fb_console_write(fb, "FB ready\r\n");

    return 0;
}
Пример #2
0
void kmain()
{
	irq_disable();
	/* 
	 * A primeira coisa a se fazer é iniciar todo o gerenciador
	 * de memória.
	 */
	mm_init();
	arch_early_init();
	ioremap_init();
	irq_init();
	sched_init();
	timer_init();
	/* 
	 * Neste momento temos o gerenciador de memória e escalonador prontos,
	 * já podemos habilitar as interrupções, que podem ser utilizadas
	 * pelos drivers.
	 */
	irq_enable();

	/* Inicia os drivers da plataforma */
	arch_setup();

	/* Requisita um modo se existir um framebuffer*/
	fb_set_mode();
	/* Inicia o console sobre o framebuffer */
	fb_console_init();
	kernel_info();

#if 1
	irq_disable();
	semaphore_init(&sem, 1);
	create_task("a", 4);
	create_task("b", 5);
	create_task("c", 6);
	create_task("d", 7);
	create_task("b", 8);
	create_task("b", 9);
	irq_enable();
	/* Fica de boas esperando as trocas de contexto */
#endif
	/* Como queremos imprimir para depuração do driver, inicializamos ele agora */
	//bcm2835_emmc_init();
	for (;;) {
		led_blink();
		//printk("-");
	}
}