自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(172)
  • 收藏
  • 关注

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

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

2017-07-15 13:59:05 762 1

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

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

2017-07-13 00:05:45 829

原创 将博客搬至CSDN

I need CSDN.

2017-06-21 22:51:45 329

原创 ELF Format

Format" TITLE="ELF Format" />

2017-06-21 22:51:40 297

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

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

2017-06-21 22:51:37 914

原创 关于LDT的使用

看了书上和网上说的关于LDT的内容,觉得网上许多博客对LDT的认识都不准确,博客内容也要么是抄书上的内容,要么抄别人的博客。LDT,也就是Local DescriptorTable,局部描述符,它描述的和GDT一样,也是一个段。这样理解,我觉得往后越学越容易误会。我觉得不应该先说LDT,应该先说跳转入保护模式后,我们要如何执行多个任务。假设我们现在已经进入保护模式了,我们需要在保护模

2017-06-21 22:51:34 1298

原创 加载setup后,进入保护模式

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

2017-06-21 22:51:32 312

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

我们先写一个.asm文件[SECTION .data]StrHello db "Hello, kaito!", 0AhHelloLen equ $ - StrHello[SECTION .text]global _start ;must be decleared for linker(ld)_start: ;tell linker entry pointmov edx, Hel

2017-06-21 22:51:29 757

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

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

2017-06-21 22:51:26 1284

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

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

2017-06-21 22:51:24 228

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

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

2017-06-21 22:51:21 1355

原创 启动Orange's的最简单OS

其实更准确的是山区引导程序书上的代码是org 07c00h ; 告诉编译器程序加载到7c00处mov ax, csmov ds, axmov es, axcall DispStr ; 调用显示字符串例程jmp $ ; 无限循环DispStr:mov ax, BootMessagemov bp, ax ; ES:BP = 串地址mov cx, 16 ; CX = 串长度mo

2017-06-21 22:51:18 635

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

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

2017-06-21 22:51:16 18929

原创 FIFO和线程的使用

做一个类似聊天的工具第一个程序的代码#include#include#include#include#include#include#include#includeint res, r_fd, s_fd;pthread_t th_r, th_w;int kflag = 0;void *thread_w(){int tmp;char p[1000];while

2017-06-21 22:51:13 890

原创 linuxFIFO(有名管道)

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

2017-06-21 22:51:10 439

原创 linux管道(无名管道)

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

2017-06-21 22:51:07 279

原创 linux进程通信第一次回顾

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

2017-06-21 22:51:04 202

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

1.mmu的介绍mmu,即Memory ManagementUnit,内存管理单元。在处理器中,放在cpu和内存之间,有两个作用(1)转换虚拟内存(2)设置程序对内存的访问(在裸机阶段,对于处在不同域domain的虚拟地址,可设置不同的权限)2.s3c6410中的mmu在6410中,mmu的虚拟地址到物理地址的转化如图,可采用3种方式按照虚拟地址的[31:20]位的最后两位,当为

2017-06-21 22:51:01 419

原创 Ubuntu下用dnw下载到OK6410开发板

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

2017-06-21 22:50:59 252

原创 关于Linux重定向输入输出

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

2017-06-21 22:50:56 374

原创 这是关于Makefile的基础学习

http://pan.baidu.com/s/1bo6sx91

2017-06-21 22:50:53 165

原创 Ubuntu下挂载和卸载U盘

当我们在Ubuntu下插入U盘时,会出现还好这是U盘,系统会自动帮我们做好工作。但如果是一个系统不能处理的存储设备,或是设备,那就需要我们自己挂载和卸载,这里用U盘来操作先用fdisk -l查看存储设备其中显示设备文件/dev/sdb1,设备类型为nfts当我们这是去挂载U盘时mount -t ntfs /dev/sdb1 /media/udisk显示挂载被拒绝,因为这个

2017-06-21 22:50:51 540

原创 ./build: line 53:&nbsp…

