文章转载自 http://blog.csdn.net/h397916230/article/details/9732425
暑假学习小日本的那本书:30天自制操作系统
更多学习中的问题、资料,群里分享
developing environment:ubuntu
关于u盘启动自己做的操作系统的原因:
我想大部分分的学习者和写Os的人都有这样的想法,为什么现在大部分的教程都是拿软盘来说做仿真,我们的电脑上面也没有软盘,搞来搞去的系统,到头来只能仿真,没有什么意思。能在真机上跑跑自己写的系统才是有意思的事情。当然,这也是我自己的想法。
想在真机上跑,就需要一台slave机(另一台做实验的电脑),这有点交叉编译的感觉了。如果在slave上有硬盘,可以把我们开发的系统写到slave机的硬盘上,但是这样很麻烦,每次改个程序,想看效果,都需要把程序搞到slave机的硬盘上,这样也不太实际。所以这样想来,真正开发操作系统的工程师应该还在用仿真器,因为这样快,只有到了一个操作系统有实质变化的时间,工程师才会把开发的操作系统写到slave机的硬盘上,然后进行真机测试。而且为了保证可以直接把开发的操作系统文件直接复制到硬盘上,硬盘上面应该早就有grub这样的bootloader,直接指定我们操作系统的文件在哪里,就可以启动了。这里我也想了想,我们30天的开发的操作系统,能不能用grub来复制到内存,然后启动。但是这是后面的研究。也就是把grub写到u盘上,然后在slave机上插好u盘,读取我们写的操作系统的文件到内存,然后运行就可以了。把搬运操作系统的工作交给了grub这样的bootloader,开发操作系统的人员就可以考虑操作系统是如何被引导到内存的。所以现在的操作系统文件如elf文件,中就包含自己的代码要在内存的哪里运行的地址。grub读取到这个内核要在哪里运行,然后把代码部分copy到指定的ram地址就可以了。
对于我们只是学习和玩,把开发的操作系统内核写到slave机的硬盘上,显然是不太可能的,除非你家有一台完全闲置的机器。这样才能可能让你随便玩弄,包含硬盘在内。所以我们需要从u盘启动30天自制操作系统的代码,在真机上跑起来完全是自己写的代码,感觉是不一样的。一个字,爽。花了一天的时间,查资料,带猜测的对u盘的读取做了一些实验。终于把第四天的代码修改的可以从u盘启动了。在开发,学习的过程中,深感ubuntu的强大好用。
下面是从u盘启动真机运行的图片:
下面大体讲解一下从u盘启动的研究过程。
1:大家都知道要从u盘启动,就是怎么读U盘,其实和读软盘差不多,还是用int0x13中断来读u盘,只是此时的dl寄存器代表的 驱动器号有所不同。
但是我们怎么知道我们的电脑从u盘启动时,dl=多少呢,因为u盘是后于floppy出现的产生,所以老的bios机器是不支持从u盘启动的。u盘是模拟成从硬盘或是软盘启动。
但是有一种方法可以从u盘启动时,知道你的dl=??,因为当你把bios设置成u盘启动时,u盘的前512字节就复制到0x7c00外了,注意好好理解这里,bios把u盘的前512字节复制到内存,所以当bios把控制权刚交给0x7c00处代码时,dl中的值是一个有效的值,就是我们需要知道的值, 从u盘启动的驱动器号。所以我写了个512字节的程序,用来显示寄存器的数值到显示器,当从u盘启动时,这512字节的程序被bios加载到内存后,我马上将dx的值显示到screen。这样一来我们就知道了dl是多少了。后来想想,也没有必要显示dl,只要保存到内存中就行了,读取u盘后面扇区时,再从内存读到dl.
2:还有一点,也是非常重要的一点,我们知道软盘的大小的组织方式: 80cylinders x 2heads x 18sectors x 512 bytes
但是我们u盘随便一个就比软盘容量大不少,但是u盘也是用chs来寻找扇区的。所以我们要知道我们自己的u盘有有多少个cylinders,heads,sectors x512bytes
还是利用bios提供的一个中断,可以将我们u盘有多少个cyliners and heads and sectors显示出来,这个中断服务程序是 int 0x13 /ah=0x08 ,如果你要读u盘的容量组织情况
dl 赋值第一步得到的值。然后调用int 0x13就行了。关于u盘的chs的值都保存在寄存器中,所以我写的显示寄存器的程序又起作用了。调用了int 0x13 /ah=0x08之后,就可以根据寄存器的值算出你的u盘的chs了。
我的u盘的信息如图: 从下图可以看到,我们主要关心cx,dx寄存器,u盘的chs信息就在这两个寄存器了。
得到了u盘的chs,得到了读u盘的dl号,把u盘上的想要的内容读到内存就不是什么难事了。在30天的代码中小做修改就可以了,下面是我修改的部分,其它部分基本没有变。
readloop mov si,0 retry: mov bx,0 call cp2ram jnc next ;copy sucessfully add si,1 ;copy failed cmp si,5 jae error mov ah,0x00 ;reset disk ;mov dl,0x00 ;bootfrom floppy ;mov dl,0x80 ;bootfrom usb int 0x13 jmp retry next: mov ax,es add ax,0x0020 mov es,ax add cl,1 ;sector++ cmp cl,63 jbe readloop mov cl,1 ;sector 是从扇区1形始 add dh,1 ;head++ cmp dh,10 jbe readloop ;mov dh,0 ;add ch,1 ;cylinder++ ;cmp ch,CYLS ;这里用了一个宏定义 ;jb readloop mov [0x0ff0],ch ;把10cylineder保存到内存0x0ff0位置处 jmp ok
可以看到:
因为我的u盘是1014cylinders x 60heads x63sectors x512bytes,所以主要是把cl, dh,这些值改了下,然后把生成的镜像dd到U盘上就可以了,享受自己动手的乐趣吧。
相关推荐
《30天自制操作系统——用U盘启动自制系统》所用的工具 文章地址:http://blog.csdn.net/nonekey/article/details/8758715 以上工具均来自互联网!
手写一个X86操作系统实战:从零开始构建一个U盘启动的自制操作系统 这个标题可能有点大了:-) 一个操作系统至少应该有自己的文件系统和进程机制,不过我们的最终目标应该是这个~ 无论如何,看完本文,你应该可以...
u盘启动bt3系统u盘启动bt3系统u盘启动bt3系统u盘启动bt3系统
这时就需要让电脑从全能优盘启动了】要让电脑开机从U盘启动,就像用光盘给电脑装系统要让电脑从光盘启动一样,必须在电脑开机时进行设置,因为电脑主板的差异所以设置的方法也是各不相同,要设置从U盘启动大部电脑都...
中兴新支点操作系统U盘启动安装教程.docx
第一步 让你的U盘启动DOS 格式化软件有很多种 USBOOT HPUSBFW FIASHBOOT是用的最多的三种 HPUSBFW作的HDD启动盘兼容性最好/Flahboot作的ZIp启动盘最好 我比较喜欢用Flashboot 因为启动后盘符为A: 打开FLASHBOOT ...
U盘多系统启动制作教程一步步教你做多系统启动盘-U盘启动教程-U盘量产网
用优盘(u盘)安装操作系统的教程 笔记本, 台式机都可以用
索尼笔记本如何进Bios设置U盘启动,想用U盘装系统的,但就是不会设置U盘启动,该则么办。U盘启动大师教你如何索尼笔记本设置U盘启动,有详细的图文教程。
U盘启动制作,设置以及安装U盘启动到u盘内维护系统。
u易u盘启动盘制作工具量产速度快,实用性强,兼容windows7,xp系统,PE系统下分区简单,维护系统快捷, 是最专业的pe u盘启动盘制作工具。 一、制作简单,几乎100%支持所有U盘一键制作万能启动u盘。 二、制作后工具...
自制U盘自制U盘自制U盘自制U盘自制U盘自制U盘
U盘 制作 启动型 优盘制作 电脑 U盘 制作 启动型 优盘制作 电脑 U盘 制作 启动型 优盘制作 电脑 U盘 制作 启动型 优盘制作 电脑 U盘 制作 启动型 优盘制作 电脑 U盘 制作 启动型 优盘制作 电脑 U盘 制作 启动型 优盘...
随着上网本的普及,没有光驱安装操作系统成了新问题,这里我们介绍一下从U盘启动安装XP的新方法,U盘由于其体积小,在电脑用户中得到了大量的普及,经常用于电脑间的资料对拷,资料备份等,现在我来教大家让U盘增加...
一键U盘启动盘制作工具V1.2(一键U盘装系统)更新: 一键U盘装系统,是为方便电脑技术人员装机、维护电脑而制作的工具。内置了大量的维护工具,安装方便,快速傻瓜化。 一键U盘装系统启动界面工具如下: ...
+读写NTFS分区 Boot DOS ONLY (No Any Drivers) 只启动基本DOS系统 REBOOT YOUR PC 重启计算机 SHUTDOWN YOUR PC 关闭计算机 启动制作方法 一、UBSBOOT制作:把UBSBOOT程序解压缩出来,再把你的优盘插上,按照下面的...
U盘装系统(优盘安装操作系统)图解教程 PDF,一步步图文讲解用U盘安装Windows的整个过程,包括安装前的准备工作,比如将WinPE先拷贝到U盘上,引导文件的导入、BIOS的设置等,相信看了本文以后,你对使用U盘安装系统会...
代码实现的功能与Linux 0 00基本类似 可以在gcc 4 4 3 Ubuntu10 04中所带的编译环境 下通过编译 并顺利从U盘引导启动 ">这是一个极其简单的操作系统实验 包含两部分 第一部分:GNU as编写的 512B的引导扇区代码...
U易U盘启动盘制作工具文字教程 教程目录: 一、三步制作启动U盘 1.下载U易启动盘制作工具、ghost系统文件。...1.设置电脑从U盘启动 2.进入PE安装系统 三、其他功能 1.制作U易装机光盘 2.任意可启动ISO制作启动U盘
mac系统制作启动U盘,安装mac os系统,