自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

u013476840的专栏

好好学习 天天向上

  • 博客(86)
  • 资源 (3)
  • 收藏
  • 关注

原创 自己动手写unix系统 ----1.0版本演示

1. 简介最近用了一个多月写了一个基于X86_32的蹩脚小型unix系统,名为yatos ( yet another tiny OS)。功能虽然不多,但是感觉蛮有意思的,这篇博文将介绍1.0版本所具有的功能。后续博文将介绍系统是如何设计实现的。测试环境为bochs。支持ext2文件系统支持elf可执行文件格式支持部分posix接口及部分标准C接口支持8个虚拟终端系统源代码2. 实现的编程接

2017-05-13 14:53:55 2047

原创 KVM虚拟化源码分析之KVM_TOOLS(五)

回顾前面的博文,我们分析了kvm_cmd_run_init以及kvm_cmd_run_work,这篇博文我们分析最后一个函数 kvm_cmd_run_exit。kvm_cmd_run_exit和前面的init_lists一样,eixt_lists也是链表数组,我们和前面一样通过source_insight的搜索功能查看调用来哪些函数kvm_exitkvm_exit被core_exit宏声明了我

2017-03-25 12:00:32 928

原创 KVM虚拟化源码分析之KVM_TOOLS(四)

回顾上篇博文中我们分析了kvm_cmd_run_init函数,该函数主要是用于创建VM以及创建VCPU的。这篇博文主要分析kvm_cmd_run_workkvm_cmd_run_work为每个vcpu 创建了一个线程,并利用pthread_join阻塞等待vpcu0所以核心就要看线程函数kvm_cpu_thread注意这个current_kvm_cpu变量,这是个被__thread关键字修饰

2017-03-25 11:06:56 1579

原创 KVM虚拟化源码分析之KVM_TOOLS(三)

回顾上篇博文我们分析到kvm_cmd_run命令中有3个核心函数这篇博文主要分析kvm_cmd_run_init函数kvm_cmd_run_init确定CPU个数而后是一个循环解析命令行参数,具体可以参考kvm_cmd_run_init的帮助信息如果在上边解析参数的时候发现用户并没有制定内核文件位置,则通过find_kernel()来获得而find_kernel()其实就是通过下边的位置顺序

2017-03-24 19:43:46 1700

原创 KVM虚拟化源码分析之KVM_TOOLS(二)

mainkvm-tools是一个普通的应用程序,所以入口是main函数,在源码树中,根目录下就有一个main.c,显然这就是入口文件。 非常简短,显然主要核心在于handle_command,即根据用户传进来的命令做不同的处理。 我们发现第一个参数是一个全局变量,我们看看是什么我们发现是一个cmd_struct结构体数组命令名字,命令执行函数指针,命令帮助信息,可选项handle_command

2017-03-24 10:26:10 1533

原创 KVM虚拟化源码分析之KVM_TOOLS(一)

1.什么是kvm-tools 有过kvm学习经验的朋友一定知道,kvm模块自身并不模拟设备,主流的是用qemu来模拟设备,但是由于qemu代码过于庞大且可读性差,导致初学者很难通过分析qemu-kvm来学习kvm模块的使用流程。 kvm-tools是一款开源轻量级的虚拟机,其代码量相对qemu要少得多,并且写得相当优美,几乎不用看注释就能读懂。麻雀虽小,但五脏俱全,kvm-tools是完

2017-03-24 09:53:51 3716

原创 linux 下DNW 传送文件

【说明】             在WIN7上有DNW  可以传送文件,在LINUX 下也有。【下载安装】            下面链接包含里下载和安装。。还有使用,非常简单            http://code.google.com/p/dnw-linux/【问题】           Can not open /dev/secbulk0:

2014-03-30 01:12:22 1135

转载 ubuntu下minicom的安装及使用

安装:sudo apt-get install minicom配置:1 . 在终端中输入minicom以启动minicom;2. 先按下Ctrl + a, 放开, 再按o, 出现配置菜单.3. 选择 Serial port setup, 此时所示图标在“Change which setting”中,键入“A”,此时光标移到第A项对应处:串口COM1对应ttyS0, COM2