1.编译QT4.4.3的时候,出现如下问题:Bootstrap QBuild: .. FAILIn file included from../../../qt-extended-4.4.3/qbuild/src/main.cpp:37:../../../qt-extended-4.4.3/qbuild/src/options.h: In constructor'Options::Opt

2017-06-21 22:50:48 312

转载 中国男人到底配不配得上中国…

原文地址:| 原创">中国男人到底配不配得上中国女人 | 原创作者: 卢悦卢悦| 原创" TITLE="[转载]中国男人到底配不配得上中国女人 | 原创" />心之助(微信:luyuexinli)女性心理健康与成长专业平台陪伴你心灵成长获得幸福生活预约情感咨询 成长咨询 学习心理课程 文丨卢悦(新浪微博@卢悦卢悦) 最近流行一个话题:中国男人配不上中国女人。论点有如下四条

2017-06-21 22:50:45 494

转载 你身上有个“开关”,弄一下就…

原文地址:你身上有个“开关”,弄一下就舒服死了!作者: BTV文艺频道人体上共有409个穴位,每个穴位有它独特的用处,现在你只要记好这些穴位,在生活中遇到疼痛就按一下这些“开关”,你会舒服很多。头痛开关揪揉眉间背痛开关搓捂后腰牙痛开关虎口或下关穴肩痛开关提揉“肩峰”心痛开关点按手腕痛经开

2017-06-21 22:50:42 167

原创 review makefile

今天重新复习了makefile关于makefile,就是一系列规则,用来规定对文件编译,连接,汇编的规则先说一下,在gcc后面-o表示对生成的文件取另外一个名字-c表示编译不连接-C表示进入一个目录首先,在一个文件夹下创建一个main.c函数实现为#include "kaito.h"void main(){    printf("This is the main

2017-06-21 22:50:39 171

转载 linux 下 /bin /sbin 的区别

原文地址:下 /bin /sbin 的区别">linux 下 /bin /sbin 的区别作者:Blossom/bin,/sbin,/usr/bin,/usr/sbin区别/ : this is root directory             root 用户根目录/bin : commandsin this dir are all system installed user c

2017-06-21 22:50:37 185

