`
jjchen_lian
  • 浏览: 86197 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

从你的u盘启动:30天自制操作系统第四天u盘启动学习笔记

 
阅读更多

文章转载自 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盘上就可以了,享受自己动手的乐趣吧。

  • 大小: 686 KB
  • 大小: 578.4 KB
分享到:
评论

相关推荐

    《30天自制操作系统——用U盘启动自制系统》所用的工具

    《30天自制操作系统——用U盘启动自制系统》是一本旨在指导读者亲手构建操作系统的教程,通过30天的学习和实践,使读者能够理解操作系统的基本原理并掌握其开发技术。在这个过程中,使用U盘作为启动介质是实现自定义...

    用U盘(优盘)安装操作系统图文教程

    以下是对“用U盘(优盘)安装操作系统图文教程”的深入解析,旨在帮助用户掌握这一实用技能。 #### 装系统前的准备 在正式开始安装之前,确保手头拥有以下两项关键要素: 1. **操作系统的镜像文件**:这是你想要...

    手写一个X86操作系统实战

    手写一个X86操作系统实战:从零开始构建一个U盘启动的自制操作系统 这个标题可能有点大了:-) 一个操作系统至少应该有自己的文件系统和进程机制,不过我们的最终目标应该是这个~ 无论如何,看完本文,你应该可以...

    索尼笔记本如何进Bios设置U盘启动

    通过上述步骤,你可以成功地在索尼笔记本上设置U盘启动,进而使用U盘来安装新的操作系统。记得在完成系统安装后,再次进入BIOS将启动方式设置回硬盘启动,以保证正常启动新安装的操作系统。在整个过程中,如果遇到...

    设置电脑从U盘启动

    这时就需要让电脑从全能优盘启动了】要让电脑开机从U盘启动,就像用光盘给电脑装系统要让电脑从光盘启动一样,必须在电脑开机时进行设置,因为电脑主板的差异所以设置的方法也是各不相同,要设置从U盘启动大部电脑都...

    U盘启动系统-用于启动电脑重装系统

    U盘启动系统是一种便捷的方法,用于在电脑遇到问题或需要重装操作系统时,通过USB设备进行启动和系统恢复。这种方法避免了使用光盘驱动器,更适应了现代计算机硬件的发展趋势,因为许多新电脑不再配备光驱。下面将...

    HP优盘启动盘格式化DOS启动盘工具内置dos7.1

    这个工具的主要功能是将优盘转换为能够引导计算机进入DOS系统的设备,这对于进行系统恢复、老式硬件维护或安装低级别的操作系统非常有用。 DOS,全称Disk Operating System,是磁盘操作系统,是早期个人计算机上...

    U盘启动盘制作

    U盘启动盘制作是指使用专门的工具软件将操作系统安装到U盘中,使其具有启动功能,从而实现移动式的操作系统解决方案。该技术广泛应用于计算机系统的安装、维护和修复等领域。 本次实验报告的主要内容是使用U盘启动...

    《优盘安装操作系统全攻略》

    ### 优盘安装操作系统的全攻略 #### 一、引言 随着科技的进步和个人电脑的普及,使用优盘安装操作系统已成为一种便捷且高效的方式。本文将深入探讨如何使用优盘来安装操作系统,包括详细的步骤说明、注意事项以及...

    U盘Ghost启动工具制作

    【USB启动Ghost】指的是将Ghost软件集成到U盘启动盘中,使得用户可以直接从U盘启动电脑,然后运行Ghost进行系统备份、恢复或者克隆操作。这对于系统维护人员来说非常实用,因为Ghost可以在不依赖现有操作系统的情况...

    u盘启动大师制作u盘启动教程

    在日常工作中,我们经常需要用到U盘启动盘来进行系统的安装、修复或是进行一些特殊的维护操作。而利用U盘启动大师这样的工具可以非常方便地完成这一过程。接下来,我们将详细介绍如何使用U盘启动大师来制作U盘启动盘...

    U盘PE启动安装操作系统

    ### U盘PE启动安装操作系统的详细指南 在数字化时代,笔记本电脑成为了商务人士与学生群体不可或缺的工具,但随之而来的问题是便携性与性价比之间的矛盾。为了满足那些追求极致便携性的用户需求,市场上出现了大量...

    Blos设置U盘启动图文教程(含笔记本).doc

    U盘启动是一种便捷的系统安装或修复方法,它允许用户将系统镜像文件存储在U盘上,通过设置电脑从U盘启动,进行系统的安装或故障排查。本教程将详细解释如何设置U盘启动,特别针对特定型号的电脑,但请注意,不同电脑...

    超简单U盘启动,制作U盘启动盘

    第一步 让你的U盘启动DOS 格式化软件有很多种 USBOOT HPUSBFW FIASHBOOT是用的最多的三种 HPUSBFW作的HDD启动盘兼容性最好/Flahboot作的ZIp启动盘最好 我比较喜欢用Flashboot 因为启动后盘符为A: 打开FLASHBOOT ...

    Linux制作UEFI启动的系统盘U盘笔记.docx

    ### Linux制作UEFI启动的系统盘U盘知识点详解 #### 一、背景介绍与预备知识 在当前的技术环境中,UEFI (Unified Extensible Firmware Interface) 已经成为现代计算机硬件的标准固件接口,逐渐取代了传统的BIOS。...

    U盘安装龙芯服务器操作系统B20的两种方法.docx

    U盘安装龙芯服务器操作系统B20的两种方法 在本文中,我们将讨论如何使用U盘安装龙芯服务器操作系统B20的两种方法。首先,我们需要了解龙芯服务器操作系统的镜像文件和U盘的相关信息。 龙芯服务器操作系统镜像文件 ...

Global site tag (gtag.js) - Google Analytics