排序:
默认
按更新时间
按访问量

在ELF格式内核中设置GDT、IDT等相关

快一个多月了,一直想要在ELF格式内核中实现中断,参考的是两本书,一本是于渊的orange’s,另一本是川合秀实的30天自制。。。前期,使用的是于渊的方法进入保护模式,加载并运行ELF内核;进入ELF内核后,变使用川合秀实的方式实现了图形界面(仅仅只是显示图形功能),发现各种错误(由其是中断向量号...

2017-07-15 13:59:05

阅读数:230

评论数:0

通过retf和调用门实现特权级转换

不打算按别人的思路来,因为在我学的过程中上网查,发现网上的博客都是互相抄的,最终还是抄书的。Intel 64 和 IA-32架构处理器在进入保护模式之后,就会有一些列保护机制。其中出现了三个特别重要的东西:CPL、DPL、RPL。 CPL表示当前正在执行程序的特权级,它保存在cs段寄存器...

2017-07-13 00:05:45

阅读数:246

评论数:0

将博客搬至CSDN

I need CSDN.

2017-06-21 22:51:45

阅读数:116

评论数:0

ELF Format

Format" TITLE="ELF Format" />

2017-06-21 22:51:40

阅读数:123

评论数:0

在保护模式下启动分页机制,并且使…

分页是在应用程序对内存的需要越来越大的情况下出现的,为了满足应用程序对内存可寻址地址超过4MB的需要,在80386开始就加入了分页机制。 分页机制是针对某一个任务的,或者更准确的说是针对某一个段的。我们在某一个段使用分页机制,就要把对应的页目录表基址给cr3,从而开始使用该段对应的虚拟地址;当...

2017-06-21 22:51:37

阅读数:196

评论数:0

关于LDT的使用

看了书上和网上说的关于LDT的内容,觉得网上许多博客对LDT的认识都不准确,博客内容也要么是抄书上的内容,要么抄别人的博客。 LDT,也就是Local Descriptor Table,局部描述符,它描述的和GDT一样,也是一个段。这样理解,我觉得往后越学越容易误会。 我觉得不应该先说LDT,...

2017-06-21 22:51:34

阅读数:130

评论数:0

加载setup后,进入保护模式

太兴奋了,先上传代码和效果图 已经实现了,通过引导扇区加载setup.bin,又在setup里面进入了保护模式,并能够正常显示字符串 kOS的源代码

2017-06-21 22:51:32

阅读数:128

评论数:0

在ubuntu下用nasm和gcc的ld链接程…

我们先写一个.asm文件 [SECTION .data] StrHello db "Hello, kaito!", 0Ah HelloLen equ $ - StrHello [SECTION .text] global _start ;must be decleared ...

2017-06-21 22:51:29

阅读数:263

评论数:0

用软盘引导扇区加载.bin文件到内存…

在x86平台,如果我们的汇编程序比较小,例如只显示一个字符串,则我们用软盘的引导扇区(占一个扇区)就够了;但是我们的程序以后会越写越大,会超出一个扇区的范围(512字节),这时我们就需要改变策略,我们先把程序分成两个部分,第一部分是引导程序,第二部分是我们要真正操作的核心程序。我们把第二部分存到软...

2017-06-21 22:51:26

阅读数:271

评论数:0

再是用数据段的情况下,向显存发送…

之前傻逼了,上一篇里面的注说的没有错 【注】之前我把书中光盘的内容直接拿来编译,发现编译不通过,我也不知道为什么,后来我就按书上的代码改,没有用堆栈,但是用了数据段。数据段的数据在初始化时,是要把段首地址存在ds的,然后用数据段的数据就用偏移就可以,只是不知道为什么,我在代码段引用数据段的内容时,...

2017-06-21 22:51:24

阅读数:104

评论数:0

直接给显存发送数据,显示字符串(…

这是在不用数据段的情况下,就是这个字符串不是保存在数据段,而是保存在代码段 (因为如果要使用数据段,我还不会,书上使用的又是使用代码段的,一模一样的代码,编译却通不过) 使用往显存发送数据的方式,就是直接把字符显存所在位置 显存所在的段基址是0B8000h,假若 [SECTION .gdt] ...

2017-06-21 22:51:21

阅读数:282

评论数:0

启动Orange's的最简单OS

其实更准确的是山区引导程序 书上的代码是 org 07c00h ; 告诉编译器程序加载到7c00处 mov ax, cs mov ds, ax mov es, ax call DispStr ; 调用显示字符串例程 jmp $ ; 无限循环 DispStr: mov ax, BootMessag...

2017-06-21 22:51:18

阅读数:139

评论数:0

一个父进程创建多个子进程,有些需…

在Linux下我们可以用fork函数创建一个子进程,但是当我们需要在一个父进程下创建多个子进程时,有些需要注意的地方。假设我们用如下代码在一个父进程下创建两个子进程: void main() { pid_t pid1, pid2; pid1 = fork(); pid2 = fork(); if(...

2017-06-21 22:51:16

阅读数:4347

评论数:0

FIFO和线程的使用

做一个类似聊天的工具 第一个程序的代码 #include #include #include #include #include #include #include #include int res, r_fd, s_fd; pthread_t th_r, th_w; int kflag = ...

2017-06-21 22:51:13

阅读数:188

评论数:0

linuxFIFO(有名管道)

FIFO(first in first out)最先被写入文件的字节总是最先被读出。 FIFO在文件系统中不拥有磁盘块,打开的FIFO文件时一个与内核缓冲区相关的区域,用来存放两个进程之间交换的数据。且FIFO的文件名包含在系统的,目录树当中,因此任何进程都可以访问这个FIFO文件。 FIF...

2017-06-21 22:51:10

阅读数:111

评论数:0

linux管道(无名管道)

首先管道是进程之间的一个单向数据流,它的数据流向由内核管理,只能从一个进程流向另外一个进程,一个进程向管道写入数据,另外一个进程从这个管道读取数据。 在使用管道(无名管道)时,只能用在父子进程或者亲属进程之间,若要用在任意进程之间则需要使用FIFO(有名管道) 如图进程AB通过管道进行数据交换...

2017-06-21 22:51:07

阅读数:124

评论数:0

linux进程通信第一次回顾

进程通信,是说进程之间同步和交换数据。虽然通过文件加锁可以实现同步,但是代价很高因为它需要访问磁盘文件系统。 Unix系统提供的进程间通信的基本机制: 1.管道。管道又分为无名管道和有名管道,有时直接把无名管道简称为管道,把有名管道说成是FIFO。 2.信号量。 3.消息。 4.共享内存区。允许...

2017-06-21 22:51:04

阅读数:100

评论数:0

s3c6410的MMU使用(用段的方式转化…

1.mmu的介绍 mmu,即Memory Management Unit,内存管理单元。在处理器中,放在cpu和内存之间,有两个作用 (1)转换虚拟内存 (2)设置程序对内存的访问(在裸机阶段,对于处在不同域domain的虚拟地址,可设置不同的权限) 2.s3c6410中的mmu 在6410中...

2017-06-21 22:51:01

阅读数:104

评论数:0

Ubuntu下用dnw下载到OK6410开发板

https://github.com/Qunero/dnw4linux 就是这篇,里面的源码可以用,就是他给的先删掉,自己重新编译出dnw和secbulk.ko,才可以用。 弄了我好久,蓝过

2017-06-21 22:50:59

阅读数:104

评论数:0

关于Linux重定向输入输出

Linux默认的标准输入来自于键盘,标准输出输出到屏幕上 但是通过重定向,我们可以修改对于一个shell命令的输入输出(即不是从键盘输入,或不是从屏幕输出) 但是要注意的是,对于输入输出都必须是字符流,而不能是其他像路径这样的东西 先做重定向输出,比如我们要输出到一个文件里面,用 > ...

2017-06-21 22:50:56

阅读数:141

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