66 让内核 hang 住

前言

此讨论主要是来自于 chinaunix 中的一篇帖子 

然后 这里 仅仅是写了一个 case 来复现这里的情况 

以及 在不同的机器上面做了一些测试

核心是使用 panic 函数 

 

 

测试模块

root@ubuntu:~/linux/linux-4.10.14# cat images/share/Test07KernelPanic.c

#include "linux/kernel.h"
#include "linux/init.h"
#include "linux/module.h"
#include "linux/sched.h"
#include "linux/fdtable.h"
#include "linux/fs_struct.h"
#include "linux/mm_types.h"
#include "linux/init_task.h"
#include "linux/types.h"
#include "linux/atomic.h"

MODULE_LICENSE("GPL");


static int __init

print_pcb(void)
{
    printk("module_init ...\n");
    panic(" kernel panic ... \n");
    printk("module_init after ...\n");
    return 0;
}

static void __exit

exit_pcb(void)
{
    printk("module_exit ...\n");
}


module_init(print_pcb);
module_exit(exit_pcb);

 

在不同的机器上面 情况貌似还不太一样 

这是 在正常的虚拟机上面执行, 之后 虚拟机直接 hang 住了 

但是 其他的连接 会等待一会儿, 然后 自动退出连接

 

虚拟机的情况是 有一直 hang 在这里, 不响应任何操作, 只能 重启

 

 

在 qemu 启动的虚拟机中情况是 另外的情况

然后 之后 内核是一直在 panic 中的死循环 

在真实的虚拟机中 dmesg –w 偶尔能够看到 Test07KernelPanic 的前面两行输出 

这里能够看到 更加完整的输出 

 

panic 中的死循环如下, 结合上下文来看 do_one_initcall 调用的下一个函数为 Test07KernelPanic.print_pcb, 接着是 0xffffffffa0005000 然后 接着是系统调用 panic

 

 

这里是前面的输出 “Kernel panic – not syncing: %s ” 相关 

以及输出当前 堆栈信息, 寄存器 相关

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值