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

15|控制台初始化tty_init:字符是怎么显示在屏幕上的?

你好,我是闪客。
上一讲我们说到,继内存管理结构 mem_map 和中断描述符表 idt 建立好之后,我们又通过 blk_dev_init 在内存中倒腾出了一个新的数据结构 request,并且把它们都放在了一个 request[32] 数组中。
这是块设备驱动程序内存缓冲区的桥梁,通过它我们就可以完整地表示出一个块设备读写操作要做的事。

控制台初始化 tty_init

我们继续往下来看 tty_init。
// init/main.c
void main(void) {
...
tty_init();
...
}
这个方法执行完成之后,我们将会具备从键盘输入字符、到显示器输出字符这个最常用的功能,这时我们能直观感受到操作系统有了点交互性!
打开这个函数后我有点慌。
// kernel/chr_drv/tty_io.c
void tty_init(void)
{
rs_init();
con_init();
}
看来这个方法已经多到需要拆成两个子方法了,不好对付!
打开第一个方法,发现还好。
// kernel/chr_drv/serial.c
void rs_init(void)
{
set_intr_gate(0x24,rs1_interrupt);
set_intr_gate(0x23,rs2_interrupt);
init(tty_table[1].read_q.data);
init(tty_table[2].read_q.data);
outb(inb_p(0x21)&0xE7,0x21);
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了控制台初始化过程中的关键步骤和技术细节。首先讲解了内存中与显存映射相关的概念,以及如何通过汇编语句将字符写入显存中,实现在屏幕上的显示。接着详细解释了控制台初始化函数 con_init 中的各个部分,包括获取显示模式信息、显存映射的内存区域、滚动屏幕操作时的参数设置以及光标定位和键盘中断的处理。文章还介绍了在键盘中断触发后,如何通过调用相关函数将键盘输入的字符写入显存中,实现在屏幕上的显示。此外,还提到了控制台操作中的换行、滚屏、删除等功能的实现原理。总体来说,本文通过深入浅出的方式解释了控制台初始化过程中的技术细节,对读者了解操作系统中控制台初始化的原理和实现方式具有一定的参考价值。

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

全部留言(2)

  • 最新
  • 精选
  • 浩仔是程序员
    老师,你好。我想请教一下怎么写到那块内存区域就可以显示,背后还做了哪些事情呢?

    作者回复: 那就是显卡的原理了,涉及硬件,可以看下 ben eater 如何制作显卡相关的视频

    2023-02-15归属地:广东
    1
  • 大头爸爸
    键盘输入的字符 c 保存在哪里?
    2023-03-01归属地:美国
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部