调试配置
昨天写完printk函数后很有可能遇到bug,当遇到bug的时候怎样来调试呢,现在就来配置一下
gdb调试
qemu可以以调试模式启动配合gdb来进行调试,当然cgdb更加好用一些
qemu的调试模式命令是
1 | qemu -S -s -fda floppy.img -boot a |
-S是让qemu不要继续运行,等待gdb的运行指令,-s是开启1234端口等待gdb连接
昨天写完printk函数后很有可能遇到bug,当遇到bug的时候怎样来调试呢,现在就来配置一下
qemu可以以调试模式启动配合gdb来进行调试,当然cgdb更加好用一些
qemu的调试模式命令是
1 | qemu -S -s -fda floppy.img -boot a |
-S是让qemu不要继续运行,等待gdb的运行指令,-s是开启1234端口等待gdb连接
屏幕的输入输出函数主要的功能还是dubug,我们模仿标准库来实现,标准库的printf基于vsprintf
1 | int vsprintf(const char *format, va_list arg) |
先看看printk的内容
因为在内核中,大部分的c标准库函数无法使用,字符串操作的函数又比较常用,所有自己实现一些
1 | #ifndef INCLUDE_STRING_H_ |
昨天写的内核在屏幕上没有我们输出的东西,今天就来想办法显示点什么
要显示东西就涉及到显卡了,显卡有两种模式,文本模式和图形模式,现在基本都是图形模式用得多,但是我们这个就用文本模式了,毕竟不涉及ui啥的
显卡通电后就自动初始化了80\ * 25分辨率的文本模式,即一屏25行,一行80个字符
之前说过内存地址空间不是全部映射到主存的,有一部分映射到外部设备,0xB8000~0xBFFFF就是映射到显卡文本模式的显存的地址空间
昨天在这一步出了点问题,很难受,今天来解决一下
我发现问题可能跟我使用的是腾讯云的vps有关,后来我换了一台vultr的centos的vps之后就没问题了,接着昨天的
用loop0把floppy.img虚拟成块设备
1 | sudo losetup /dev/loop0 floppy.img |
今天主要是对操作系统的启动进行学习,因为都是理论的部分,这篇博客就当学习的笔记了
首先在按下电源键后计算机首先读取写在ROM中的BIOS(Basic Input/Output System 基本输入输出系统)
它保存着计算机最重要的基本输入输出的程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。——百度百科
从这次春招中的碰壁和各种感悟,深刻体会到自己基础知识的不足,从零实现一个操作系统可以帮助自己更好得了解操作系统的知识。自己很早之前就开始有写一个微型操作系统的想法,之前也实践过,但弄了几天就放弃了,发现自己的毅力太差了,其实就是太懒了,写blog的目的也有敦促自己,不要懈怠。
感谢前辈们无私提供的各种教程,这系列blog(希望是系列)跟着hurlex-doc教程来学习,当作自己的学习笔记和敦促自己努力不要偷懒
上篇博客就是在写这篇题解的时候发现公式预览不好用弄出来的23333
定义一个函数
$f_x=c^{2x-6}*f_{x-1}*f_{x-2}*f_{x-3}$ for $x\geq4$ , $f_1,f_2,f_3$是已知的,求$f_nmod(1e9+7)$
乍一看感觉是矩阵快速幂,但是递推关系不是线性的没法写呀,然后我们可以发现每一项的指数是满足线性递推关系的