Linux 如何在virtualbox中调试内核加载和intrd加载

Linux 如何在virtualbox中调试内核加载和intrd加载,linux,ubuntu,linux-kernel,virtualbox,Linux,Ubuntu,Linux Kernel,Virtualbox,我已经在我的arch主机上克隆了linux内核repo(主机是ubuntu 16.04)。两周前,我能够启动到新内核(当时是4.11.rc06),然后我做了git pull并重新编译了所有内容,它只是在“加载初始ramdisk映像…”后挂起 因此,我尝试了git clean-xfd然后生成localmoduleconfig回答所有的默认设置,然后make然后生成模块(安装)然后mkinitcpio-p linux.4.11.自定义当然还有sudo cp-v arch/x86_64/boot/bz

我已经在我的arch主机上克隆了linux内核repo(主机是ubuntu 16.04)。两周前,我能够启动到新内核(当时是4.11.rc06),然后我做了git pull并重新编译了所有内容,它只是在“加载初始ramdisk映像…”后挂起

因此,我尝试了
git clean-xfd
然后
生成localmoduleconfig
回答所有的默认设置,然后
make
然后
生成模块(安装)
然后
mkinitcpio-p linux.4.11.自定义
当然还有
sudo cp-v arch/x86_64/boot/bzImage/boot/vmlinuz linux.4.11.自定义

在我确认它确实挂起后,我尝试了更多的git拉取,更多的清理,但没有任何改变

在真正的机器上从相同的源运行相同的内核将启动。 我在virtualbox中找不到记录的bug,也找不到ubuntu的更新

接下来,我尝试通过添加到grub的linux命令来调试它:
debug earlyprintk=vga,保留
,甚至删除initrd行,将noinitrd添加到内核中,但没有得到任何错误。只是一个屏幕,上面有grub的“回声”信息,永远都是这样

  • 如何调试它
  • 有人知道能做什么吗

  • 为了检查内核是否启动,我将使用KDB(内核的内置调试器),并查看是否在启动时得到提示

    为了更好地调试,我会尝试让KGDB(用于内核的GDB)工作

    实际上,您可以同时激活这两个选项,使所有选项都可用。有关详细信息,请参阅以下链接:


    我想人们会被你的头衔误导。不要抱怨(“virtualbox不工作”),而是在标题(“如何调试Linux内核引导序列?”)中提出问题,并在问题主体中详细说明。建议被接受。您能看到通过系统uart(或您用作默认控制台的任何东西)传递的内核/init消息吗?我使用了虚拟控制台,它不是嵌入式设备,所以我发现使用串行接口毫无意义。我什么也没看到,我浏览了所有内核调试选项,但仍然一无所获。我试图得到版本4.11.0rc8,但它仍然可以正常工作,只有在最终版本和4.12.rc01它不会启动。实际上,我对不启动没有问题,我有一个问题,我不知道为什么。你似乎认为这是一个内核问题,但为什么你认为它甚至可以启动内核?好主意,问题是100%的virtualbox,因为该内核在普通PC arch和vmware player中运行良好。