操作系统设计很头疼,本来不想学的,后来学分不够,只好来上。
这次的实验拖了一个星期才动手。因为从没学过什么xinu,一听就很头疼。
而且我还不想装虚拟机。不过搞一搞也快。
……
1.安装Ubuntu系统
之前有个实验是在virtualbox上做的,所以我就在上面装ubuntu了。
这个过程网上搜搜都有,我就不说了。
2.进行qemu,make安装
sudo apt install qemu-system-x86
sudo apt install make(如果我没记错)
(这图差不多就是install 样子,原来的忘截了,随便发一张凑凑样子)
这是后边编译,启动要用的。
3.进行工具链安装(不安装也可)
sudo add-apt-repository ppa :team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded
老师发的实验要求说有这步,但我运行的时候出错了,没做。
到后来发现这步完全不用。
您要是有时间,那做做也无妨。
4.安装编译c工具
sudo apt-get install gcc bison flex
5.从github上clone源代码
git clone https://github.com/xinu-os/xinu
6.修改文件
修改格式就是linux的patch
解决编译器 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
修正 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
修改x86对应启动代码, 支持 Multiboot 规范, 从而可以直接由 QEMU 启动
— 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)
7.编译执行
进入 compile 目录, 执行 make;qemu-system-i386 -kernel xinu.elf -nographic, 启动出现xinu的banner和xsh的提示
完成