Linux虚拟8086模式

urmy1004 2014-08-21 11:23:34
我需要编写8086汇编程序,有很多程序想要在虚拟8086的模式下运行,使用的汇编器是nasm

以前在Windows上面有debug.exe,现在切换到Linux下面开发,想找找Linux下进入虚拟8086模式的方法。
搜索了下,内核原生支持了vm86的系统调用,还有一个名为dosemu的工具,可以模拟dos的环境。

于是,我开始了移植,但是最初的简单程序(比如调用bios中断显示字符等)都运行有问题。之前在Windows下面是很容易就打印出字符串的。

总而言之,就是我发现Windows对虚拟8086模式支持的还不错,用起来还蛮顺手的,我想问下Linux下没有原生的工具支持么?dosemu还是debug.exe那种风格的,而且还有一些区别,也许是我不够了解该工具。

在此先O(∩_∩)O谢谢了!


【备注】
我在做OS开发的实验,在进入保护模式前的阶段,代码都是在实模式下的,有些小实验需要虚拟8086的支持,故有此问。
之前在Win下面写bootloader等还是蛮顺畅的,装了arch之后发现找不到顺手的工具了
...全文
417 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
urmy1004 2014-08-29
  • 打赏
  • 举报
回复
引用 5 楼 Heaven_Redsky 的回复:
看看ULK(深入理解Linux内核)这本书里头有讲上电之后boot的整个过程。不过相信你已经知道的八九不离十了,只是需要再多实践下。 另外是IA32的datasheet 如果想对boot部分掌握的恨透,也不可避免的得看看这个,网上很容易下到。
跟你谈的很愉快~~看起来你也对这个很感兴趣 CoreBoot、 Openfirmware工程以及它的文档是个不错的资源,这一套看下来还是不错的,也给你推荐一下。 如你所言,该部分的理论和设计大概都已经知晓了,这不是在实践嘛,家里还有旧笔记本和台式机作裸机~~~从“破坏”BIOS开始 IA32那个是指Intel的那一套电子书么?
Heaven_Redsky 2014-08-29
  • 打赏
  • 举报
回复
算是同道中人吧 加油 IA32实际上就是intel CPU的器件手册 跟普通的芯片器件手册原理是一样的,只是这本书复杂一些。
Heaven_Redsky 2014-08-27
  • 打赏
  • 举报
回复
看看ULK(深入理解Linux内核)这本书里头有讲上电之后boot的整个过程。不过相信你已经知道的八九不离十了,只是需要再多实践下。 另外是IA32的datasheet 如果想对boot部分掌握的恨透,也不可避免的得看看这个,网上很容易下到。
urmy1004 2014-08-25
  • 打赏
  • 举报
回复
引用 3 楼 Heaven_Redsky 的回复:
还真没怎么搞过除了实模式和保护模式之外的,原来还有个叫做虚拟8086的模式。呵呵。 自己写bootloader和开始弄GDT,IDT这类东西是要写不少汇编的。但是怎么说呢,这部分跟硬件的相关性比较大,并不是操作系统本身最关注的部分。如果你想写一个操作系统,我个人的建议是不要过于纠结在这部分开发,尽量用最快,最简便的方法完成这部分功能。然后尽快进入保护模式,并尽早开始进入C的开发部分。 那时候可以学到更多更有趣的内容啦。
谢谢你的建议。 因为跟硬件相关的boot部分是最初吸引我学计算机的源动力,看着那刷屏的文字信息,酷毙了!所以,这部分内容是我没法回避的~~人生很长,以后再慢慢看保护模式那块~~
Heaven_Redsky 2014-08-21
  • 打赏
  • 举报
回复
不是特别理解LZ的所说的虚拟8086是什么意思哈。但是如果你做OS的开发实验。推荐用WMWare。装一个redhat的虚拟机。 然后用这个虚拟机里的gcc+nasm来做编译。当然需要写makefile,网上很多例子。编译好的bootloader也可以运行在另一个WMWare的小虚拟机上。还是挺方便的。
Heaven_Redsky 2014-08-21
  • 打赏
  • 举报
回复
还真没怎么搞过除了实模式和保护模式之外的,原来还有个叫做虚拟8086的模式。呵呵。 自己写bootloader和开始弄GDT,IDT这类东西是要写不少汇编的。但是怎么说呢,这部分跟硬件的相关性比较大,并不是操作系统本身最关注的部分。如果你想写一个操作系统,我个人的建议是不要过于纠结在这部分开发,尽量用最快,最简便的方法完成这部分功能。然后尽快进入保护模式,并尽早开始进入C的开发部分。 那时候可以学到更多更有趣的内容啦。
urmy1004 2014-08-21
  • 打赏
  • 举报
回复
引用 1 楼 Heaven_Redsky 的回复:
不是特别理解LZ的所说的虚拟8086是什么意思哈。但是如果你做OS的开发实验。推荐用WMWare。装一个redhat的虚拟机。 然后用这个虚拟机里的gcc+nasm来做编译。当然需要写makefile,网上很多例子。编译好的bootloader也可以运行在另一个WMWare的小虚拟机上。还是挺方便的。
谢谢你的回复,我装了虚拟机,也在实际的裸机上测试了Bootloader,那一阶段已经告一段落了,接下来还有部分工作是在实模式下的。 目前我的汇编代码其实都不需要链接外部的库,基本上都是调用BIOS中断。 在Win下面nasm -f bin xx.asm即可以在debug.exe下运行,但是同样的代码和编译选项在Linux下的dosemu中就没效果。 【关于虚拟8086模式】 Intel的CPU现在有三种工作模式: 1.实模式 2.保护模式 3.虚拟8086模式 在80386及之后的32位处理器中,进行16位访问,处理器及操作系统共同模拟一个8086的运行环境来提供给应用程序,并复制提供一份相关的信息。比如,Windows提供了16位MS-DOS 子系统的环境。我想知道Linux下面有没有类似的原生的支持,还是说需要自行利用VM86这个system call去自行实现相关环境。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