2014-03-30 00:32:51 904

原创 tiny6410裸机实验第11章--------------蜂鸣器(原理及代码)

【说明】             6410有一个蜂鸣器,可以发出很吵得声音,我们这一节就来操作它,但是我们是用最简单的方式操作,也就是响起或者不响,至于声音大小我们不讨论。 【原理】             其实蜂鸣器的操作和LED擦不多。。。就是控制GPIO就可以了没什么特殊的东西             下面的底板原理图                       

2014-03-12 12:07:41 2085

原创 tiny6410裸机实验第10章--------------PWM定时器(原理及代码)

【说明】             S3C6410带有5个32位定时器,其中定时器4是内部定时器,没有引出外部引脚的,这一节我们就来试试操作定时器中断。学了这个定时器操作之后,我们再利用它来写一个进程调度程序,实现最最简单的进程并发。 【原理】             S3C6410的5个定时器中,定时器0和1有PWM功能,其他没有             PWM具有两种操作,即

2014-03-12 10:47:11 1887

原创 【静态链接】第2章---------------------静态链接过程(静态库链接)

【说明】             我们平时写程序并没有直接调用操作系统的系统调用,而是使用库函数比如printf ,然后 printf 去调用系统调用。这节就来看看我们是怎么以静态方式将库和我们的程序链接起来的,另外就是我们如何自己来做库文件。 【静态库】            其实一个静态库里面有很多.o 文件,他们被打包形成了一个库文件,一般是.a 文件

2014-03-11 10:08:08 750

原创 U-boot分析第1章------------------Makefile(编译过程)

【说明】             继续前一节的内容,这节我们介绍编译的过程,这个其实是Makefile 的执行分析,而不是说编译的原理。还记得我们上一节生成的几个文件吗,在这一节就会用到。 【Makefile  分析】             由于Makefile  比较长,我们只需要关注一些重要的地方就可以了,我们的顺序当然是从文件开始到文件结束了             首

2014-03-10 15:03:38 922

原创 U-boot分析第1章------------------Makefile(配置过程)

【说明】             前面一小节我们体验了一下U-BOOT,并把它烧到了我们的开发板中,还记得我们的步骤吗?解压,配置,编译,烧写。这节我们来讲讲U-BOOT的配置原理,下一节介绍其编译的过程。 【配置命令分析】               我们再来看看配置的命令                             显然 ,后面那个 mini6410_nan

2014-03-10 13:44:19 808

原创 U-boot分析第0章------------------ 编译烧写

【说明】             首先我们先编译并烧写一下U-BOOT体验一下,我使用的是友善公司提供的U-BOOT,可以编译后直接用在TINY6410上边,下面就来介绍整个配置,编译,烧写的过程。  【解压】            我们得到的是压缩文件,我们得解压它,很简单,如下                                   得到一个源码包

2014-03-10 12:43:33 937

原创 tiny6410裸机实验第9章--------------LCD(显示字母)

【说明】              前一节我们初始化了LCD,使得我们可以在任何一个像素画点了。可是我们平时很少直接在屏幕上画画的吧,大多数情况下我们是在上边显示英文或者中文,那我们怎么显示英文呢,这就是这一节的重点。 【显示原理】              字母是怎么显示的呢,想象一个8*8的矩阵,每一个元素就是一个像素,那我们就可以用白色像素描出一个字母"A",用黑色作为其他像

2014-03-09 11:24:21 1454

原创 tiny6410裸机实验第9章--------------LCD(原理及源代码)

【说明】            这一章我们来介绍一个很好玩的东西,那就是LCD,也就是我们开发板上的显示屏了,这个要理清一个概念,那就是LCD和触摸屏是完全没关系的两个设备,只不过他们一般都做在一起而已,我们这节只介绍LCD,没有触摸屏的内容。由于我用得是友善的TINY6410,而友善公司把触摸屏和LCD背光都做成了1线的,也就是一般的背光控制和触摸屏原理都不适用于这个6410。所以我们无视背

2014-03-08 14:23:13 2528

原创 tiny6410裸机实验第8章--------------中断(中断版UART)

