linux内核加载的小问题----Linux内核的Oops

Linux内核的Oops

linux中当比较致命的问题出现时,Linux内核在发生kernel panic时会打印出Oops信息,把目前的寄存器状态、堆栈内容、以及完整的Call trace都show给我们看,这样就可以帮助我们定位错误。说白了就是内核在哪里出错了
例子
#include <linux/kernel.h>
#include <linux/module.h>
static int __init hello_init(void)
{
    printk("hello_init\n");
     int *p = 0;
    *p = 1;  // 这个地方会出错
    return 0;
}
static void __exit hello_exit(void)
{
     printk("hello exit\n");
}
 
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
这个例子错误的地方已经标出。这句代码的作用是把数值1存入0这个地址,这个操作当然是非法的。这个段代码编译的时候不会有问题,然后当你去加载模块的时候,问题就来了类似这样的:

也有可能是这样的:

但是第一种情况的时候:
卸载都是卸载不掉的:

也就是卸载的时候卸载不掉。
 所以,这个例子唯一的作用就是造一个空指针引用错误。然后引发了oops错误的例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值