博客
关于我
Ubuntu下使用bximage+dd制作可供bochs使用的硬盘镜像
阅读量:421 次
发布时间:2019-03-06

本文共 1264 字,大约阅读时间需要 4 分钟。

最近在看《x86_x64体系探索及编程》,在制作可供bochs使用的硬盘镜像时出了一些问题,主要有以下几个:

步骤

如书中所说,做了:

  • [x] 使用bximage生成了硬盘镜像

  • [x] 对bochs的配置文件进行了配置

  • [x] 利用dd工具将uboot, setup, lib16二进制文件导入到hello.img中,使用的命令为:
dd if=uboot of=hello.img seek=63 count=1 conv=notruncdd if=setup of=hello.img seek=1 count=1 conv=notruncdd if=lib16 of=hello.img seek=20 count=1 conv=notrunc

这里需要说明, dd的if选项为输入, of选项为输出,seek跳过输出的几个单元开始写,一个单元512个字节,count是写的单元数,尤其要注意的是conv选项,邓志的书中并未加conv选项,这导致输出文件被截断,不能保持原本的大小,notrunc的意思就是不要截断。

  • [x] 使用以下语句启动bochs
bochs -f bxrc# 执行上面的语句后需要在terminal中输入c,意为continue,bochs才会继续执行

现象

Boot failed: not a bootable disk.

分析

  1. 能够进入最后一个界面,说明bochs的配置文件没有问题,那么问题一定出在镜像hello.img上,hello.img和随书提供的源码中的c.img有何不同呢?我用hex软件看了一下,hello.img的前512个字节是空的,而c.img中有一些内容,书上说硬盘的第一个单元是用来存放MBR的,当从硬盘启动时,先将MBR载入到0x7C00,再由MBR读取位于第64个单元的boot程序,因此MBR非常重要。仔细分析后发现原来我们使用bximage产生的hello.img并不自带MBR,所以我将c.img中的前512个字节写入了hello.img,使用下面的代码:
dd if=c.img of=hello.img seek=0 count=1 conv=notrunc

但是运行

bochs -f bxrc# 执行上面的语句后需要在terminal中输入c,意为continue,bochs才会继续执行

之后仍然出现Boot failed: not a bootable disk.

  1. 那么出问题一定在setup二进制文件了,因为这个实验中最后起作用的就是setup文件,在屏幕上显示。因此我使用nasm重新编译了setup.asm,编译过程中出现了类似于can't open xxx.inc之类的错误,原因就是linux使用../作为上级目录的代替,而windows使用的是..\,只要将..\换为../../就可以编译通过。重新编译setup.asm,将新生成的setup写入hello.img,运行bochs

结果

成功了!!!

总结

1、MBR

2、重新编译

转载地址:http://hcxuz.baihongyu.com/

你可能感兴趣的文章
nanoGPT 教程:从零开始训练语言模型
查看>>
NASA网站曝严重漏洞,或将沦为黑客钓鱼网站?
查看>>
Nash:轻量级、安全且可靠的脚本语言
查看>>
NAS、SAN和DAS的区别
查看>>
NAS个人云存储服务器搭建
查看>>
NAS服务器有哪些优势
查看>>
NAT PAT故障排除实战指南:从原理到技巧的深度探索
查看>>
nat 网卡间数据包转发_你是不是从来没有了解过光纤网卡,它跟普通网卡有什么区别?...
查看>>
NAT-DDNS内网穿透技术,快解析DDNS的优势
查看>>
NAT-DDNS内网穿透技术,快解析DDNS的优势
查看>>
NAT-DDNS内网穿透技术,解决动态域名解析难题
查看>>
natapp搭建外网服务器
查看>>
NativePHP:使用PHP构建跨平台桌面应用的新框架
查看>>
nativescript(angular2)——ListView组件
查看>>
NativeWindow_01
查看>>
Native方式运行Fabric(非Docker方式)
查看>>
Nature | 电子学“超构器件”, 从零基础到精通,收藏这篇就够了!
查看>>
Nature和Science同时报道,新疆出土四千年前遗骸完成DNA测序,证实并非移民而是土著...
查看>>
Nature封面:只低一毫米,时间也会变慢!叶军团队首次在毫米尺度验证广义相对论...
查看>>
Nat、端口映射、内网穿透有什么区别?
查看>>