【说明】             我们在第4章已经介绍了UART的原理,但是当时我们在发送数据的时候是用查询方式的,也就是如果FIFO满了,我们就一直循环等待,这显然太浪费时间了。这一节我们就用中断的方式操作UART,我们只介绍发送,接收其实和发送擦不多的。 【原理】             6410的UART有个中断模式,记得FIFO缓冲区吗?             1)我

2014-03-07 12:06:21 1302

原创 tiny6410裸机实验第8章--------------中断(中断向量寄存器)

【说明】              前面我们的按键程序已经能工作了,但是有一个缺点,就是它在中断处理函数里是一个一个判断中断的(虽然用了循环),如果有一天我们程序中有好多好多中断,比如触摸屏中断,按键中断,UART中断等等。我们难道要一个一个判断是什么中断,然后处理吗?不用的,6410有一个很好的机制、 【

2014-03-07 09:53:40 1228

原创 tiny6410裸机实验第8章--------------中断(原理及代码)

【说明】             前面我们提到了,中断也是异常的一种,那为什么单独用一章介绍中断呢?因为中断相对于其他异常要复杂一些,而且我们只有理解了中断才能为以后理解操作系统做准备。中断的原理其实和所有异常都差不多的。中断异常就是IRQ异常 【中断来源】               当外部设备需要与CPU通讯的时候,就发出一个中断,到达中断控制器,由中断控制器裁决是否向CPU发

2014-03-06 22:22:25 1451

原创 tiny6410裸机实验第7章--------------异常(代码)

【说明】              前一节我们介绍了异常的原理,并解释了一部分代码的意思,这一节贴出完整的代码,方便没有源码的童鞋,只贴出START.S  因为其他的和前面几章一样的。【源代码】 .globl _start_start: // 异常向量表 b reset

2014-03-06 20:39:28 1114

原创 tiny6410裸机实验第7章--------------异常(原理)

【说明】             如果我们的CPU执行到未定义的指令的时候会发生什么呢?又,如果出现了除以0的操作,又会发生什么呢?那就是“异常”,这一节就来介绍异常的相关知识。。下一章我们介绍中断,中断是异常的一种。【工作模式】              ARM有7种工作模式,当发生异常时会自动进入相关的模式运行,并跳转到异常向量入口处,工作模式如下

2014-03-06 11:38:18 973

原创 tiny6410裸机实验第6章--------------NAND(初始化代码及NAND操作)

【说明】             前面我们已经说明了初始化NAND控制器的原理,这一节就是源代码了,这个源代码不是用的友善的源代码,因为我的NAND FLASH 是8KB块的。友善给的源代码是2KB的。这个代码是一位网友提供的。初始化步骤就是按前面的原理来的。这节还会介绍读写NAND的操作  【初始化代码】              其中的nand_reset 在下面,它和初始

2014-03-05 21:29:58 999

原创 tiny6410裸机实验第6章--------------NAND(初始化原理)

【说明】             在地5章我们初始化了DDR并且进行了代码的重定位,但是注意!我们前面的重定位其实是假的,我们只过是把代码从片内内存复制到DDR中!因为我们的NAND 还没有初始化,而完整的程序在NAND FLASH中,所以我们当时没办法将完整程序复制到内存中,之所以进行了重定位是为了理解重定位的过程而已!这一章我们就来初始化NAND FLASH并且真正的实现从NAND FLA

2014-03-05 20:46:54 1179

原创 tiny6410裸机实验第5章--------------DDR(代码)

【说明】              根据上一节介绍的原理,很容易写出DDR的初始化代码,这节附上代码,包括代码重定位,以及初始化DDR。 【初始化DDR】                common.h...包含了一些通用宏定义                  #ifndef __COMMON_H#define __COMMON_H#define vi *(

2014-03-05 15:45:48 1174

原创 tiny6410裸机实验第5章--------------DDR(初始化原理)

【说明】                前面我们介绍了地址相关的一些概念以及地址无关码的概念,我们知道了,当程序超过了8KB的时候,我们得把程序复制到DDR中运行,但是,DDR要使用是要先初始化的。6410带有DRAM控制器,它在初始化之后可以让我们对DDR的访问变得十分方便。。。这里我们要初始化2个东西,也就是DRAM控制器,以及DDR本身。 【怎么初始化】

