[kdb]ubuntu下使用kdb console无输出,究竟是怎么回事?
ubuntu版本: 14.04.1内核版本: 3.13.0-36-generic
1. grub2启动过程中,选择recovery mode,增加break参数,停在(initramfs)的shell里面
echo kbd > kgdboc (kgdbboc的模块参数)
echo g > sysrq-trigger
可以正常触发kdb,正常执行kdb命令,说明内核可以正常支持kdb
2. 退出break shell,继续recovery mode启动,选择root,drop to root shell
执行同样的命令
echo g 之后控制台就没有任何输出......
但实际上,此时是可以“盲打”kdb命令的,输入go,可以退出kdb,然后看到刚才所有kdb命令的输出
(如果通过console启动参数定义两个console:console=ttyS0 console=tty,盲打的时候可以在ttyS0的串口上看到输出)
3. 如果不选择recovery mode,正常启动,在文本界面下效果同2(X界面也是,跟是否使用kms没有关系)
那么问题来了,究竟是什么原因导致2的行为跟1不一样,ubuntu的启动过程中究竟做了什么?
recovey mode的启动过程中,consonle的分辨率发生过调整,字体也变化过,这会影响tty的输出吗?
难道中间有什么进程在截获tty的输出?(可是recovey模式下就只有recovery+shell两个进程了)
补充,内核启动过程中闪屏时间点的日志显示,内核加载了drm模块。
不太了解,这有关系么? 再补充一个现象,以console=tty console=ttyS0启动,
在非kdb模式下,两个console可以同时显示kernel的message,
但是进入kdb之后(kgdboc=ttyS0),只有串口有输出,tty没有,
等到go退出kdb之后,所有的kdb输出才在tty上呈现。
但是,与1楼一样,同样的配置,在break启动参数(initramfs)下,却是两个终端都有输出。 更新:从console_driver的角度看已经输出到tty/console了,只是没有反映到屏幕上,感觉中间有一层buffer存在。
页:
[1]