Hello RVOS! 学习笔记

初始:系统引导

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Hello RVOS!的学习笔记

一、硬件基础

         参阅文章:理解“统一编址与独立编址、I/O端口与I/O内存” - 陈木 - 博客园 (cnblogs.com)

                              计算机CPU对外设的访问方法_rsicv cpu如何访问外设_NIUZI_J的博客-CSDN博客

        在Hello RVOS 1中提到了一个内存映射的概念,及外设被映射到了内存之中。因此在qemu中代码运行的起始地址皆是从0x80000000开始的。因为前面的地址皆被分配给了外设。

        一开始,我想当然,后来经过一些关于代码中地址的使用略微有些疑惑。

         第一篇博客园的文章写的非常全。我记录以下我看完后的理解。

         一个程序员访问外设方便,如何做?封装,抽象。便有了驱动程序。驱动程序想要控制硬件如何做?熟记引脚?直接赋值。于是便有控制器接口,比如说usb,AD接口等等。所以访问外设,无非操作接口中的寄存器或缓冲及端口,通过硬件电路实现控制外设。

         那么话说回来,从硬件上来说,无非是CPU如何访问控制器?需要一个标识。那么这个标识就是地址。谈到地址能想到,物理地址,虚拟地址。关于硬件外设自然是物理地址。

         对于外设而言有两种编址方式。这取决于所使用的计算机架构。

        类似x86这样的复杂指令集架构来说,进行的是独立编址。即常用的内存地址和外设地址(硬盘也属于外部设备)分别独立编址。这意味地址会有重用。固需要两套指令分别来访问内存和外设。

        统一编址则更应用于精简的架构上。比如ARM,还有这次的risc-V。外设接口中的IO寄存器(即IO端口)与存储单元一样看待,每个端口占用一个存储单元的地址,将存储空间的一部分划出来用作IO地址空间,统一编址也称为“I/O内存”方式,外设寄存器位于“内存空间”(很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”)。CPU便只需要一套指令来访问存储器和外设了。(有人会说这回占用主存或内存,但在我看来若说会占用本可以给主存用的地址空间更为合适。占用主存内存则相当于独立编址而言)

        至于应该如何访问,参见博客园文章便可知。io内存及统一编址,io端口则为独立编址。

        看了很多文章?也就理解这些东西。博客园的文章确实好啊。

        

二、开端:系统引导

         在RVOS实验中,这方面很简单。

                

        以上是使用qemu软件模拟时系统引导过程,和真正的引导过程有些区别。

        机器上电执行rom中的Botlouder,在qemu中代码执行后会跳转到一个固定的地址(内存起始位置)上执行内核代码。而-kernel os.elf其实就是将内核代码提前放入那个内存起始位置上。所以实际上内核引导即跳转到内核代码的地方。

        多核则多个核同时执行上述过程。

        而在真正的计算机中,以linux系统为例子。

        自然先要进行一些硬件自检之类的工作(BIOS),然后是MBR引导,即加载bootloader即GRUB引导程序,然后GRUB引导程序来加载内核,将控制权交给内核,而内核此时需要一些必要的驱动程序来访问其余硬件,目前使用的是临时跟文件系统,随后挂在根文件系统,执行init程序。

         这便是linux的主要引导过程。参见文章:LINUX系统引导启动过程:BIOS、bootlaoder、kernel、init - 知乎 (zhihu.com)

         今天就先到这里了,写文章确实会花费一些时间,但确实在知识的理解上更深入记忆也更深刻。日后加油吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值