这个小的代码的编写和运行还是能让自己对系统启动有一个更深的认识,不过有个不懂的就是怎么用ISO镜像文件启动,怎么将引导代码写入ISO镜像文件,依然没有找到很好的方法解决

当计算机电源被打开后,它会先进行加电自检(POST),然后寻找启动盘,如果是选择从软盘启动,计算机就会查找软盘的0面0磁道1扇区,如果发现它以0xAA55结束,则BIOS认为它是一个引导扇区,然后BIOS就会把引导扇区的前512字节的引导代码拷贝到内存的0000:7c00处并将控制器彻底交给这段引导代码。

简单的引导代码如下所示:

代码如下:
org 07c00h ;告诉编译器加载到07c00h处

mov ax, cs 
mov ds, ax 
mov es, ax

call DispStr ;调用显示字符串函数

jmp $; 无限循环

DispStr: 
mov ax, BootMessge 
mov bp, ax 
mov cx, 16 
mov ax, 01301h 
mov bx, 000ch 
mov dl, 0 
int 10h 
ret 
BootMessge: db "hello, OS world!" 
times 510 - ($ - $$) db 0 
dw 0aa55h

这段代码时用nasm写的,它类似于masm的语言。org 07c00h命令就是将命令后面的代码中的偏移地址都加上07c00h,这样程序就相当于在0000:7c00出执行了。按书中所讲的,用命令nasm bootsector.asm -o boot.bin生成引导代码boot.bin,然后将boot.bin写入软盘的0面0磁道1扇区就可以了。问题就来了,我没有软盘怎么搞,不过在wmware虚拟机中貌似可以用软盘的映像文件来启动,所以就想到自己制作一个映像文件来代替软盘来作为启动盘,不过怎么创建这个映像文件呢?

以前记得用linux下的dd命令做过linux的启动盘,dd应该是可以制作的,于是在网上找了下dd制作映像文件,果然是可以的,制作方法如下:

1 先制作一个空的软盘映像文件diska.img(1.44Mb的软盘映像文件):

dd if=/dev/zero of=diska.img bs=512 count=2880

2 制作一个包含boot.bin的映像文件boot.img:

dd if=boot.bin of=boot.img bs=512 count=1

3 将diska.img中1个扇区后面的数据拷贝到boot.img的后面

dd if=diska.img of=boot.img skip=1 seek=1 bs=512 count=2879

这样就做成了一个大小为1.44Mb的包含引导代码的映像文件。

后面的事就好办了,直接在wmware创建一个空的虚拟机,在设置中将Floppy的路径设置为上面制作的引导扇区的路径就ok了,如下图那样:

设置Floppy连接,断开CD/DVD连接,启动虚拟机就可以看到下面的画面了:

 

总结:这个小的代码的编写和运行还是能让自己对系统启动有一个更深的认识,不过有个不懂的就是怎么用ISO镜像文件启动,怎么将引导代码写入ISO镜像文件,依然没有找到很好的方法解决。

