《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.11 初始化硬盘...

硬盘初始化流程解析
本文介绍了操作系统启动过程中硬盘初始化的关键步骤,包括将硬盘请求项服务程序与控制结构挂接、设置硬盘中断服务程序,并允许8259A和硬盘控制器发送中断请求。

2.11 初始化硬盘

硬盘的初始化为进程与硬盘这种块设备进行I/O通信建立了环境基础。
在hd_init()函数中,将硬盘请求项服务程序do_hd_request()与blk_dev控制结构相挂接,硬盘与请求项的交互工作将由do_hd_request()函数来处理,然后将硬盘中断服务程序hd_interrupt()与IDT相挂接,最后,复位主8259A int2 的屏蔽位,允许从片发出中断请求信号,复位硬盘的中断请求屏蔽位(在从片上),允许硬盘控制器发送中断请求信号。
执行代码如下:

//代码路径:init/main.c:
void main(void)
{
    …
    hd_init();
    …
}

//代码路径:kernel/blk_dev/hd.c:        //与rd_init类似,参看rd_init的注释
void hd_init(void)
{
    blk_dev[MAJOR_NR].request_fn= DEVICE_REQUEST;//挂接do_hd_request()
    set_intr_gate(0x2E,&hd_interrupt);    //设置硬盘中断
    outb_p(inb_p(0x21)&0xfb,0x21);    // 允许8259A发出中断请求
    outb(inb_p(0xA1)&0xbf,0xA1);        // 允许硬盘发送中断请求
}

图2-27形象地给出了初始化过程。
image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值