2014-03-05 15:36:58 1213

原创 C语言小细节---------const变量

【说明】              我们知道const 是关键词可以将一个变量声明成常量,即它的值不可改变,那如果是要声明一个指针 指向常量怎么办?又或者指针本身是常量又怎么声明? 【最简单】              const int a = 1;              int const a  = 1;              上边这2种方法没有任何区别,都是声

2014-03-05 12:08:28 733

原创 【静态链接】第2章---------------------静态链接过程(符号解析与重定位)

########  该系列博文为书籍《程序员的自我修养》的笔记 ########## 【说明】              在前面我们说到,重定位是静态链接的核心,那么这一节就重点介绍重定位。关于动态链接,其实动态链接比静态链接复杂得多,但是百变不离其宗,动态链接搞来搞去还是要弄符号重定位,只不过形式有点不一样,还有就是可能是在运行时进行的链接,这是后话。待复习到后面的时候就晓得啦。重点

2014-03-03 21:09:43 1481

原创 【静态链接】第2章---------------------静态链接过程(空间地址分配)

########  该系列博文为书籍《程序员的自我修养》的笔记 ##########【说明】              静态链接相对动态链接来说要简单得多,就是把几个输入目标文件加工后并成一个输出文件,但是这中间涉及到很多问题,比如对于符号的引用要如何处理,又比如各个目标文件的内容要如何在可执行文件中排列,这一章就来谈谈这些内容,但是首先我们先要来认识什么是“空间”,以及“地址”的管理。

2014-03-03 18:48:56 1170

原创 【静态链接】第2章---------------------目标文件(弱符号与强符号)

########  该系列博文为书籍《程序员的自我修养》的笔记 ########## 【说明】              有时我们在程序中一不小心重复定义了2个名字相同的变量,比如在文件A.c中定义了一个int  a , 在B.c 也定义了一个,那么在编译的时候就会出现符号重复定义错误,这种符号称之为“强符号”,而与之对应的就是“弱符号”,这两种符号的区别是这节的重点! 【区分

2014-03-03 12:25:31 964

原创 【静态链接】第2章---------------------目标文件(符号)

########  该系列博文为书籍《程序员的自我修养》的笔记 ########## 【说明】                链接中最基本的概念,就是符号了,如果没有符号,链接是没办法进行的,既然这么重要,当然要来一篇总结一下啦。 【符号的分类】                当目标文件A.o中引用了B.o的 一个变量(或者函数)的时候,其实就是引用了B.o 中的符号,在编

2014-03-03 00:09:45 1104

原创 【静态链接】第2章---------------------目标文件(ELF格式之重定位表与字符串表)

########  该系列博文为书籍《程序员的自我修养》的笔记 ##########【说明】             在前面的例子中,其实我相信大家看到好奇这个.rel.text 段是什么,这一节就对其进行简单的介绍,由于它和链接相关,具体内容要放后面文章中介绍。另外,还有一个段叫.shrtab 还有 .shstrtab 他们分别叫“字符串表”    和  “段表字符串表”,这

2014-03-02 23:17:58 1345

原创 【静态链接】第2章---------------------目标文件(ELF格式之段表)

########  该系列博文为书籍《程序员的自我修养》的笔记 ##########【说明】             前面我们介绍了文件头,里面含有大量文件的信息,其中有一个e_shoff 成员,叫做段表偏移,它来指示段表在文件中的偏移值。【段表是什么】             我们前面看到了,ELF文件中把指令和数据分成了很多段,比如.text比如.data等

2014-03-02 22:44:28 1305

原创 【静态链接】第2章---------------------目标文件(ELF格式之文件头)

########  该系列博文为书籍《程序员的自我修养》的笔记 ##########【说明】             前篇文章,我们对目标文件进行了简单的介绍,并利用一个例子让大家对目标文件内部内容有了了解。我们刚才是在linux下做的实验,用的是ELF格式的目标文件,那这个ELF格式到底是怎么定义的呢,它内部到底有什么呢,在这节及后面的文章中,将一步一步剖析ELF格式,了解作

