Linux kernel 当我从源代码编译linux内核时,如何从linux内核启动?

Linux kernel 当我从源代码编译linux内核时,如何从linux内核启动?,linux-kernel,boot,Linux Kernel,Boot,我已经编译了linux内核2.6.39,我想在BOCHS中模拟它。那么,如何从BOCHS中编译的内核启动? 我有一个制作boot.ISO文件的想法。但是我不知道怎么做。Bochs似乎缺乏直接启动可执行文件的能力,所以你应该先创建一个虚拟磁盘映像。然后,您可以使用kpartx将图像设置为循环设备: # kpartx -a image.img 这将在/dev下创建loopNp1(N取决于使用的循环设备,通常为0)。 现在,您可以格式化并装载它: # mkfs.ext4 /dev/loopNp1 #

我已经编译了linux内核2.6.39,我想在BOCHS中模拟它。那么,如何从BOCHS中编译的内核启动?

我有一个制作boot.ISO文件的想法。但是我不知道怎么做。

Bochs似乎缺乏直接启动可执行文件的能力,所以你应该先创建一个虚拟磁盘映像。然后,您可以使用kpartx将图像设置为循环设备:

# kpartx -a image.img
这将在/dev下创建loopNp1(N取决于使用的循环设备,通常为0)。 现在,您可以格式化并装载它:

# mkfs.ext4 /dev/loopNp1
# mount /dev/loopNp1 /mnt
然后可以将内核映像(zImage、bzImage或类似的映像)复制到/mnt/boot中。 然而,要使其工作,您还需要一个引导加载程序。您可以轻松地使用安装grub(如果您已经在系统上使用它)

您还需要类似grub.cfg的文件

set timeout=0
set default=0 # Set the default menu entry

menuentry "Linux" {
   linux /boot/zImage
   boot
}
将其放在/mnt/boot/grub下。现在我们完成了,计算所有内容,添加到您的bochsrc中,如

ata0主机:类型=磁盘,路径=image.img,模式=平面,圆柱体=0,磁头=0,spt=0,平移=自动

(注意:在某些情况下,您可能需要手动指定CHS值),并且它应该可以工作(好的,至少在它尝试运行init之前,但这是另一个问题)

set timeout=0
set default=0 # Set the default menu entry

menuentry "Linux" {
   linux /boot/zImage
   boot
}