本教程会遵照El-Torito标准生成ISO文件。

编写内核文件

这里我们简单的写一个打印helloworld的汇编即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define print(x) movb $0x0E, %ah; \
movb $(x), %al; \
int $0x10

.globl start
start:
.code16
cli
cld

print('H')
print('e')
print('l')
print('l')
print('o')
print(' ')
print('W')
print('o')
print('r')
print('l')
print('d')
print('!')

我们编译上述文件

1
2
3
$ gcc -nostdinc -c -o boot.o boot.S
$ ld -N -e start -Ttext 0x7C00 -o boot.out boot.o
$ objcopy -S -O binary -j .text boot.out boot.out

然后我们将内容放在新的位置

1
2
$ mkdir -p prepared_for_iso/boot
$ cp boot.out prepared_for_iso/boot/loader.sys

创建iso文件

1
2
3
$ xorriso -as mkisofs -R -J -c boot/bootcat \
-b boot/loader.sys -no-emul-boot -boot-load-size 4 \
-o ./bootable.iso ./prepared_for_iso

最后我们可以用qemu或者vmware启动

1
$ qemu-system-i386 -cdrom bootable.iso