2014-03-02 21:30:18 1417

原创 【静态链接】第2章---------------------目标文件(它是什么)

########  该系列博文为书籍《程序员的自我修养》的笔记 ##########【说明】             我们知道,在windows下和在linux有一点是一样的,那就是我们的源代码都要编译,链接成可执行文件,而在链接之前,我们需要把各个源代码编译成目标文件,在linux下是.o后缀,显然这些目标文件是有格式的,而不是单单包含着指令和数据。这一章就来介绍目标的格式,

2014-03-02 15:59:15 1215

原创 Y86小实验————模块概述

【说明】              这个Y86小实验 总计 3300行代码,用标准C写的。所以其实在windows上也能编译运行,这一章就来简单讲一下各个模块的作用。 【AS汇编器】             1】address.c                   用来管理链接地址,其实在这里就是指令应该放在内存什么位置                   这个模块实现了

2014-03-01 16:43:48 2252

原创 Y86小实验————引言

【说明】             前些天拜读《深入理解计算机系统》这本神作,读到第四章的时候,作者提出了一个迷你的计算机系统设计原理,称之为Y86 ,我觉得挺好玩的。就自己实现了这个Y86小系统,内容包含两个可执行文件,            一个是汇编器,运行后,可用指定汇编文件(Y86汇编码),来生成一个二进制内存映像,以及一个反汇编文件用于观察。           一个迷你

2014-03-01 15:40:59 3628

原创 tiny6410裸机实验第5章--------------DDR(代码重定位)

【说明】              前面我们说过,NAND启动的时候,6410会把NAND中前4页每页2KB(而不是前8KB,这里很多人理解错)复制到片内内存中,从物理地址0开始运行,那我们就有个问题了,如果我们的程序超过8KB怎么办?显然超过8KB的部分不会复制进片内内存,那超过8KB的部分在哪运行呢?这就是这节的要介绍的,代码重定位。【DDR】              什

2014-02-25 13:45:25 1006

原创 tiny6410裸机实验第5章--------------DDR(链接脚本)

【说明】             前面我们对链接的过程没有进行控制,我们在makefile中直接指定链接地址从0开始,这是因为6410如果是nand启动会把nand 前4页,每页2KB复制到片内内存中,片内内存地址从0开始,这里0指的是物理地址,所以我们的链接地址就会等于物理地址,程序就可以在片内内存正常运行,这一节我们学习一下利用所谓的链接脚本对链接进行控制,其实即使是默认的链接过程也是依赖

2014-02-25 13:15:47 1153

原创 tiny6410裸机实验第5章--------------DDR(物理地址,链接地址,虚拟地址,地址无关码)

【说明】             在后面的学习中,我们将遇到链接地址概念以及一种称为链接脚本的文本文件,那么什么是链接地址呢,他和我们的物理地址又有什么关系呢。             其实链接的技术细节十分复杂,我的另一系列博文中有关于链接的学习笔记,大家可以看看,那是对《程序员的自我修养》这本书的笔记,也推荐大家看这本书。 【物理地址】            物理地址就是指

2014-02-25 00:11:49 1421

原创 【静态链接】第1章---------------------概述

【说明】             我们在linux下学hello world时候,是直接用GCC编译,然后运行的,但是,要从源代码 到可执行文件显然不是一件容易的事,GCC到底都干了些什么呢,这一节,我们简单介绍从源代码到可执行文件的要经过哪些步骤!             该系列博文为书籍《程序员的自我修养》的笔记【预处理】               还记得C语言教科书中对#i

2014-02-24 22:03:04 863

Y86 小实验 《深入理解计算机系统》第四章

我自己对《深入理解计算机系统》第四章Y86的实现。包含一个汇编器,可以解析汇编文件到机器码(Y86指令集) 另外包含一个迷你虚拟机,执行汇编器生成的二进制内存映像,执行后打印虚拟机状态和内存的改动情况。自己只测试了书中带的汇编例子,大家如果发现BUG 请给我留言,谢谢啦 http://blog.csdn.net/linux_for_you

2014-03-01

空空如也

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

TA关注的人

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