Linux 升级Binutils和GCC后x86_64上的内核未启动
我在控制台上看不到任何日志(甚至看不到“解压缩Linux…”消息)Linux 升级Binutils和GCC后x86_64上的内核未启动,linux,gcc,linux-kernel,binutils,grub,Linux,Gcc,Linux Kernel,Binutils,Grub,我在控制台上看不到任何日志(甚至看不到“解压缩Linux…”消息) 我在内核配置下启用了任何早期引导打印,至少我知道这一点(请参阅下面的内核配置) 尝试使用KDB停止内核-在grub中的内核命令行参数末尾添加kgdbwait 我试图从grub手动启动内核 我试图在函数中添加panic()或日志: asmlinkage void\uuu init start\u内核(void)(init/main.c) 添加/更改/删除loglevel=verbose内核命令行参数(在GRUB中) 从内核命令行参
default=0
timeout=3
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=34 serial console
title XIV-System
root (hd0,0)
kernel /boot/vmlinuz init=/system/my_init console=tty0 mce=0 i8042.noaux idle=poll scsi_mod.inq_timeout=2 selinux=0 nohpet console=ttyS0,115200 earlyprintk=ttyS0,115200 kgdboc=ttyS0,115200 ro crashkernel=auto
- For verbos boot message
CONFIG_X86_VERBOSE_BOOTUP=y
- For early printk
CONFIG_EARLY_PRINTK=y
CONFIG_EARLY_PRINTK_DBGP=y
- For KGDB
CONFIG_KGDB_LOW_LEVEL_TRAP=y
CONFIG_KGDB_KDB=y
CONFIG_SERIAL_KGDB_NMI=y
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_TESTS=y
- For KDB
CONFIG_KDB_KEYBOARD=y
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
内核配置
default=0
timeout=3
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=34 serial console
title XIV-System
root (hd0,0)
kernel /boot/vmlinuz init=/system/my_init console=tty0 mce=0 i8042.noaux idle=poll scsi_mod.inq_timeout=2 selinux=0 nohpet console=ttyS0,115200 earlyprintk=ttyS0,115200 kgdboc=ttyS0,115200 ro crashkernel=auto
- For verbos boot message
CONFIG_X86_VERBOSE_BOOTUP=y
- For early printk
CONFIG_EARLY_PRINTK=y
CONFIG_EARLY_PRINTK_DBGP=y
- For KGDB
CONFIG_KGDB_LOW_LEVEL_TRAP=y
CONFIG_KGDB_KDB=y
CONFIG_SERIAL_KGDB_NMI=y
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_TESTS=y
- For KDB
CONFIG_KDB_KEYBOARD=y
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
我是在用gdb调试内核(早期引导阶段)后才设法解决这个问题的,基本上我发现内核在以下方面失败:
(gdb) bt
#0 early_idt_handler () at arch/x86/kernel/head_64.S:407
#1 0xffff9fffffffffff in ?? ()
#2 0xffffff07ffffffff in ?? ()
#3 0xffffe0ffffffffff in ?? ()
#4 0x00000e0000000000 in ?? ()
#5 0xffffffff81bee8a0 in ?? ()
#6 0xffff880000014560 in ?? ()
#7 0xffffffff819c0120 in early_idt_handler () at arch/x86/kernel/head_64.S:374
#8 0x0000000000000400 in irq_stack_union ()
#9 0xffffffff81bee8a0 in ?? ()
#10 0x000000000000000f in irq_stack_union ()
#11 0x0000000000000000 in ?? ()
从中我查看了内核源代码树(用于与head_64.S相关的补丁),并应用了它。您可以在以下位置找到修补程序及其相关内容:
commit 5f020130d5360e8266e369dc2b5f4e32ec5b05f4 (HEAD -> my_commit)
Author: Andy Lutomirski <luto@kernel.org>
Date: Fri May 22 16:15:47 2015 -0700
commit 5f020130d5360e8266e369dc2b5f4e32ec5b05f4(HEAD->my_commit)
作者:安迪·卢托米尔斯基
日期:2015年5月22日星期五16:15:47-0700
您是否尝试过“cat/var/log/boot.log”?我无法获得bash提示符,它只是冻结了。注意:当机器使用内核引导(使用旧的GCC编译)时,我的机器下没有/var/log/boot.log文件