/ 铃儿响叮当 / grub下的videoinfo

grub下的videoinfo

2014-02-12 posted in [day-to-day]

videoinfo

在grub下查看显示相关的信息,碰到一bug,videoinfo运行就会让grub进入白屏状态。 最后定位需要更新VBIOS,videoinfo不能获取显示模式的列表, VBIOS类似于kernel下的显卡驱动,只不过是用于grub下的显示。

vga.mod 和 vbe.mod 都是与显示相关的模块。

videoinfo会通过0x10中断,来获取支持的显示模式的列表。

看了下有关videoinfo的代码

grub_video_vbe_init -> grub_vbe_probe -> grub_vbe_bios_get_controller_info

In this function, it will use INT 0x10 and AX=0x4F00 to get Controller Info
and returns the array of all supported video modes.

Below is the code to use INT 0x10 and AX=0x4F00.

/* Call VESA BIOS 0x4f00 to get VBE Controller Information, return status. */
grub_vbe_status_t grub_vbe_bios_get_controller_info (struct grub_vbe_info_block *ci) {
	struct grub_bios_int_registers regs;
	/* Store *controller_info to %es:%di. */
	regs.es = (((grub_addr_t) ci) & 0xffff0000) >> 4;
	regs.edi = ((grub_addr_t) ci) & 0xffff;
	regs.eax = 0x4f00;
	regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
	grub_bios_interrupt (0x10, &regs);
	return regs.eax & 0xffff;
}

Links

http://wiki.osdev.org/Getting_VBE_Mode_Info