19 硬盘初始化hd init:四行代码轻松解读
你好,我是闪客。
上一讲我们说到,buffer_init 完成了缓冲区初始化工作,通过双向空闲链表和哈希表的方式,形成了缓冲区管理的方法。
至于缓冲区究竟是如何被使用的,等到下一期讲解如何通过文件系统来读取一个块设备的数据时,再展开讲解。
这一讲,我们看 main 函数中最后两个初始化函数!
最后两个了!兴不兴奋!不过一口气看两个会不会消化不了?
不要担心,hd_init 是硬盘初始化,我们不得不看。但 floppy_init 是软盘初始化,现在软盘几乎都被淘汰了,计算机中也没有软盘驱动器了,所以这个我们完全可以不看。
还记得小时候我特别喜欢收集软盘,里面分门别类存上我做的 Flash 动画,然后在软盘上的那个纸标签上写上文字,表示软盘存了什么,想想看还是回忆呢。
硬盘初始化 hd_init 都干了什么?
收,我们直接看 hd_init 这个硬盘初始化干了什么?
struct blk_dev_struct {
void (*request_fn)(void);
struct request * current_request;
};
extern struct blk_dev_struct blk_dev[NR_BLK_DEV];
// kernel/blk_drv/hd.c
void hd_init(void) {
blk_dev[3].request_fn = do_hd_request;
set_intr_gate(0x2E,&hd_interrupt);
outb_p(inb_p(0x21)&0xfb,0x21);
outb(inb_p(0xA1)&0xbf,0xA1);
}