您的位置:首页 > 其它

在Ubuntu下基于QEMU运行XINU OS x86系统

2015-12-31 21:51 555 查看
标题有点绕, 其实主要是记录一下这两天折腾的一个结果, 主角是
XINU, 一个比较短小精悍的操作系统, 重点是, 这个操作系统是完整的, 可以在一些平台(包括x86虚拟机)上实际跑起来的一个操作系统, 具体可以看给的链接, 作者是Douglas Comer, 也就是<<TCP/IP网络互联技术>>那套书的作者, XINU 本身也对应有一本书, 写得很不错, 现在出到第2版了

之所以发这个帖子, 不是为了在这介绍 XINU 的前世今生, 而是要说 XINU 一个很有意思的地方, 即这个系统非常好折腾, 怎么个好折腾法呢, 只要你有一个 Linux 的开发环境(注1), 到
github 上抓一下代码, 做几个简单的调整, 就可以直接编译, 并通过 QEMU 运行了, 整个过程非常方便, 随时改, 随时运行, 所见即所得, 对于想折腾 OS 的朋友, 是个很不错的东西

以下记录调整的内容:

1. 解决编译器 undefined reference to __stack_chk_fail 报错

--- a/compile/Makefile

+++ b/compile/Makefile

@@ -24,7 +24,7 @@ TOPDIR := ..

# Set the C compilation flags common to all Embedded Xinu platforms.

# platformVars can add more flags if desired.

-CFLAGS :=

+CFLAGS := -fno-stack-protector

2. 修正 64 位环境下的链接问题

--- a/compile/platforms/x86/platformVars

+++ b/compile/platforms/x86/platformVars

@@ -10,6 +10,7 @@ PLATFORM_NAME := Intel x86

# Add flags to compile 32 bit code

CFLAGS += -m32

ASFLAGS += --32

+LDFLAGS += -melf_i386

3. 最后也最重要的是, 修改x86对应启动代码, 支持 Multiboot 规范, 从而可以直接由 QEMU 启动, 具体参考 SO 上的帖子(注2)

--- a/loader/platforms/x86/start.S

+++ b/loader/platforms/x86/start.S

@@ -10,6 +10,8 @@

.extern startup

.extern _end

+#define MULTIBOOT_HEADER_MAGIC 0x1BADB002

+#define MULTIBOOT_HEADER_FLAGS 0x00000003

_start:

/* disable any interrupts from coming in */

cli

@@ -22,3 +24,9 @@ _start:

movl %eax, %esp # set stack pointer

jmp startup

+

+ /* Enable multiboot support */

+.align 4

+.long MULTIBOOT_HEADER_MAGIC

+.long MULTIBOOT_HEADER_FLAGS

+.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)

修改完成之后, 进入 compile 目录, 执行 make;qemu-system-i386 -kernel xinu.elf, 如果看见 QEMU 提示 "Booting from ROM...", 那么恭喜, 请按
CTRL-ALT-3
, 你会发现一些神奇的事情已经发生了, 剩下的世界和平什么的都交给你了 ;)

注1: 我的环境是 Ubuntu 14.04 x64 + gcc version 4.8.4, 不同环境过程可能会稍有不同

注2: 实际上, 整个过程都是基于这篇帖子, 最近在看一本讲操作系统的书
Operating Systems: Three Easy Pieces, 想用 XINU 来对照实验, 不过 XINU 提供的 server/client 虚拟机的方式感觉还是不方便, 于是找到了 SO 的这篇帖子, 中间碰到了一些小问题, 所以把解决的过程记录一下, 方便其他想折腾的朋友
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: