Absolutely! Let’s create a complete step-by-step workflow to build and run a minimal C kernel with a Multiboot header inside a Docker container on your M1 Mac, and then boot it in QEMU. I’ll assume your container is x86_64 (--platform linux/amd64) Ubuntu.
docker run --platform linux/amd64 -it --name os-builder -v ~/osdev:/root/osdev ubuntu:26.04 bash- Mount
~/osdevon host →/root/osdevin container - You will build everything inside
/root/osdev
Inside container:
apt update
apt install -y build-essential gcc-multilib gdb-multiarch nasm xorriso grub-pc-bin qemu-system-x86gcc-multilib→ 32-bit compilationnasm→ assembly bootloadergrub-pc-bin + xorriso→ create bootable ISOqemu-system-x86→ test kernel
cd /root/osdev
mkdir -p kernel_test
cd kernel_test; Multiboot header for GRUB
section .multiboot
align 4
dd 0x1BADB002 ; magic
dd 0x00010003 ; flags
dd -(0x1BADB002 + 0x00010003) ; checksumBITS 32
GLOBAL _start
EXTERN kmain
_start:
call kmain
hang:
jmp hangvoid kmain(void) {
char *video = (char*)0xB8000;
const char *msg = "Hello OS World!";
for(int i=0; msg[i]; i++){
video[i*2] = msg[i];
video[i*2+1] = 0x07;
}
while(1);
}# Assemble header and bootloader
nasm -f elf32 multiboot_header.S -o multiboot_header.o
nasm -f elf32 boot.S -o boot.o
# Compile kernel
gcc -m32 -ffreestanding -c kernel.c -o kernel.o
# Link everything into ELF binary (Multiboot)
ld -m elf_i386 -Ttext 0x1000 -nostdlib -o kernel.bin multiboot_header.o boot.o kernel.omkdir -p iso/boot/grub
cp kernel.bin iso/boot/kernel.bin
cat > iso/boot/grub/grub.cfg <<EOF
menuentry "MyOS" {
multiboot /boot/kernel.bin
}
EOFgrub-mkrescue -o myos.iso iso- Output:
myos.isoin/root/osdev/kernel_test/
Option A: inside container (headless):
qemu-system-i386 -cdrom myos.iso -m 512M -nographicOption B: on host Mac (recommended for GUI):
docker cp os-builder:/root/osdev/kernel_test/myos.iso ~/osdev/myos.iso
qemu-system-i386 -cdrom ~/osdev/myos.iso -m 512M- You should see “Hello OS World!” printed on the screen
✅ Workflow Summary
- Start x86_64 Docker container
- Install build tools + GRUB + QEMU
- Create
multiboot_header.S,boot.S,kernel.c - Assemble/compile/link →
kernel.bin - Prepare ISO with GRUB
grub-mkrescue→myos.iso- Boot with QEMU
If you want, I can provide a single bash script that does all these steps automatically inside the container, so you only need to run it once and the ISO boots immediately.
Do you want me to do that?