Linux0.11 源码趣读
闪客
低并发编程公号作者
18650 人已学习
赠一得一
课程目录
已完结/共 22 讲
Linux0.11 源码趣读
15
15
1.0x
00:00/00:00
登录|注册

19|硬盘初始化hd_init:四行代码轻松解读

你好,我是闪客。
上一讲我们说到,buffer_init 完成了缓冲区初始化工作,通过双向空闲链表和哈希表的方式,形成了缓冲区管理的方法。
至于缓冲区究竟是如何被使用的,等到下一期讲解如何通过文件系统来读取一个块设备的数据时,再展开讲解。
这一讲,我们看 main 函数中最后两个初始化函数!
void main(void) {
...
hd_init();
floppy_init();
...
}
最后两个了!兴不兴奋!不过一口气看两个会不会消化不了?
不要担心,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);
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

这篇文章介绍了硬盘初始化函数`hd_init`的实现过程。文章首先提到了`hd_init`函数在`main`函数中被调用,然后详细解释了`hd_init`函数的具体实现。该函数主要包括四行代码,分别完成了硬盘管理结构的初始化、硬盘中断的设置以及对IO端口的读写操作。通过这些操作,硬盘得以初始化并能够响应读写请求。文章还提到了硬盘中断的设置,以及硬盘读写完成后发起中断信号通知CPU的过程。总的来说,文章通过简洁的代码解读和清晰的解释,让读者了解了硬盘初始化函数的关键实现细节。

该试读文章来自《Linux0.11 源码趣读》,如需阅读全部文章,
请先通过赠一得一解锁课程
赠一得一
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • Su
    催更
    2024-03-08归属地:中国香港
  • gtp
    期待下一期
    2023-08-07归属地:北京
  • liiiiiii
    感谢分享 期待下一期
    2023-03-05归属地:广东
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部