Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2462687
  • 博文数量: 392
  • 博客积分: 7040
  • 博客等级: 少将
  • 技术积分: 4138
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-17 13:03
个人简介

范德萨发而为

文章分类

全部博文(392)

文章存档

2017年(5)

2016年(19)

2015年(34)

2014年(14)

2013年(47)

2012年(40)

2011年(51)

2010年(137)

2009年(45)

分类:

2009-12-17 11:06:20

   
在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) |
0

上一篇:转AT&T的帖子

下一篇:ide接口编程(汇编)

给主人留下些什么吧!~~