本专栏是在学习LMOS的《操作系统实战45讲》时的学习笔记,以检验学习效果。
操作系统的启动
BIOS固件一般是PC机才有的,在嵌入式设备中一般没有BIOS. BIOS是固定放在主板的ROM中的,PC上电后执行的第一条指令即是BIOS. BIOS的主要目的是做一些硬件检测,然后最重要的工作是将硬盘中的GRUB程序加载到内存的固定位置(0x7c00)处,然后CPU会跳转到此处执行。然后由引导程序加载和启动操作系统。
编译HelloOS
HelloOS是《操作系统实战45讲》中的示例OS,代码结构如下:
doalter@doalterUbuntu:~/Documents/code/cosmos/lesson02/HelloOS$ tree
.
├── entry.asm
├── hello.lds
├── install.md
├── main.c
├── Makefile
├── vgastr.c
└── vgastr.h
这一节先不用关心操作系统的实现细节。只需要知道操作系统是怎么运行起来的。
- entry.asm是汇编程序,被GRUB调用,主要目的是初始化寄存器,设置C语言运行环境,并调用main.c
- main.c只有一个printf函数,向屏幕打印一个字符串
- printf函数需要自己实现,所以有了vgastr.c函数,其功能是向显存写字符。显存文本模式下的地址是0xb8000, 即往这个地址写字符就可以了。每个字符用一个字节表示字符本身,一个字节表示颜色。
doalter@doalterUbuntu:~/Documents/code/cosmos/lesson02/HelloOS$ cat vgastr.c
//彭东 @ 2021.01.09
void _strwrite(char* string)
{
char* p_strdst = (char*)(0xb8000);
while (*strin