[OS64][031]实验操作:程序7-3 移植到物理平台 U盘启动

学习笔记

使用教材(配书源码以及使用方法)
《一个64位操作系统的设计与实现》
http://www.ituring.com.cn/book/2450
https://www.jianshu.com/p/28f9713a9171

源码结构

  • 配书代码包 :第7章 \ 程序 \ 程序7-3
  • 参考目录:7.4 U盘启动

实验操作

零、将U盘制作成 USB-FDD 启动模式 + FAT12文件系统

  • 参见书本 《7.4 U盘启动》,使用软件 DiskGenius,将U盘制作成USB-FDD 启动模式 + FAT12文件系统

http://www.diskgenius.cn/

一、 根据U盘信息,修改配书包里的源码

  • 黄色标注部分,我的U盘总容量32MB簇大小默认是8192字节
查看自己制作好的U盘的信息

参照U盘的信息修改源码

  • ;注释部分是配书源码的数值 以及 一些说明)

boot.asm

SectorNumOfRootDirStart equ 19      ;SectorNumOfRootDirStart    equ 25 根目录区起始扇区号
SectorBalance       equ 23          ;SectorBalance      equ 23  其实是用不到了,后面会有代码专门算这个值


    BPB_SecPerClus  db  0x10        ;BPB_SecPerClus db  0x8  每簇扇区数
    
    BPB_TotSec16    dw  0xbc43      ;BPB_TotSec16   dw  0x7d82 总扇区数
    BPB_Media   db  0xf0
    BPB_FATSz16 dw  0x9             ;BPB_FATSz16    dw  0xc FAT扇区数
    BPB_SecPerTrk   dw  0x3f        ;BPB_SecPerTrk  dw  0x3f  每磁道扇区数
    BPB_NumHeads    dw  0xff        ;BPB_NumHeads   dw  0xff 磁头数
    
Label_Go_On_Loading_File:
    add bx, 0x2000  ;add    bx, 0x1000 ;add bx, [BPB_BytesPerSec] 这里要填入簇的大小

  • BPB_SecPerClus db 0x10 每簇扇区数 等于 簇大小 8192 除以 每扇区字节数512 = 16,写成十六进制0x10
  • 我的U盘总容量32MB,制作成USB-FDD启动模式+FAT12文件系统之后,一簇有16个扇区,即每调用一次读软盘功能call Func_ReadOneSector,都会读入16个扇区的数据,也就是十进制8192字节(0x2000),从而缓冲区的偏移在一次读操作后要add bx , 0x2000

fat12.inc 与 boot.asm 保持一致

SectorNumOfRootDirStart equ 19      ;SectorNumOfRootDirStart    equ 25
    BPB_SecPerClus  db  0x10        ;BPB_SecPerClus db  0x8
    BPB_TotSec16    dw  0xbc43      ;BPB_TotSec16   dw  0x7d82
    BPB_FATSz16 dw  0x9             ;BPB_FATSz16    dw  0xc

loader.asm 每读一簇就是8192字节=2000h字节

Label_Go_On_Loading_File:
. . .
    mov cx, 2000h       ;mov    eax,    0x1000 这里应该填入簇的大小
. . .

    loop    Label_Mov_Kernel

二、开启虚拟机

  • 鼠标聚焦在虚拟机,再插入U盘,CentOS识别后,桌面会出现图标


    U盘图标
  • 进行命令行操作,两个make,一个dd/dev/sdb 就是U盘设备
[anno@localhost 7-3 32MB]$ ls
bootloader  kernel

[anno@localhost 7-3 32MB]$ cd bootloader
[anno@localhost bootloader]$ make
nasm boot.asm -o boot.bin
nasm loader.asm -o loader.bin
 
[anno@localhost bootloader]$ sudo dd if=boot.bin of=/dev/sdb bs=512 count=1 conv=notrunc
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00673206 s, 76.1 kB/s

[anno@localhost bootloader]$ ls
boot.asm  boot.bin  fat12.inc  loader.asm  loader.bin  Makefile

[anno@localhost bootloader]$ cd ../
[anno@localhost 7-3 32MB]$ cd kernel
[anno@localhost kernel]$ make


[anno@localhost kernel]$ ls
cpu.h    gate.h       interrupt.h  linkage.h  memory.h  ptrace.h  trap.c
entry.o  head.o       interrupt.o  main.c     memory.o  system    trap.h
entry.s  head.s       kernel.bin   main.o     printk.c  task.c    trap.o
entry.S  head.S       Kernel.lds   Makefile   printk.h  task.h
font.h   interrupt.c  lib.h        memory.c   printk.o  task.o

  • 将生成的 loader.bin 以及 kernel.bin 复制到U盘

手动复制或者使用cp命令都可以


将生成的 loader.bin 以及 kernel.bin 复制到U盘
  • 完成后,选择弹出U盘

三、将真实机器的启动模式设置成 USB-FDD

  • 需要注意的是,平常装系统,一般都是选择USB-HDD为首选,但是这里现在的U盘我们模拟的是USB-FDD启动模式,也就是模拟它是一个软盘,在BIOS的启动首选项里面,要选择USB-FDD启动为最优先的
将真实机器的启动模式设置成USB-FDD

四、关机状态下,插入U盘

关机状态下,插入U盘

五,再开机

  • 看到熟悉的画面,各种信息都顺利输出了


    再开机
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,961评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,444评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,009评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,082评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,101评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,271评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,738评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,395评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,539评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,434评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,481评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,160评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,749评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,816评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,038评论 1 256
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,548评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,140评论 2 341

推荐阅读更多精彩内容