os-orange

orange环境

代码仓库

https://gitee.com/jiang000/oranges

ubuntu

先安装

https://www.shuzhiduo.com/A/lk5a1VAN51/

环境变量

再安装下面的

1
2
3
4
5
6
7
sudo apt-get install build-essential 
sudo apt-get install xorg-dev
sudo apt-get install bison
sudo apt-get install g++
./configure --enable-debugger --enable-disasm
make
sudo make install

bochs -version就可以了

接下来按照这个文档跑

Orange‘s:一个操作系统的实现学习笔记1_orange’s一个操作系统的实现-CSDN博客

bochs安装配置_哔哩哔哩_bilibili

上面video也是按照这个步骤

https://blog.csdn.net/lhl_blog/article/details/76785193?app_version=6.2.9&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2276785193%22%2C%22source%22%3A%22m0_62832651%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app

运行

mac也是

1
2
3
4
5
6
nasm boot.asm -o boot.bin
dd if=boot.bin of=a.img bs=512 count=1

//输入bochs
bochs
c

此时bochs已经开始运行了,但是还是黑屏,还需要在终端输入c,此时软盘里还没有东西,所以会提示一个选项,点击continue ,才会开始启动模拟,如下图所示:

修改

1
2
3
4
5
6
xxd a.img > a.txt  

//创建软盘,再执行上面两行命令
bximage
1
fd

organe's一个操作系统实现实验一实验步骤_哔哩哔哩_bilibili

1
2
3
4
5
6
7
8
9
10
这个也需要修改
# filename of ROM images
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest

# enable key mapping, using US layout as default.
for ubuntu
keyboard: keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map
for macos
keyboard: keymap=/usr/local/share/bochs/keymaps/sdl2-pc-us.map

macos

1
2
3
4
5
6
7
8
9
10
11
./configure --prefix=/usr/local \
--enable-smp \
--enable-cpu-level=6 \
--enable-disasm \
--enable-x86-64 \
--enable-vmx=2 \
--enable-svm \
--enable-all-optimizations \
--enable-debugger \
--enable-debugger-gui \
--with-sdl2

If SDL2 fails, try:
–with-sdl

Build

make

(This may take several minutes.)

Install

sudo make install

error

2) Find the line around ~194

You’ll see something like:

char *devname; ... if ((devname = strrchr(devpath, '/')) != NULL) {

3) Change devname to const char *

Edit it to:

const char *devname; ... if ((devname = strrchr(devpath, '/')) != NULL) {

保护模式

实验a运行

需要代码自带的 a.img,因为 pmtest1.asm 没有55aa,自己创建的找不到盘

1
2
nasm pmtest1.asm -o pmtest1.bin
dd if=pmtest1.bin of=a.img bs=512 count=1 conv=notrunc

实验b

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
nasm pmtest2.asm -o pmtest2.com

//macos
sudo mkdir /Users/m/Documents/floppy/
sudo mount -o loop pm.img /Users/m/Documents/floppy/
sudo cp pmtest2.com /Users/m/Documents/floppy/
sudo umount /Users/m/Documents/floppy/


//ubuntu

sudo mkdir /home/m/Documents/floppy/
sudo mount -o loop pm.img /home/m/Documents/floppy/
sudo cp pmtest2.com /home/m/Documents/floppy/
sudo umount /home/m/Documents/floppy


sudo mkdir /mntfloppy
nasm boot.asm -o boot.bin
nasm loader.asm -o loader.bin
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
sudo mount -o loop a.img /mntfloppy/
sudo cp loader.bin /mntfloppy/
sudo umount /mntfloppy/


bochs
c
//运行模拟器后 到bochx 虚拟机,B磁盘下
b:
//运行
pmtest2.com

五内核

1
ld -m elf_i386 -s -o hello  hello.o

加载kernel

1
2
3
4
5
6
7
8
9
10
nasm boot.asm -o boot.bin
nasm loader.asm -o loader.bin
nasm -f elf kernel.asm -o kernel.o
ld -m elf_i386 -s kernel.o -o kernel.bin
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
sudo mkdir /mntfloppy
sudo mount -o loop a.img /mntfloppy/
sudo cp loader.bin /mntfloppy/
sudo cp kernel.bin /mntfloppy/
sudo umount /mntfloppy/

os-orange
https://noteforme.github.io/2026/02/24/os-orange/
Author
Jon
Posted on
February 24, 2026
Licensed under