Unable to handle kernel NULL pointer dereference at virtual address 0000000d[ 435.859000] pgd = c9
由于本人刚学驱动新手,不会太多反向操作。看了很多博主也没有解决。
经过我一个下午尝试,把代码缩减缩减在缩减之后,我发现了
先看下面的代码,有问题的代码(扫一眼就行了,估计没人看的出来)
#include <linux/init.h>
#include <linux/module.h>
#include <linux/gpio.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
#include <linux/errno.h>int misc_open(struct inode *inode, struct file *file)
{printk(KERN_INFO "打开\n");return 1;
}int misc_release(struct inode *inode, struct file *file)
{printk(KERN_INFO "关闭\n");return 1;
}static struct file_operations misc_operations = {.owner = THIS_MODULE,.open = misc_open,.release = misc_release};// 混杂设备结构体
static struct miscdevice misc_misc ={.minor = MISC_DYNAMIC_MINOR,.name = "my_misc",.fops = &misc_operations};static int __init mymisc_init(void)
{int rt;printk(KERN_INFO "混杂设备初始化\n");// 注册混杂设备// 混杂设备注册后都会在/sys/class/misc/下面看到,主设备号为10,此设备号可以// 自己分配。也可系统自动分配。misc_register原型其实就高度封装了字符设备注册rt = misc_register(&misc_misc);if (rt < 0){printk(KERN_ERR "注册混杂设备失败\n");goto err_misc_register;}return 0;err_misc_register:return rt;
}static void __exit mymisc_exit(void)
{// 注销混杂设备misc_deregister(&misc_misc);printk(KERN_INFO "注销混杂设备成功\n");
}module_init(mymisc_init);module_exit(mymisc_exit);MODULE_LICENSE("GPL");
应用层
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{int fd_led = open("/dev/my_misc", O_RDWR);if (fd_led < 0){printf("/dev/my_misc 打开失败\n");return -1;}printf("/dev/my_misc 打开成功!!!!!!!!!!!!!!!!!!!\n");close(fd_led);return 0;
}
这段代码就是混杂设备注册代码,没有啥的但是当我下载到开发板之后运行就会报错
[root@GEC6818 /Drive/Misc]#./misc_open
[ 763.422000] 打开 //这个是驱动层调试用的,由驱动层打印
[ 763.422000] Unable to handle kernel NULL pointer dereference at virtual address 0000000d
[ 763.427000] pgd = c9690000
[ 763.429000] [0000000d] *pgd=49ab4831, *pte=00000000, *ppte=00000000
[ 763.435000] Internal error: Oops: 17 [#9] PREEMPT SMP ARM
[ 763.441000] Modules linked in: misc_drv(O) rtl8723bu_wifi(O) x6818_humidity(O) stepmotor(O) relay(O) led(O) gec6818_beep(O) gas_drv(O) dc_motor(O) buttons_drv(O) [last unloaded: misc_drv]
[ 763.457000] CPU: 1 Tainted: G D O (3.4.39-gec #21)
[ 763.463000] PC is at do_sys_open+0xf8/0x174
[ 763.467000] LR is at path_openat+0xf4/0x3dc
[ 763.472000] pc : [<c0123428>] lr : [<c0131f00>] psr: 000b0013
[ 763.472000] sp : c96dff70 ip : ffffffff fp : bea05b1c
[ 763.483000] r10: 00000000 r9 : c96de000 r8 : ffffff9c
[ 763.488000] r7 : 00000001 r6 : 00000003 r5 : c9a6d000 r4 : 00000001
[ 763.495000] r3 : 00000000 r2 : c96dfe50 r1 : 200b0013 r0 : 00000001
[ 763.501000] Flags: nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
[ 763.508000] Control: 10c5383d Table: 4969006a DAC: 00000015
[ 763.514000]
[ 763.514000] PC: 0xc01233a8:
[ 763.518000] 33a8 e58d3010 e58d2014 0a000004 e31c0080 e3823c02 13822c06 e58d3014 158d2014
[ 763.526000] 33c8 e31c0901 e1a00001 13a07002 03a07000 e31c0902 03877001 eb002889 e3700a01
[ 763.535000] 33e8 e1a05000 81a06000 8a000024 e1a01004 e3a00000 eb00692f e2506000 ba00001d
[ 763.543000] 3408 e1a00008 e1a03007 e1a01005 e28d2008 eb003b9c e3700a01 e1a04000 8a00001a
[ 763.551000] 3428 e590100c e2807008 e1a00007 e5918020 e1d890b0 e2099a0f e3590901 03a09181
[ 763.559000] 3448 13a09020 e1a02009 eb00e5dc e3a0c000 e1a01009 e1a00008 e1a02007 e58dc000
[ 763.567000] 3468 e3a03001 e58dc004 eb00e4ea e1a00006 e1a01004 ebfffc6d e1a00005 eb002863
[ 763.575000] 3488 e1a00006 e28dd01c e8bd83f0 e1a00006 e1a06004 ebfffc1b eafffff6 e1a0c001
[ 763.583000]
[ 763.583000] LR: 0xc0131e80:
[ 763.588000] 1e80 e2503000 1a000028 e1a0000d e1a01004 e3c09d7f e1a00006 e3c9903f e599200c
[ 763.596000] 1ea0 e5823308 ebfff682 e2503000 1a00001e e28d8020 e1a00004 e1a01008 e1a02005
[ 763.604000] 1ec0 e1a03006 ebfffbdc e2507000 0a000018 e5943014 e3530000 0a000002 e5943020
[ 763.612000] 1ee0 e3130a02 0a000008 e59d001c e3500000 0a000000 ebffce7c e1a00004 ebffffb8
[ 763.620000] 1f00 e1a00007 e28dd034 e8bd8ff0 e5940018 eb0019e4 e5940014 eb00353d eafffff1
[ 763.628000] 1f20 e3e00016 e28dd034 e8bd8ff0 e1a07003 eaffffe6 e5943020 e28d2028 e8980003
[ 763.637000] 1f40 e58d2014 e3130001 e8820003 0a00003c e3c32c07 e3130040 e59d702c e3823010
[ 763.645000] 1f60 e5843020 1a00009e e59d0028 e5943000 e1500003 0a000098 e599300c e5933308
[ 763.653000]
[ 763.653000] SP: 0xc96dfef0:
[ 763.657000] fef0 00000041 c0a68d38 c98ab550 e2e02e10 ce270431 00000007 c9a6d005 00000000
[ 763.665000] ff10 c0123428 000b0013 ffffffff c96dff5c ffffff9c c000e7d8 00000001 200b0013
[ 763.673000] ff30 c96dfe50 00000000 00000001 c9a6d000 00000003 00000001 ffffff9c c96de000
[ 763.682000] ff50 00000000 bea05b1c ffffffff c96dff70 c0131f00 c0123428 000b0013 ffffffff
[ 763.690000] ff70 08100871 c06fbad8 00000002 e3130000 00000026 00000100 b6fbe000 00000000
[ 763.698000] ff90 00000000 00010324 00000005 c000edc4 c96de000 c000ec40 00000000 00000000
[ 763.706000] ffb0 00010558 00000002 bea05c7c 0001044c 00000000 00000000 00010324 00000005
[ 763.714000] ffd0 00000000 00000000 b6fef000 bea05b1c 00000000 bea05b04 00010474 b6f3c870
[ 763.722000]
[ 763.722000] R2: 0xc96dfdd0:
[ 763.727000] fdd0 00000017 c9963800 c96dff28 c9963800 0000000d c06f28d0 c99f3c00 c001924c
[ 763.735000] fdf0 00000001 00000001 c96dfe0c c0072d10 00000000 00000000 c9963848 00000000
[ 763.743000] fe10 00010000 00000000 c96dfef8 c95ae540 00000001 e2e02e5c c0a60520 c98ab540
[ 763.751000] fe30 00000001 00000001 c96dfe4c c0072d10 c96dfef8 c993d478 bea05b1c c013e2b4
[ 763.759000] fe50 c0a4c34c c0131160 e2c23000 e316c030 c96dfef8 00000017 c0018f78 c0a68b38
[ 763.767000] fe70 0000000d c96dff28 c96de000 00000000 bea05b1c c0008424 c96de000 00000000
[ 763.776000] fe90 bea05b1c c0131ec8 c96dfeb4 00000000 e2e447a0 00000000 b6fef000 c9963804
[ 763.784000] feb0 b6fee000 00000000 c98ab550 e2e02e10 e3137738 c0af18d0 b6fef000 c96dff78
[ 763.792000]
[ 763.792000] R5: 0xc9a6cf80:
[ 763.796000] cf80 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0
[ 763.804000] cfa0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0
[ 763.813000] cfc0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0
[ 763.821000] cfe0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0 e7fddef0
[ 763.829000] d000 7665642f 5f796d2f 6373696d 6f003600 0000362e 00362e6f 00362e6f 00362e6f
[ 763.837000] d020 62696c00 6f732e63 6f00362e 0000362e 00362e6f 00362e6f 00362e6f 00000000
[ 763.845000] d040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 763.853000] d060 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 763.861000]
[ 763.861000] R9: 0xc96ddf80:
[ 763.866000] df80 00000000 c00491f0 00000000 00000001 00000000 b6ebf798 000000f8 c0049274
[ 763.874000] dfa0 00000000 c000ec40 00000001 00000000 00000000 b6ec20ac 00000000 00000000
[ 763.882000] dfc0 00000001 00000000 b6ebf798 000000f8 b6ec20ac 00000000 b6fad000 00000000
[ 763.890000] dfe0 00000000 bee4dcc4 b6daebd8 b6e1e734 600b0010 00000000 00000000 00000000
[ 763.898000] e000 00000000 00000002 00000000 c99f3c00 c0a72c6c 00000001 00000015 c9a06f40
[ 763.907000] e020 00000000 c99f3c00 e30ba300 c1504980 c0a60520 c96de028 c96dfed4 c96dfe28
[ 763.915000] e040 c06faa10 00000000 00000000 00000000 00000000 00000000 01000000 00000000
[ 763.923000] e060 b6fec4c0 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 763.931000] Process misc_open (pid: 365, stack limit = 0xc96de2f0)
[ 763.937000] Stack: (0xc96dff70 to 0xc96e0000)
[ 763.942000] ff60: 08100871 c06fbad8 00000002 e3130000
[ 763.950000] ff80: 00000026 00000100 b6fbe000 00000000 00000000 00010324 00000005 c000edc4
[ 763.958000] ffa0: c96de000 c000ec40 00000000 00000000 00010558 00000002 bea05c7c 0001044c
[ 763.966000] ffc0: 00000000 00000000 00010324 00000005 00000000 00000000 b6fef000 bea05b1c
[ 763.974000] ffe0: 00000000 bea05b04 00010474 b6f3c870 600b0010 00010558 635f5821 635f5c21
[ 763.982000] [<c0123428>] (do_sys_open+0xf8/0x174) from [<c000ec40>] (ret_fast_syscall+0x0/0x30)
[ 763.991000] Code: eb003b9c e3700a01 e1a04000 8a00001a (e590100c)
[ 763.997000] ---[ end trace 4883a96b125639a6 ]---
Segmentation fault
最终发现是驱动层 open 函数返回值为 1 的问题
修改后
int misc_open(struct inode *inode, struct file *file)
{printk(KERN_INFO "打开\n");return 0;
}
[root@GEC6818 /Drive/Misc]# ./misc_open
[ 900.025000] 打开
[ 900.025000] 关闭
/dev/my_misc 打开成功!!!!!!!!!!!!!!!!!!!
真的无语,有谁知道原因啊。我也不懂。。。
Unable to handle kernel NULL pointer dereference at virtual address 0000000d[ 435.859000] pgd = c9相关推荐
- Unable to handle kernel NULL pointer dereference at virtual address 分析
Unable to handle kernel NULL pointer dereference at virtual address 分析 现象 [ 136.847780] br-lan: rece ...
- Unable to handle kernel NULL pointer dereference at virtual address
1:从sd卡出错log里可以看出来pc指针以及出错位置 PC is at dw_mci_pre_dma_transfer.isra.19+0x7c/0x158 pc : [<8032e130&g ...
- Unable to handle kernel NULL pointer dereference at virtual address 00000000问题的解决
Unable to handle kernel NULL pointer dereference at virtual address 00000000问题的解决 参考文章: (1)Unable to ...
- Nvidia AGX Xavier 升级到 JetPack 4.6版本 反复打开camera导致内核出错 Unable to handle kernel NULL pointer
这里写自定义目录标题 现象 日志显示 分析过程 解决思路 代码修改 现象 在原来 JetPack4.4 运行稳定的camera驱动,由于算法功能需要,升级到最新的JetPack4.6. 刚开始自测,功 ...
- Unable to handle kernel paging request at virtual address 的解决办法
原文地址为: Unable to handle kernel paging request at virtual address 的解决办法 今天想正式开始编写各底层硬件的驱动程序,首先是双口RAM的 ...
- 新手玩转Linux Kernel漏洞之Null Pointer Dereference
新手玩转Linux Kernel漏洞之Null Pointer Dereference 前言 这是我内核漏洞的入门篇, 不是很复杂, 希望能给徘徊在门外的小伙伴一点启发. 漏洞描述 A NULL po ...
- 【RK3399 Android系统】,启动时出现”Unable to handle kernel paging request at virtual address 490000004c“的解决思路
从Firefly官网下载的安卓系统源码,编译后,修改了部分驱动,启动的时候偶尔会出现"Unable to handle kernel paging request at virtual ad ...
- ncnn报null pointer dereference异常
错误描述 基于c++使用ncnn封装了深度学习模型,并将c++项目打包成为了一个so库给Android调用,在打包成为so库之前,在Windows系统以及Ubuntu系统利用电脑的camera测试过都 ...
- Android UVCCamera问题——Cause: null pointer dereference
记录遇到的问题. 采用的开源库链接:https://github.com/saki4510t/UVCCamera 使用该库预览的时候,如果拔掉uvc设备,会造成异常闪退. signal 11 (SIG ...
最新文章
- 数学图形(1.45)毛雷尔玫瑰(Maurer rose)
- 怎么进行mysql注入测试_MySQL for Java的SQL注入测试
- sklearn自学指南(part46)--新颖性和离群值检测方法概述
- android 自定义帧动画,Android 自定义方式实现帧动画效果
- 苹果笔记本电脑好用吗_苹果新品发布会消息汇总(8月25日)
- Broadcast简单使用
- 2022未来零售发展报告
- 浙大 PAT a1027
- java设计模式适配器模式_Java解释器设计模式
- Atlassian JIRA 插件开发之三 创建
- [WARNING]考前必读?!
- linux centos目录结构(一)
- NODE.JS菜鸟网总结
- JAVA程序打包为EXE
- 民生银行java 面试_2019民生银行招聘面试试题及答案解析
- HDU 4791 Alice's Print Service
- Spring| AOP之 引入(Introductions)
- 计算机控制系统是闭环还是开环,电喷摩托车系统的开环控制与闭环控制
- ctf:kali2:端口扫描:nmap和portscan
- 【Nape教程】Nape刚体碰撞检测
热门文章
- 大数据时代商业模式——企业如何创新?
- Unity EasyTouch(一)
- 大数据部门各个职位的职业生涯规划和发展路径
- 2021年夏令营全记录·南开CS
- 2021-2025年中国4K超高清蓝光播放器行业市场供需与战略研究报告
- UltraEdit-32的授权码
- js 根据深浅色背景,动态设置黑色白色文字颜色。判断颜色是否为深色,rgb转16进制,16进制转rgb
- 闪存驱动器_在任何Windows计算机上从您的闪存驱动器运行便携式Chrome
- 英雄联盟哪个服务器出无限火力,lol2020年无限火力模式什么时候开始 英雄联盟2020无限火力开启时间一览...
- 值得单曲循环的考研备考必备歌单,让你考前打满鸡血!