nasm实现的用vmware运行自做的linux启动盘的引导代码相关推荐

  1. u盘做了linux启动盘如何恢复吗,U盘做启动盘后,如何恢复原始容量

    上次用U盘装系统后,U盘缩水1G多,格式化和快速格式化,没有用,无法恢复U盘原来的容量,后来在网上查到一个方法,成功释放U盘空间,故将恢复方法写在下面. (1)右击"我的电脑",选 ...

  2. linux运行欧陆风云,Arm linux启动分析(1)

    下周准备做linux启动的技术讲座,在这里我慢慢整理下自己的材料,这次我写的是Image的启动过程,也即使zImage解压缩结束后的启动代码,这时候的代码开始地址仍然是0x30008000,下面我结合 ...

  3. java做 binggo,Linux启动与停止spring boot工程的脚本示例

    在springboot项目启动有三种方式: 1.运行主方法程序 2.使用命令mvn spring-boot:run 在命令行运行 3.使用 mvn packpage打包位jar文件以后,使用java ...

  4. u深度做linux启动盘,u深度启动盘制作

    u深度启动盘制作工具是一款专业的启动盘制作工具.只需一键即可制作出启动u盘,操作十分简易,使用方便快捷,强大的兼容性,u深度u盘启动盘制作工具制作好的启动u盘可用于启动目前市面上任何一款电脑. u深度 ...

  5. winsetup制作linux启动盘,winsetupfromusb怎样做linux启动盘

    [WinSetupFromUSB使用方法]这是个功能非常强大的自启动U盘制作工具,可以完成 WinXP/Vista/Win7的U盘安装,完成同盘多Windows安装源的U盘制作以及Linux启动安装等 ...

  6. u深度做linux启动盘,u深度u盘启动盘制作教程

    打开u深度u盘启动盘制作工具,将准备好的u盘插入电脑usb接口,等待软件自动识别所插入的u盘.随后无需修改界面中任何选项,与下图所示参数选项一致之后点击"开始制作"即可: 这时会出 ...

  7. U盘做启动盘之后容量变小了,咋办呢?

    有U盘的可能会遇到U盘容量不正常的情况,比如U盘做了启动盘后.U盘量产过.U盘用其他软件格式化过后导致U盘容量变小了,那么其他容量去哪里了呢?如果分成了2个区,那么为什么只识别一个呢?怎么才能恢复容量 ...

  8. U盘各种启动盘的制作(推荐做PE启动盘)!以及用U盘安装系统(把你的U盘当光盘来用)!

    废话一段:U盘是一种新型的移动存储产品,一般采用闪存存储介质(Flash Memory)和通用串行总线(USB)接口,具有轻巧精致.容量较大.便于携带.使用方便.安全可靠等特点,可用于存储数据文件以及 ...

  9. VMware运行Ubuntu 三种网络连接方式:bridge、NAT、Host-Only的区别

    https://www.cnblogs.com/janealer/p/5222489.html 我的Host是Windows7,安装VMware虚拟机,在虚拟机中装了Ubuntu10.04,首先介绍下 ...

最新文章

  1. Android编程获取网络连接状态及调用网络配置界面
  2. 【微信小程序企业级开发教程】快递查询实例
  3. Tomcat根目录下静态html怎样访问,避免走坑
  4. oracle数据库link格式,Oracle创设DB Link
  5. 你绝对干过的15件傻事儿
  6. Dojo学习笔记(一):Hello Dojo!
  7. swift使用mysql教程,Swift学习教程之SQLite的基础使用
  8. opencv中滚动条操作
  9. 软件的生命周期与开发过程模型
  10. 阿铭Linux_网站维护学习笔记20190306
  11. 如何在Python中将Word转换为图片?
  12. 学生静态网页设计作品之我的家乡
  13. dns劫持 dns污染 http劫持
  14. C语言的clock函数
  15. 什么是元数据管理?以及该如何做元数据管理呢?
  16. 2022秋季C语言专题实验07
  17. Erasure Code - EC纠删码原理
  18. git clone出现 fatal: unable to access 'https://github.com/...'的解决办法(亲测有效)
  19. 微信移动端招聘项目总结
  20. 在数据库历史上最重要的人物简介

热门文章

  1. 又推亲儿子,苹果与国际权威机构推出 Swift 资格认证
  2. systemd 开机无法启动privoxy
  3. AT指令集及S寄存器
  4. 常用音频软件:Cool edit pro
  5. 兼容iOS 10 资料整理笔记
  6. 【算法导论】学习笔记——第9章 中位数和顺序统计量
  7. 记一次centos 6 x64位系统修复过程
  8. [转]Sublime Text 2 C++编译运行简单配置
  9. 视频:如何把应用通过vmc部署到cloud foundry上
  10. TurboMail打造雀氏(中国)日用品邮件系统