Linux内核学习
文章平均质量分 80
灬鬼谷灬
这个作者很懒,什么都没留下…
展开
-
Linux内核加载过程
Linux内核大致加载过程:第一步--加载BIOS稍有计算机基础的人都应该听过BIOS(Basic Input/Output System),可以看做是记录在ROM中的软件。也都清楚系统加电会执行BIOS中的程序,这种机能是如何实现的呢?看下图:这是早期DOS系统内存空间分配情况,可以借来理解。如图在0x400的位置有一段BIOS数据区,我们可以理解为ROM原创 2015-10-14 15:05:06 · 4279 阅读 · 0 评论 -
Usb Boot Loader(2)
USB Boot Loader(1)完成了把编译成的二进制文件拷贝到DBR区域,实现了Loader.bin突破512字节的限制,但是最大仅仅为4K,若果想要把操作系统代码也载入内存,显然4K也是太小了,那么就把Loader.bin当做一个跳板,模仿DBR内的代码实现加载任意大小的文件。修改Loader.asm 的内容,主要完成了循环查找KERNEL.BIN文件在U盘中存储的位置,并且载入内存后原创 2016-02-18 19:35:58 · 543 阅读 · 0 评论 -
Usb Boot Loader(1)
此前一直参考《一个操作系统的实现》这本书,遗憾的是书里面是以FAT12文件系统为例讲解的,于是打算用我FAT32格式的U盘实现一个Boot Loader。这样就造成了一个问题,不能进行单步调试了,只能用打印字符的方式来看程序执行的结果,曾经出现一个小问题调了好久,也真是醉了。我是在Windows系统下用Nasm编写启动代码的。准备条件:VMware Workstation、 Nasm、原创 2016-02-17 15:35:58 · 826 阅读 · 0 评论 -
实现一个简单的Boot loader
一个简单的boot loader。原创 2015-10-15 10:58:39 · 1466 阅读 · 0 评论 -
用户空间和内核空间、进程上下文与中断上下文
最近在学习Linux内核,对于用户空间和内核空间、进程上下文与中断上下文有点混淆,在此好好整理一番。一、CPU特权级别CPU的所有指令中,有些指令是非常危险的,如果错用就会导致系统崩溃。所以,CPU将指令分为特权指令和非特权指令,不同的指令有不同的操作权限。于是便有了CPU的4个特权级别,ring0~ring3。ring0最高,ring3最低。Linux系统仅仅使用了ring0和ring3原创 2015-10-13 16:34:18 · 431 阅读 · 0 评论 -
自己动手写操作系统80x86保护模式(4)--分页机制
80x86保护机制除了分段机制、特权等级机制、门机制之外还有分页机制。分页机制主要实现了线性地址到物理地址转换,涉及的内容主要有PDE、PTE、cr3,机制如下:转换使用两级页表,第一级叫做页目录,大小为4KB,存储在一个物理页中,每个表项4字节长,共有1024 个表项。每个表项对应第二级的一个页表,第二级的每一个页表也有1024个表项,每一个表项对应一个物 理页。页目录表的表原创 2015-10-26 08:57:23 · 682 阅读 · 0 评论 -
80x86保护模式(1)
在IA32模式下,CPU有两种工作模式:实模式和保护模式。实际上,当CPU加电时是工作在实模式下的,通过某种机制后才进入保护模式。在保护模式下,通过分段机制实现逻辑地址到线性地址的转换,通过分页机制实现线性地址到物理地址的转换。具体是怎么转换的呢?1、在了解怎么转换之前,实模式下是怎么寻址的呢?8086CPU是16位的CPU,拥有16位的寄存器,16位的数据总线,20位的地址总原创 2015-10-20 13:55:28 · 494 阅读 · 0 评论 -
80x86保护模式(2)
在80x86保护模式(1)中,简单实现了在DOS系统下,由实模式转入保护模式,但是最后却是死循环了。既然可以由实模式转入保护模式,那必然可以由保护模式在转入实模式。下面上代码:;/*;nasm boot.asm -o boot.com;*/;; 描述符; usage: Descriptor Base, Limit, Attr; Base: dd; L原创 2015-10-21 14:35:32 · 425 阅读 · 0 评论 -
80x86保护模式(3)
前面的两节里面仅仅简单的实现了从实模式进入到保护模式然后又返回实模式,而且特权等级都是在Ring0层的。保护模式之所以有保护作用,除了前面的分段机制,保证段不会越界之外。特权等级机制,也是起了很关键的作用。关于特权等级的知识,在《一个操作系统的实现》读书笔记--第三章---不同特权级代码段之间的跳转 一文中有比较详细的解释。关于RPL、CPL、DPL的区分也做了比较详细的区分。现在先看结果原创 2015-10-22 16:23:07 · 373 阅读 · 0 评论 -
自己写USB 操作系统
结合前面USB Boot Loader 1、2的代码和之前bochs调试的代码,就可以实现在Loader.bin内进入操作系统的保护模式,而把操作系统的代码完全放入KERNEL.BIN内,这就完成了一个很小的勉强称得上是操作系统的demo。到此Loader.bin的功能暂时还算完善,下面就可以走上正轨完善内核Kernel的代码了。要求:1、KERNEL.BIN是ELF32格式的,可以直接在原创 2016-02-19 14:36:26 · 607 阅读 · 0 评论