在bochs里面运行skelix/07时,涉及到hd.c文件中的hd_wr(),该函数是对硬盘的读写,skelix里面没有对ata设备进行初始化,在循环测试设备是否准备好时,返回值res总是0x0。
在加入下面这段汇编之后,可以正确的查询到设,准备好标志位置1。
该代码从网上copy来的。具体参数和ata硬盘有关...
困扰了好多天的问题啊,一个一个解决!!!
__asm__ ("movl $0x3f6,%%edx\n\t" \
"movb $0x04,%%al\n\t" \
"outb %%al,%%dx\n\t" \
"outb %%al,$0xeb\n\t" \
"movb $0x00,%%al\n\t" \
"out %%al,%%dx\n\t"
::);
/*
unsigned char res;
// while (((res = inb(HD_PORT_STATUS))&0x40)!=0x40)
while (res = inb(HD_PORT_STATUS))
{
kprintf(KPL_PANIC, "hd_rw res:%x\n", res);
if (res != 0x00)
break;
}
kprintf(KPL_PANIC, "hd_rw res:%x\n", res);
*/
在代码中加入这一段初始代码之后,所有的skelix代码终于在我的bochs环境中跑通了,折腾了好几天哪!!
接着考虑下面要作的东西!!!!go on~
存在一个问题:
该硬盘初始化代码在bochs里面运行良好,但是在virtualbox里面无法正常运行,具体原因待解决!
阅读(1658) | 评论(0) | 转发(0) |