如何在VirtualBox中运行自制基础OS内核?附实操困惑求助
别担心,我来一步步带你把这个简单内核跑起来——咱们从编译每个文件到在VirtualBox里启动,每一步都给你写得明明白白,毕竟你刚接触汇编器、链接器这些工具,咱们慢慢来:
第一步:编译汇编启动文件(boot.asm)
你用的nasm是汇编器,负责把汇编代码转换成机器能识别的目标文件。在终端里运行这个命令:
nasm -f elf32 boot.asm -o boot.o
-f elf32:指定生成32位的ELF格式目标文件(这是内核需要的标准格式)-o boot.o:把编译后的输出存为boot.o文件
第二步:编译C++内核文件(kernel.cpp)
因为咱们的内核是32位的,而且没有标准库支持,所以要用gcc的特殊参数编译:
gcc -m32 -ffreestanding -c kernel.cpp -o kernel.o
-m32:强制生成32位代码-ffreestanding:告诉gcc“我们不在标准系统环境下”(内核不能用printf这类标准库函数,必须加这个参数)-c:只编译不链接,生成单独的目标文件kernel.o
如果这一步报错说找不到-m32选项,在Ubuntu/Debian上可以安装多库支持:
sudo apt install gcc-multilib
第三步:链接生成内核二进制文件
ld是链接器,负责把boot.o和kernel.o这两个目标文件合并成一个可执行的内核镜像,同时用你写的linker.ld脚本指定内存布局:
ld -m elf_i386 -T linker.ld -o kernel.bin boot.o kernel.o
-m elf_i386:指定使用32位ELF链接器-T linker.ld:用你写的链接脚本定义内核的内存结构(比如代码段、数据段的位置)-o kernel.bin:最终生成的可执行内核二进制文件就是它
第四步:制作GRUB可引导的ISO镜像
要让VirtualBox能启动这个内核,咱们得把它做成GRUB引导的ISO镜像:
- 先创建GRUB要求的目录结构:
mkdir -p iso/boot/grub
- 把内核和配置文件放到对应位置:
cp kernel.bin iso/boot/ cp grub.cfg iso/boot/grub/
- 用
grub-mkrescue生成ISO镜像:
grub-mkrescue -o myos.iso iso/
如果这一步报错说缺少依赖,Ubuntu/Debian上可以安装:
sudo apt install grub-pc-bin xorriso
另外要确保你的grub.cfg内容正确,至少要有这段引导配置:
menuentry "My Simple OS" { multiboot /boot/kernel.bin boot }
第五步:在VirtualBox里启动你的OS
- 打开VirtualBox,点击「新建」按钮
- 虚拟机名称随便填,类型选「Linux」,版本选「Other Linux (32-bit)」(因为咱们的内核是32位的)
- 内存分配256MB就足够了(不用给太多)
- 虚拟硬盘选择「现在不添加虚拟硬盘」,然后点击「创建」
- 选中刚创建的虚拟机,点击「设置」→「存储」
- 在「控制器:IDE」下面的空光驱上,点击右边的小光盘图标,选择「选择虚拟光盘文件」,找到咱们生成的
myos.iso - 点击「启动」,等几秒就能看到你的问候语了!
内容的提问来源于stack exchange,提问作者user9674579
相关产品推荐
相关产品推荐

