30天自制操作系统
文章平均质量分 56
pi408637535
这个作者很懒,什么都没留下…
展开
-
在开发操作系统中创建并读写ima或img映像文件
操作系统开发者的新手经常会遇到一个问题,那就是怎样建立ima文件(即软盘映像,也可能是img格式的)。曾经我也在这个问题山浪费了很多不必要的时间。现在我将解决方法写出来,希望可以让大家快速的解决这个困难。 实际上,ima文件(或img)就是严格按照软盘的格式来的。而软盘的数据组织格式就是FAT12文件系统。也就是说,我们要读文件就是按照FAT12文件系统的规则来读!而不要按照扇区来读!因转载 2014-08-03 22:31:08 · 3188 阅读 · 0 评论 -
汇编语言->Makefile
初始:打开附带光盘-->tolset--->复制到自己喜欢的目录(随意) Eg:D:\30_OS\tolset在“30_OS”这个目录下 新建folder,可以命名"hellos0" 然后把 复制到hellos0中(asm.bat 把 .nas -> .img) 此时你可以选择用VM来加载 .img也可以把复制到hellos0中,点击运行(qemu)Makefile:原创 2014-09-08 00:26:45 · 517 阅读 · 0 评论 -
内存布局
0x00000000 - 0x0009ffff : RAMAT互換機では、この部分がフル実装されていないものはない? -- ATになったのって、286マシンからでしたっけ?(こめんと欄参照)0x000a0000 - 0x000bffff : ビデオアクセス用アドレス空間0x000c0000 - 0x000c7fff : ビデオBIOS?0x000c8000 - 0x000dffff :转载 2014-08-13 11:24:17 · 470 阅读 · 0 评论 -
bochs 的安装
成功在Ubuntu 14.04下源码编译安装bochs 2.4.5,下面来说说安装的过程1.先下载 bochs-2.4.5.tar.gz 官网已经进不去了自己去百度上找吧2.准备工作,安装bochs依赖的软件: sudo apt-get install build-essentialsudo apt-get install xorg-devsudo apt-get i原创 2014-08-25 15:40:46 · 1352 阅读 · 0 评论 -
自制操作系统 第1步
//这已经是我第4次发起向操作系统的进攻,虽说前三次都以失败而结束但是却积累了很多经验。虽说这些经验在面试,和做项目中都未曾有用过,但是当我现在慢慢临近毕业,在嵌入式Linux开发中发现 以前积累的失败经验都有用了起来,这也让我重新燃起了希望。然后毅然辞掉了实习工作,呆在家里来完成我大学的梦想。 千万不要失败啊//我的操作系统分三步 第一步主要是完成 这个比较简单 相比 Linu原创 2015-01-29 22:04:46 · 588 阅读 · 0 评论 -
自制操作系统 第2步
!boot.s bootsect.s框架 .globl begtext,begdata,begbss,endtext,enddata,endbss .text begtext: .data begdata: .bss begbss: .text BOOTSECT = 0x07c0 SETUPLEN = 4SETUPSEG = 0x原创 2015-02-02 02:03:01 · 447 阅读 · 0 评论 -
自制操作系统 第3步
//弄了很久 对gdt,ldt还是一头雾水,看“orang‘s ”,Linux-0.12 内核解释也没弄懂,这个让我就比较郁闷了,如果直接粘贴代码,那么内核最重要的部分就覆盖过去了,如果继续看吧,又没有什么效果,所以决定还是先曲线通往成功的大道,先来完成30_OS 并把相关对代码的理解粘贴,供大家参考。 还有很多东西来不及发布,等完成了30_OS 再来整理发布; naskfunc; TAB=原创 2015-02-03 02:08:03 · 828 阅读 · 0 评论 -
自制操作系统 第4步
最近有看了一遍,是很认真的看了一遍 不可不说 这位日本作者真的写的是太好了,相比国内,强烈建议各位想写操作系统的,先看日本作者的,谁说做客把所有的编辑工具都给改造了,但是程序的思路真的很好。 不是我吐槽 这本书,要是哪位底子差点,真的就看不懂啊,而且你都再版了还是09年,09年哪里还有软盘这种东西,你不好好用Linux虚拟软盘让我们这些刚入门的情何以堪。算了这几天看书还是收益颇多对80x86相关操原创 2015-02-06 02:31:15 · 436 阅读 · 0 评论 -
自制操作系统 第5步
//真的是死活熬过来了,总算能从实模式-》保护模式了 这个让我耗费了太长太长时间了,天天熬夜还好是假期要不然真的受不了//开发编译器 实模式下nasm,保护模式gcc C语言 gcc //开发环境 Ubuntu//虚拟机 qemu,还有Bochs 我都用了,因为boch 感觉有点慢,但是有日志功能//先去欢呼以下,明天开始晚上 把图形,内存,idt,gdt,tss都加上,原创 2015-02-08 20:52:59 · 448 阅读 · 0 评论 -
Linux下用C语言调用GAS汇编——综合实例
//转载 地址 http://mirage1993.blog.51cto.com/2709744/1560680//这个不是内联,但是对理解C和汇编的混合使用提供思路 紧接上一篇博文,上篇写的是用GAS汇编调用C语言,这次讲用C语言调用GAS汇编。在内核编写中主要用的是前者,但是在日常程序优化中,主要用的是后者。 还是同样的功能,实现两个数值的交换,把参数从C语言转载 2015-02-10 11:58:46 · 909 阅读 · 0 评论 -
自制操作系统 第6步
过了这么多天才来写博客。先说说战果:操作系统的基本以完成。 但是当我转向Linux-0.12时,发现你要去懂大多的 i386 的硬件机制(在Linux完全注释中有介绍),makefile(一个能写出优良的makefile),然后就是你要转向的存储介质(这个很重要 关系到你的代码存放问题),还有很多我先一一列出:makefile,gas,内嵌,c->汇编时的格式,数据结构,i386硬件(必须要非常清原创 2015-02-16 16:47:50 · 409 阅读 · 0 评论 -
自制OS 第7步
今天开始攻克毕业设计,也就是开始写Linux驱动还有相关应用,刚复习了怎么写驱动突然发现国内关于Linux驱动的书籍真的太...简直就是填鸭式,虽说Linux-2.6的代码已经过百万了,但我觉是作为出书人,你至少应该说清 驱动为什么这么写 理论是什么吧! 比较愤怒,现在回想 真的应该把 毕业设计 改成 Linux系统制作。 争取花上10天,简单写一下毕业设计。 然后花上一个月半专供 Linux-0原创 2015-03-02 20:12:05 · 602 阅读 · 0 评论 -
令人迷惑的AT&T的jmp:直接跳转和间接跳转
最近看链接器源码中,对位置无关代码PIC(共享库)的链接问题,发现对call和jmp很多不常用的用法,这里试验并总结了一下各种用法。我们最常用的jmp形式,就是 jmp后面跟个标签!这个没什么可说的!假如标签叫做mylabel,它的地址是0x8048377,而且有个全局变量b,b存储的内容就是mylabel的地址,而b的地址是0x80494A8。即有这样的赋值(加载)语句:转载 2014-08-09 16:58:09 · 3150 阅读 · 1 评论 -
CALL与JMP有什么区别
CALL调用一段代码,通常这段代码执行到最后有个ret指令,执行该指令就返回到CALL的下一条指令了。JMP跳转到另一个地方运行,通常不会再转回来了。call是子程序调用指令,和ret子程序返回配对使用。jmp 是无条件转移指令,用做强行跳转。转载 2014-08-09 16:42:35 · 3220 阅读 · 0 评论 -
内核 汇编 img文件格式 FAT12格式
最近搞了下汇编。最初还是看了一本病毒的书,里面代码都是汇编的,很多看不懂,如int 21h等,于是乎就学了下汇编,收获颇大。建议想学内核的学下汇编先。汇编有好几种,主要是格式的问题,有intel格式和AT&T格式的,各有自己的特点,很难说孰优孰劣。主要的环境有这么几种,masm、nasm、gas(gcc 的一部分)。后来看了一本write your own os 的书,照着做,写了个boo转载 2014-08-03 22:27:15 · 2004 阅读 · 0 评论 -
qemu 安装LFS
很早以前就使用过过qemu,很多手机的模拟器用的都是qemu,但是当初发现qemu一启动总是占用100%的cpu,所以当初对qemu没有太多的好感,后来学习linux内核的时候,发现qemu可以单步跟踪内核。不是kgdb,而是qemu自带的cpu仿真调试功能,这个非常不错,准备着手研究一下。以后学习linux代码也就方便多了。ubuntu apt 安装的qemu不支持kqemu。所以需要自转载 2014-08-09 03:32:52 · 1333 阅读 · 0 评论 -
linux下汇编语言编译执行
1. 如果使用gcc编译汇编文件的话, 使用main符号作为入口( gcc -o a.out a.S)2. 如果使用as和ld命令编译汇编的话, 使用_start符号作为入口( as test.S -o test.o; ld test.o -o a.out) 以上生成两个文件都是ELF格式的可执行文件, 只不过第一个会自动添加一些环境的初始化代码. 对于ELF文件转载 2014-08-08 13:06:19 · 513 阅读 · 0 评论 -
ELF文件和BIN文件
文件的内容:1. BIN文件是 raw binary 文件,这种文件只包含机器码。2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。所以ELF文件的体积比对应的BIN文件要大。文件的执行:1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; FILE *fp = fopen("vmli转载 2014-08-08 13:37:21 · 641 阅读 · 0 评论 -
objcopy/objdump/readelf等工具使用
1. objcopy 复制及修改目标文件 -I : 输入文件的格式(binary, elf32-i386等) -O : 输出文件的格式 -B : 二进制文件体系结构(i386, arm等) -R : 删除不用的section(.comment .note 等) -j : 仅留下有用的section(.text转载 2014-08-08 13:56:38 · 660 阅读 · 0 评论 -
ELF可执行格式文件转换成a.out格式分析工具
elftoaout:分析工具:hexdump 首先当属hexdump,这是一个强大工具,它可以把可执行文件或目标文件转换成16进制数打印出来。例如:lzel@lzel-laptop:~/works/ASM/3/elftoaout$ hexdump -s 0 -n 52 -C e_elf00000000 7f 45 4c 46 01 01 01 00 00 00 00 00转载 2014-08-08 13:02:07 · 1913 阅读 · 0 评论 -
qemu 安装LFS
很早以前就使用过过qemu,很多手机的模拟器用的都是qemu,但是当初发现qemu一启动总是占用100%的cpu,所以当初对qemu没有太多的好感,后来学习linux内核的时候,发现qemu可以单步跟踪内核。不是kgdb,而是qemu自带的cpu仿真调试功能,这个非常不错,准备着手研究一下。以后学习linux代码也就方便多了。ubuntu apt 安装的qemu不支持kqemu。所以需要自转载 2014-08-09 03:30:00 · 1308 阅读 · 0 评论 -
hexedit使用方法
1、如果没有hexedit安装hexedit;2、打开终端输入hexedit filename;3、打开即可用键盘输入字符,用方向键移动,ctrl+w保存,ctrl+x退出;4、详细用法 man hexedit;转载 2014-08-09 23:45:20 · 31412 阅读 · 0 评论 -
Linux 下制作虚拟软盘镜像
3.5寸1.44M软盘结构: 2面、80道/面、18扇区/道、512字节/扇区 扇区总数=2面 X 80道/面 X 18扇区/道 = 2880扇区 存储容量= 512字节/扇区X 2880扇区 = 1440 KB =1474560B1. 创建虚拟软盘镜像文件 下面三条命令中的任意一个可以建立一个虚拟的软盘镜像文件,结果完全一样:转载 2014-08-09 17:36:07 · 687 阅读 · 0 评论 -
1.44 软盘
之前写过一个关于fat12文件系统的学习笔记,刚学习了下3.5英寸软盘的结构,顺便记下。首先软盘的结构,有两面,每面有80个磁道,每个磁道包含18个扇区,每个扇区512在字节。所以对于软盘来说其容量的计算便是2*80*18*512/1024=1440K下面说下软盘的一个很关键的地方,就是它的磁道分布,这个影响到通过扇区来计算磁头柱面等关键参数的方法,理解了这个就很容易理解后转载 2014-08-10 00:58:01 · 1236 阅读 · 0 评论 -
arm 自制OS
因为要开始弄毕业设计了,所以把主要精力开始集中到arm平台,又因为前面一直在写 基于x86的OS,所以在s3c2440上写了一个简易的OS,本来想直接在Ubuntu上直接开发,但是由于本人的的makefile水品不加,而且nand flash 太难了 直接导致流产在Ubuntu上开发,没办法只能转到window下的mdk平台。 当转换平台后才发现 原来在window下开发嵌入式真的是 百害人而无一原创 2015-03-01 21:21:46 · 840 阅读 · 0 评论