目标

  • 制作一个光盘实现qemu下操作系统的引导

储备知识

  • df命令:列出文件系统的整体磁盘使用量

  • du命令:常用于计算目录所占容量
    -h :以(G/M)方式显示容量
    -k:以KB方式显示
    -m:以MB方式显示

  • mkfs命令:使用指定的文件系统格式化磁盘
    -t :接文件系统格式,如ext3,ext2,vfat等

  • mount命令:将文件系统挂载到指定的目录下

  • losetup命令:连接文件与循环设备(/dev/loop)
    详解
    -d 卸除设备。
    -e<加密方式> 启动加密编码。
    -o<平移数目> 设置数据平移的数目。
    循环设备可把文件虚拟成区块设备,籍以模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。

  • /dev/loop设备
    /dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。
    在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。
    这种设备文件经常被用于光盘或是磁盘镜像(IOS、IMG)。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。
    在一个目录上挂载包含包含文件系统的文件的步骤:
    使用一个循环设备(/dev/loop)连接文件(使用命令 losetup
    在目录上挂载该循环设备(使用命令 mount)

  • 其他/dev虚拟设备

/dev/null: “空”设备,也有人称它为黑洞。任何输入到这个“设备”的数据都将被直接丢弃
最常用的用法是把不需要的输出重定向到这个文件。
/dev/zero:零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)。常用来生成一个特定大小的文件。
/dev/random和/dev/urandom:随机数设备,提供不间断的随机字节流。二者的区别是/dev/random产生随
机数据依赖系统中断,当系统中断不足时,/dev/random设备会“挂起”,因而产生数据速度较慢,但随机性
好;/dev/urandom不依赖系统中断,数据产生速度快,但随机性较低。

生成一个大小为1.44mb软盘,并且将其挂载到指定目录下

实现过程

  • 先生成一个空的大小为1.44MB的磁盘

    mkdosfs命令
    详解
    -F 指定 FAT 表的大小,通常是 12 或是 16 个位元组。12 位元组通常用于磁碟片,16 位元组用于一般硬盘的分割区,也就是所谓的 FAT16 格式。这个值通常系统会自己选定适当的值。在磁碟片上用 FAT16 通常不会发生作用,反之在硬盘上用 FAT12 亦然。
    xxd命令查看其内容
    xxd -u -a -g l -c 16 floopy

    其前512字节是一个引导扇区(Boot Sector),前62字节是BPB的结构,BPB数据结构的字段是windows文件系统和操作系统约定好的,用于描述磁盘的物理布局,可以适用于FAT系列文件系统和NTFS文件系统。这里我们看到最后的文件系统类型为FAT12

FAT引导扇区结构

详细介绍链接

引导代码

boot.asm程序:

jmp init; BS_jmpBoot短跳转指令(加上nop填充后为3个字节)
nop
Bs_OEMName db "Jiaxgong";Bs_OEMName 厂商名称 8字节
BPB_BytsPerSec dw 512;每扇区字节数
BPB_SecPerClus db 1;每簇扇区数
BPB_RsvdSecCnt dw 1;保留区中的保留扇区数FAT12必须为1,(引导记录占用的扇区数)
BPB_NumFATs db 2;此卷中FAT表的份数,建议为2
BPB_RootEntCnt dw 512;根目录中的目录项数 FAT12中建议取值512
BPB_TotSec16 dw 2880;扇区总数
BPB_Media db 0xf0;BPB_Media 存储介质f0表示可移动介质,f8表示固定介质
BPB_FATSz16 dw 9;一个FAT表所占的扇区数
BPB_SecPerTrk dw 18;每磁道扇区数
BPB_NumHeaders dw 2;磁头数
BPB_HiddSec dd 0;FAT分区之前的隐藏扇区数,对于未分区介质必须为0
BPB_TotSec32 dd 0
BS_drveNum db 0;int13得到的驱动器号
BS_Reserved1 db 0;保留(供NT使用)
BS_BootSig db 0x29;扩展引导标记,指明此后的3个域可用
BS_VolID dd 0;卷标序列号
BS_VolLab db "VirtualBoot";磁盘卷标,此域必须与根目录中11字节长的卷标一致
BS_FilSysType db "FAT12   ";文件系统类型init:mov    ax, 7c00hmov    ds, axmov    es, axmov    ss, axmov    sp, 180hcall    DispStrloop:jmp     loopDispStr:mov    ax, BootMsgmov    bp, axmov    cx, 16mov    ax, 01301hmov    bx, 000chmov    dl, 0int     10hretBootMsg: db  "Hello, OS World!"times 510-($-$$) db 0dw 0xaa55

以上程序写好后,使用nasm命令汇编成二进制文件
nasm boot.asm -o boot.bin
汇编完成后,可以使用以下命令查看boot.bin的大小,刚好为512字节
wc -c boot.bin

plus:反汇编指令ndisasm boot.bin -o 0x7c00>> disboot.asm可以查看处理过后的汇编代码

将引导代码写入floopy软盘中

dd if=boot.bin ibs=512 of=floopy obs=512 count=1 seek=0 conv=notrunc
notrunc意味着不缩减输出文件,也就是说,如果输出文件已经存在,只改变指定的字节,然后退出,并保留输出文件的剩余部分。没有这个选项,dd将创建一个512字节长的文件。

