《30天编写操作系统》 如何制作U盘启动

笔者看了《30天编写操作系统》 之后,很想装一下B,所以一直很想让《30天编写操作系统》 的程序不只是在虚拟机里面运行,而且还希望将这个OS放到U盘上,从U盘启动,网上寻觅了各种方法均未实现我装B的伟大理想,所以只能自己动手了。下面是效果图,我的测试电脑屏幕坏掉了,不过还是看的清楚


下面的是步骤


1——首先到http://zhidao.baidu.com/share/cc93285a8dc709f2cbd8af39eaae61bd.html  下载U盘格式化成为软盘的工具,将U盘格式化

2——将下面的ipl的代码替换你的ipl代码(其实整个移植到U盘的核心是修改ipl代码)

; haribote-ipl
; TAB=4
CYLS EQU 10 ; 十个柱面
ORG 0x7c00 ; MBR在内存中的位置为(DS=0,0x07c00=DS+0x7c00)


; 系统相关设置信息
JMP entry
DB 0x90
DB "HELLOIPL" ; name of boot sector
DW 512 ; size of sector
DB 1 ; f
DW 1 ; FAT first sector
DB 2 ; FAT number
DW 224 ; root dir size
DW 2880 ; disk size in sector
DB 0xf0 ; disk type
DW 9 ; FAT length
DW 18 ; 18 sector each road
DW 2 ; disk up down 
DD 0 ; no partition
DD 2880 ; reclaim the disk size
DB 0,0,0x29 ; reserve
DD 0xffffffff ; might be column 
DB "HELLO-OS   " ; disk name
DB "FAT12   " ; disk fs type
RESB 18 ; reserve 18 byte


; init程序入口


entry:
MOV AX,0
MOV SS,AX
MOV SP,0x7c00 ; heap stack init
MOV DS,AX ; 初始化代码段的基地址在0x00000


; 读取磁盘到内存0x08200的位置


MOV AX,0x0820
MOV ES,AX
MOV CH,0 ; cylinder number
MOV DH,0 ; disk head number
MOV CL,2 ; sector number
readloop:
MOV SI,0 ; failed times
; retry to read disk if failed, read one sector
retry:
MOV AH,0x02 ; AH=0x02 : 读磁盘
MOV AL,1 ; 1扇区
MOV BX,0
;MOV DL,0x00 ; A驱动器
MOV DL,0x80
INT 0x13 ; 调用BIOS的函数例程
JNC next
ADD SI,1
CMP SI,5
JAE error
MOV AH,0x00
;MOV DL,0x00
MOV DL,0x80
INT 0x13
JMP retry
next:
MOV AX,ES
ADD AX,0x0020 ;每读取一个扇区内存向后偏移(ES+=0x0020)<<4
MOV ES,AX
ADD CL,1
CMP CL,62 ;62个扇区
JBE readloop
MOV CL,1
ADD DH,1
CMP DH,2
JB readloop
MOV DH,0
ADD CH,1
CMP CH,4
JB readloop
MOV [0x0ff0],CH
JMP 0xc200
error:
MOV SI,msg
JMP putloop
ok:
MOV SI,msg1
putloop:
MOV AL,[SI]
ADD SI,1 ; SI设置为1
CMP AL,0
JE fin
MOV AH,0x0e ; 在teletype模式下显示字符
MOV BX,15 ; 页码BH=0x00,前景色BL=0x0f
INT 0x10 ; BIOS显示服务
JMP putloop
fin:
HLT ; 暂停处理器
JMP fin
msg1:
DB 0x0a, 0x0a ; 换行符
DB "READ OKKKK"
DB 0x0a ; 换行符
DB 0
msg:
DB 0x0a, 0x0a ; 换行符
DB "load error"
DB 0x0a ; 换行符
DB 0


RESB 0x7dfe-$ ; (0x7dfe-当前位置)都填充0x00


DB 0x55, 0xaa


3——编译的到你的img文件

4——利用ubuntu或者其他系统的dd命令把你的img拷贝到U盘上( dd if=XXXX.img of=/dev/sdb)PS:/dev/sdb 这个是我的U盘在我的系统上的名称,也有可能是其他的名称,视具体情况而定

5——把你的U盘插在真机上,打开电源(我的电脑是F12选择启动项)选择U盘启动

6——就可以看到在真正的电脑上运行的效果了

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值