转载 Linux init详解 (0,1,2,3,4,…

原文地址:init详解 (0,1,2,3,4,5,6)">Linux init详解 (0,1,2,3,4,5,6)作者:海木棉枫init是Linux系统操作中不可缺少的程序之一。  所谓的init进程,它是一个由内核启动的用户级进程。  内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所

2017-06-21 22:50:34 215

原创 给linux添加PATH环境变量

今天在/home/kaito/kaito/kkk目录下谢了一个kaito.c编译出来的kaito可执行文件为了使这个课执行文件在任何目录下都可以使用,就像使ls那样,我需要添加环境变量首先到/etc/目录下打开profile编辑vim /etc/profile在这个文本的最后添加一行和原来最后一行结构一样的,但是那个文件路径改成我们放kaito可执行文件的路径我的就是/home/kai

2017-06-21 22:50:32 201

原创 printf的学习

首先从网上找到了glibc的标准库的内容,找到了里面的printf.c的函数实现int__printf (const char *format, ...){  va_list arg;  int done;  va_start (arg, format);  done = vfprintf (stdout, format,arg);  va_end (arg);  ret

2017-06-21 22:50:29 205

原创 放大电路的工作

2.1观察放大电路的波形放大电路共发射极放大电路vb的振幅和相位与vi完全相同,只是vb是在vi的基础上叠加了2.6v的电压(为了满足交流信号振幅在0v附近时,仍然能是vbe>0.7v,即使晶体管处于工作状态)这个叠加上去的2.6v电压就是基极的偏执电压,产生该电压的电路就是偏执电路这个偏执电压的意思就是相当于叠加上一个直流(或者说偏离了直流一个电压)电容C1是截去输入信号中

2017-06-21 22:50:26 1524

转载 Vsprintf简介--附实现源码

原文地址:Vsprintf简介--附实现源码作者:佳丽恐龙vsprintf    #include  char buffer[80];  int vspf(char *fmt, ...)  {   va_list argptr;   int cnt;   va_start(argptr, fmt);   cnt = vsprintf(buffer, fmt,argpt

2017-06-21 22:50:24 5531

原创 并发式TCP服务器的设计

在之前的TCP服务器设计时,采用的是循环接收并处理客户机的请求的轮询方式,这样的效率太低,因为当多个客户机同时向服务器发出请求时,就会导致后面来的客户机一直停滞在那里,直到服务器处理完前一个客户机的请求之后才会处理下一个服务器的请求。所以一个较好的办法就是采用多进程来处理。利用主进程来接受客户机的请求,得到一个请求就创建一个子进程来处理数据,这样就可以在同一时刻处理多个客户机发来的请求。当然

2017-06-21 22:50:21 375

原创 linux网络通信-------UDP协议

UDP编程模型UDP协议是长度固定的,无连接的不可靠报文传递,所以不像TCP协议那样需要在发送数据之前先建立连接服务器创建socket     socket绑定地址     bind接收数据     recvfrom发送数据     sendto结束连接     close客户机    创建socket    socket发送数据     sendto接收数据    

2017-06-21 22:50:18 265

原创 linux网络通信-----TCP协议

首先要了解TCP的通信原理在网络通信中,我们往往会用到不同的网络协议,有TCP,UDP,ICMP,IP,IGMP...为了我们使用网络通信方便,Linux采用socket(套接字)来连接不同协议的接口,就相当于是在中间加入了一个交换机,自动把不同的网络连起来一样。这样我们就可以在不同的网络协议中用相同的函数了。TCP编程模型TCP通信需要服务器和客户端双方进行通信首先服务器需要:创

2017-06-21 22:50:15 300

原创 ubuntu下,ARM_tools 的安装

http://www.linuxidc.com/Linux/2013-06/85902.htm

2017-06-21 22:50:13 548

原创 linux多线程程序

这里是多线程,而不是多进程。我们用fork函数可以创建子进程,创建的子进程是和源程序完全一样的,但是有自己的堆栈,代码段,数据段,BSS端,而且当源进程关闭的时候,创建的新进程不会关闭,就相当于是复制出完全一样的两个程序在运行。但是这里的线程就不一样了。它在源程序里创建了一个新线程,这个线程不是源程序的完全复制,它和源程序共用同个资源,是源程序为了提高效率让多个线程同时执行某一项操作。相

2017-06-21 22:50:10 157

原创 消息队列的范例代码

随机生成键值(不重复)用ftok发送端代码#include#include#include#includestruct msgt{   long msgtype;   char text[1024];};void main(){    int key;    int msqid;    int k;    struct msgt mymsg;     

2017-06-21 22:50:07 869

原创 linux进程间通信-------消息队列

消息队列属于IPC两个进程间要通过消息队列进行通信,比如A通过消息队列给B传送一个消息。首先A要建立一个消息队列,然后A往该消息队列里面发送消息(由一个有特殊形式的结构体构成,包括数据类型和数据内容),当不需要使用这个消息队列的时候删除消息队列。B要做的事情是打开消息队列,打开方式是用和A里面一样的键值打开对应的消息队列,然后接收消息队列的消息(即结构体中某个类型的数据),结束。相关函数

2017-06-21 22:50:05 195

原创 linux进程间通信-------共享内存

Linux系统中的两个进程可以通过共享内存的方式来进行通信,属于IPC通信,也就意味着和键值有关。。。首先通过某个进程创建一片共享内存,创建的这片共享内存会返回一个描述符,这样其它的进程也可以使用这片内存。要使用共享内存的进程都必须先把那片内存映射到要调用的进程里,这里可以自己创建一个结构,用这个结构的指针来指向这片地址。用完共享内存后,要把共享内存和进程分离,最后分离的进程还要把这块共

2017-06-21 22:50:02 198

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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