写入完成后,使用qemu启动软盘(a.img就是上面的floppy软盘,为了和命令区分,改为了a.img)
qemu-system-x86_64 -drive file=a.img,of=floppy

操作系统引导-----QEMU环境下制作boot引导程序相关推荐

  1. Windows环境下制作Ubuntu的U盘启动工具

    Windows用户想要尝试一下Ubuntu或其他Linux系统?最简单的方法就是使用VMware Workstation,只是虚拟机会真实占用内存,如果你的电脑内存8G及以上可以试试.内存偏小,或者觉 ...

  2. mac 环境下 制作windows系统U盘启动盘

    mac 环境下 制作windows系统U盘启动盘 下载系统文件   ylmf.iso 转换为img文件 hdiutil convert /Users/os/Downloads/ylmf.iso -fo ...

  3. Ubuntu环境下制作Windows U盘启动工具

    Ubuntu环境下制作Windows U盘启动工具 第一次写这个,着实不会,权当自个儿记录一下吧.这两天准备学习语言,把elementaryOS改装Ubuntu ,装的时候迷糊眼一顿next,结果把原 ...

  4. ubuntu环境下制作win10启动盘,ubuntu安装图形化磁盘分区工具

    一: ubuntu 磁盘管理工具 ---- GParted 图形化分区工具 安装GParted:sudo apt-get install gparted 启动:sudo gparted 手动删除合并分 ...

  5. 【虚拟机装黑苹果(第二弹)】Win10/macOS环境下制作黑苹果安装U盘(能被Vmware虚拟机识别)

    目录 1 为什么要制作黑苹果安装U盘? 2 Win10环境制作黑苹果安装U盘 3 macOS环境制作黑苹果安装U盘 4 总结 参考文献 1 为什么要制作黑苹果安装U盘?   很多网友都知道如何在Vmw ...

  6. 关于VS环境下制作和使用静态库和动态库

    转载理由:虽然操作什么的很基础,不过作为初学还是很好的文章,手把手教学 关于VS2013下制作和使用静态库和动态库 引言 什么是库:库是写好的现有的,成熟的,可以复用的代码. 所谓静态.动态是指链接. ...

  7. Docker环境下Spring Boot应用内存飙升分析与解决

    目录 Spring Boot应用内存飙升 服务现状 JVM默认内存设置 优化 限制JVM内存 参数解释 JVM常见参数 java.security.egd 作用 优化后的Dockerfile文件 优化 ...

  8. 在DOS环境下制作Windows启动盘

    制作一张系统启动盘可以在Windows系统出现问题的时候,使用启动盘来引导系统,然后再查找故障并加以解决,下面就来介绍一下制作启动盘的方法. 1.在Windows中创建启动盘 打开控制面板,双击&qu ...

  9. windows操作系统,python环境下django的自动安装

    首先,在Windows操作系统下安装python,完成python环境的搭建.(我看有的博客需要配置环境变量,其实不必要,因为我们在安装的时候只要勾选如下图所示即可避免不必要的麻烦) 第二步,使用快捷 ...

  10. Linux环境下制作启动U盘

    背景 在装了Ubuntu的PC上,想用U盘重装系统. 注: 本文操作都是以root用户进行的. 已经下载了Ubuntu的ISO文件在/root下. 步骤 1.查看U盘对应的设备名称 插入U盘后,使用下 ...

最新文章

  1. 用Python找出数组中出现次数超过一半的数
  2. jQuery动态改变图片显示大小(修改)
  3. ARC106——E - Medals
  4. jq 自动滑动轮换(向后插入小块)
  5. 我要自学网java jsp_学javaweb需要什么基础?零基础如何学习javaweb?
  6. vim环境设置和自动对齐
  7. 使用Dockerfile构建Nginx,Tomcat,MySQL镜像
  8. python html解析对比_python htmlparse页面解析示例
  9. 数据分析能不能替代Data Mining?
  10. Java判断是否为素数
  11. python爬取视频代码
  12. Themida和Winlicense加壳软件脱壳教程
  13. Android 桌面Widget (小组件)开发详解
  14. dvi是什么意思_VGA线和DVI线,VGA线和DVI线是什么意思
  15. Java XLS 转 XLSX
  16. 2018年11月TIOBE编程语言排行榜,Java稳居第一
  17. Python Matplotlib 3D绘图详解(汇总)
  18. Python从网易云音乐、QQ 音乐、酷狗音乐、虾米音乐等搜索和下载歌曲
  19. 人工智能:极大极小算法
  20. 华为公布未来五年规划:将发展高端手机

热门文章

  1. 代理工具及使用技巧Proxy Hunter
  2. 贝壳完成在香港双重主要上市:市值超1200亿港元
  3. 介绍几款WAP网页制作工具
  4. 算法导论 pdf_[LaTeX 宏包] clrscode3e - 排版《算法导论》风格的伪代码
  5. windows 2008 中IIS7.0以上如何设置404错误页面
  6. .Net·使用ILSpy反编译exe或dll文件保存为项目结构
  7. python+pygame 最强大脑联动归位游戏
  8. 安装R软件(R、studio)的安装包下载官网和教程
  9. 阿里大淘系模型治理方案分享
  10. C#中制作启动窗体的方法和问题