如何制作“Hello world”内核

Posted

技术标签:

【中文标题】如何制作“Hello world”内核【英文标题】:How to make a "Hello world" kernel 【发布时间】:2019-10-13 08:10:37 【问题描述】:

我关注了this article,了解如何制作一个非常简单的内核来打印“Hello, World”。我的项目的文件可以在 Github 上找到。

我从这个project 构建了我的交叉编译器。我使用这些命令来交叉编译、组装和构建我的 ISO(CD-ROM 映像):

i686-elf-as boot.s -o boot.o
i686-elf-gcc -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
i686-elf-gcc -T linker.ld -o myos.bin -ffreestanding -O2 -nostdlib boot.o kernel.o -lgcc
mkdir -p isodir/boot/grub
cp myos.bin isodir/boot/myos.bin
cp grub.cfg isodir/boot/grub/grub.cfg
grub-mkrescue -o myos.iso isodir

当我尝试在 VirtualBox 上执行它时,它会给出以下消息:

致命:找不到可启动媒体!系统停止。

为什么会出现此错误,我该如何解决?

附:我使用适用于 Windows 10 的 Ubuntu 子系统

【问题讨论】:

你设置grub了吗?至少开始了吗? @Michael Petch 我使用准系统工具链 在我的 Win10 系统上,我从 sourceforge.net/projects/xming 安装了 Xming X11 服务器。在 Ubuntu 18.04 WSL 下,我做了一个 sudo apt-get install grub2-common grub-pc xorriso qemu-system-i386 。我 git 克隆了您的项目,执行了您上面给出的命令,它生成了一个文件 myos.iso。我确定我做了一个 export DISPLAY=:0 。然后我运行qemu-system-i386 -cdrom myos.iso,它显示Hello, kernel World! @SimoneBroili 在 Linux Could not initialize SDL(No available video device) 下运行需要图形的程序时,通常意味着 SDL(简单直接媒体层)找不到 X 服务器进行通信。 X 服务器是程序与之通信以显示事物的图形服务器。它们不需要在程序运行的同一台计算机上。在我的评论中,我说我安装了 Xming。 Xming 就是这样一个在 Windows 上天真的运行的服务器。如果你运行 Xming 并执行 export DISPLAY=:0 ,那么 QEMU 之类的图形程序应该足够输出了。 export DISPLAY=:0 在运行 qemu-system-i386(或任何 X11 程序)之前在您的 Ubuntu 终端中发出。您还必须确保 XMing 在 Windows 上运行。您还可以将 export DISPLAY=:0 放在 ~/.bashrc 文件的末尾,这样每次运行 Windows Ubuntu 终端时都会自动完成。 【参考方案1】:

可能缺少 GRUB 组件或 Xorriso 版本不正确。在您链接到它的 Bare Bones 文章中说:

您可以使用程序 grub-mkrescue 轻松创建包含 GRUB 引导加载程序和内核的可引导 CD-ROM 映像。 您可能需要安装 GRUB 实用程序和程序 xorriso(0.5.6 或更高版本)。

当使用grub-mkrescue 制作 ISO 映像时,无法启动的 ISO 通常是由于缺少 Xorisso 安装造成的。如果 grub-mkrescue 运行但根本不生成 ISO,则可能缺少 GRUB 组件。为确保您已安装所有 GRUB 和 Xorriso 组件,请在现代 Ubuntu 版本上安装组件:

sudo apt-get install grub2-common grub-pc xorriso 

然后尝试在 VirtualBox 中重建并重新运行您的 ISO 映像。

【讨论】:

如何获得 GRUB 工具和 xorriso for mac?我尝试 brew 安装,但没有找到它们。 @KlausMaria:我不使用 MacOS 来做 OSDev,所以我不确定。这个特定的答案涵盖了ubuntu,因为它被标记为这样。

以上是关于如何制作“Hello world”内核的主要内容,如果未能解决你的问题,请参考以下文章

总结嵌入式linux内核中MakefileKconfig.config的关系及增加开机Hello World

Hello world实例 | 解析内核的MakefileKconfig和.config之间的关联!

Linux内核 - 模块机制与“Hello World!

linux内核源码分析之sysfs文件系统

Linux设备驱动Hello World程序介绍

Hello world!让 grub2 引导自己的操作系统 Xos 内核