用内核打印信息调试驱动程序

Problem Descriplation:
加载ed_device驱动后,ifconfig不显示ed0连接。但是ifconfig ed0会打印出数据。
ifconfig ed0 192.168.5.1时出现segmentation fault。

eth0: link up, 100Mbps, full-duplex, lpa 0x4DE1
Get the Device Major Number is 200
Get the Device Major Number is 201
Get the Device Major Number is 200
Get the Device Major Number is 201
Unable to handle kernel NULL pointer dereference at virtual address 00000000
//内核无法处理指向0的指针
pgd = c3b08000
[00000000] *pgd=33b22031, *pte=00000000, *ppte=00000000
Internal error: Oops: 817 [#1]
last sysfs file: /sys/devices/virtual/vc/vcs4/dev
Modules linked in: ed_device IrDAStudy
CPU: 0    Not tainted  (2.6.32.2-FriendlyARM #1)
PC is at memcpy+0x8c/0x29c
//8c是指令偏移,29c是函数大小。
//出错的地方
LR is at 0x30444500
pc : [<c014402c>]    lr : [<30444500>]    psr: 00000013
sp : c3b19dbc  ip : 0000001c  fp : c3b19dec
r10: c3b6e30c  r9 : c3b8f380  r8 : c3b8f380
r7 : 00000001  r6 : 00000080  r5 : bf006aa0  r4 : bf006f10
r3 : bf006594  r2 : ffffffe6  r1 : bf006af4  r0 : 00000000
Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: c000717f  Table: 33b08000  DAC: 00000015
Process ifconfig (pid: 796, stack limit = 0xc3b18270)
Stack: (0xc3b19dbc to 0xc3b1a000)
9da0:                                                                bf006aa0
9dc0: 00000080 00000001 c3b8f380 00000000 bf006f10 bf0065b4 bf006f10 bf006aa0
9de0: c3b19e04 c3b19df0 c02c4338 bf0065a4 bf006f10 000000c1 c3b19e24 c3b19e08
9e00: c02c3894 c02c4278 c3b18000 bed6ec80 c3b19e50 00008914 c3b19eac c3b19e28
9e20: c0305a8c c02c382c bed6ec80 bed6ec80 00000020 00000000 00008913 bf006f10
9e40: 0105a8c0 c3b19e60 c3b6e300 00000000 00306465 00000000 00000000 00000000
9e60: 000000c1 0105a8c0 bed6ef59 00000000 000000c1 0105a8c0 bed6ef59 00000000
9e80: bed6ef59 00008914 bed6ec80 c02b2240 00000003 c0030088 c3b18000 00000000
9ea0: c3b19ebc c3b19eb0 c0306f48 c0305370 c3b19edc c3b19ec0 c02b22b4 c0306d9c
9ec0: c3be4300 00008914 c02b2240 00000003 c3b19efc c3b19ee0 c00a79f0 c02b2250
9ee0: bed6ec80 bed6ec80 00008914 00000003 c3b19f7c c3b19f00 c00a7ce8 c00a79c8
9f00: c002f1e0 c0036ba0 000000b0 00100077 c3940780 000d1000 c3b19f7c c3b19f28
9f20: c008db44 c008d49c 00100077 00000000 00000000 000000b0 00000000 60000013
9f40: c3bf7210 c3940780 000d1000 c39407b4 000b0000 c3be4300 bed6ec80 00008914
9f60: 00000003 c0030088 c3b18000 00000000 c3b19fa4 c3b19f80 c00a8290 c00a7c8c
9f80: 40229000 00000000 00099ad8 bed6ee7c 0008ad68 00000036 00000000 c3b19fa8
9fa0: c002fee0 c00a8260 00099ad8 bed6ee7c 00000003 00008914 bed6ec80 00099ad8
9fc0: 00099ad8 bed6ee7c 0008ad68 00000036 0008adc8 00000000 40024000 00000000
9fe0: bed6ec83 bed6ec60 0000f0b8 401c0b1c 20000010 00000003 00000000 00000000
//出错的地方是地址c014402c,回溯这附近函数。
//cat /proc/kallsyms发现c014402c地址附近的函数是memcpy,地址为
c0143fa0。c0143fa0加偏移量8c就是c014402c。

Backtrace:
[<bf006594>] (ednet_open+0x0/0x4c [ed_device]) from [<c02c4338>] (dev_open+0xd0/0x12c)
 r5:bf006aa0 r4:bf006f10
[<c02c4268>] (dev_open+0x0/0x12c) from [<c02c3894>] (dev_change_flags+0x78/0x17c)
 r5:000000c1 r4:bf006f10
[<c02c381c>] (dev_change_flags+0x0/0x17c) from [<c0305a8c>] (devinet_ioctl+0x72c/0x810)
 r7:00008914 r6:c3b19e50 r5:bed6ec80 r4:c3b18000
[<c0305360>] (devinet_ioctl+0x0/0x810) from [<c0306f48>] (inet_ioctl+0x1bc/0x1c8)
[<c0306d8c>] (inet_ioctl+0x0/0x1c8) from [<c02b22b4>] (sock_ioctl+0x74/0x274)
[<c02b2240>] (sock_ioctl+0x0/0x274) from [<c00a79f0>] (vfs_ioctl+0x38/0x7c)
 r7:00000003 r6:c02b2240 r5:00008914 r4:c3be4300
[<c00a79b8>] (vfs_ioctl+0x0/0x7c) from [<c00a7ce8>] (do_vfs_ioctl+0x6c/0x5d4)
 r7:00000003 r6:00008914 r5:bed6ec80 r4:bed6ec80
[<c00a7c7c>] (do_vfs_ioctl+0x0/0x5d4) from [<c00a8290>] (sys_ioctl+0x40/0x68)
[<c00a8250>] (sys_ioctl+0x0/0x68) from [<c002fee0>] (ret_fast_syscall+0x0/0x28)
 r7:00000036 r6:0008ad68 r5:bed6ee7c r4:00099ad8
Code: e4805004 e4806004 e4807004 e4808004 (e480e004)
---[ end trace cb70d696cb70d696 ]---

Reference

[1].http://liu1227787871.blog.163.com/blog/static/20536319720126101202205/

时间: 2024-12-12 00:02:20

用内核打印信息调试驱动程序的相关文章

[MapReduce]MapReduce调试:在TaskTracker节点上查看打印信息

业务背景 MapReduce编程模型的线上调试并不方便,它不像本地Java程序那样可以很方便地及时看到输出结果,本文将提供一种比较简捷的方式对MapReduce Job进行调试. 分析 完全并行模式下的MapReduce Job,使用 System.out.println("xxx"); 并不会打印到控制台上,因为完全并行模式下的MR Job是分布在集群上各个TaskTracker节点上运行的,因此,使用System.out.println的结果,是将打印信息打印到实际运行的Slave

VS2013+cocos2d-x3.10 调试项目同时在控制台(黑窗--终端)打印信息

今天!有会儿空功夫,装了cocos2d-x v3.10. 新建项目,打开,发布,打包!(打包环境配置),真是一键搞定派. 好吧!这就是发展吧.快,简,易.只要你喜欢随心所欲. 在小玩之余发现了一个奇怪的事情,标准输出信息(如std::cout.printf等)不是都是输出到控制台的(也就是传说中的黑窗)?控制台那? 只有调试的游戏项目孤零零的站在那里! 我这里除了把HelloWorld!换了张图片以外!还有就是加了个onTouchBegan(),onTouchEnd()用于输出打印触摸的点的坐标

屏蔽内核启动打印信息

最近做的4412板子终于经过测试形成产品,在这之前需要把内核启动过程中的打印信息去掉,并且更换启动LOGO,下面讲讲自己去掉打印信息的过程. 去掉打印信息方法很多,我使用一个相对比较简单的,就是将下面选项的[*]去掉 Device Drivers  ---> Character devices  ---> [* ]   Support for console on virtual terminal 这样printk的打印信息就不会输出在显示器或LCD上. 将打印信息去掉后,莫名其妙的会出现因为

module_param 用于动态开启/关闭 驱动打印信息

1.定义模块参数的方法: module_param(name, type, perm); 其中,name:表示参数的名字;      type:表示参数的类型;      perm:表示参数的访问权限; type参数设定的类型和perm的访问权限具体数值数值请参考内核定义. 2.可以在insmod(装载模块)的时候为参数指定值,如果没有指定则使用默认值 static int num=10; module_param(num,int,S_IRUGO); static int hello_init(

WPF 使用Console.Write打印信息到控制台窗口中

WPF中使用Console.Write函数来打印信息是没有意义的,因为并没有给其输出字符的窗口.对于桌面程序来说,这是十分合理的,然而有时为了方便调试,在程序编写过程中打印出信息给程序员看还是必要的,利用Windows的API,在DEBUG的时候打开一个控制台窗口以供信息打印显示. 创建一个管理类 public static class ConsoleManager { private const string Kernel32_DllName = "kernel32.dll"; [D

linux内核打印级别

1.printk()是一个内核的一个记录日志的机制,经常用来记录信息或者警告.printk可以指定输出日志的优先级,在include/linux/kern_levels.h中有相应的宏定义 1 #define KERN_SOH "\001" /* ASCII Start Of Header */ 2 #define KERN_SOH_ASCII '\001' 3 4 #define KERN_EMERG KERN_SOH "0" /* system is unusa

NSLog打印信息的从新设置

前提:在XCode做开发调试时往往需要打印一些调试信息做debug用,大家知道当打印信息的地方多了之后在模拟器上跑可能不会有什么问题,因为模拟器用的是电脑的硬件但是当应用跑在设备上时这些输出语句会在很大程度上影响应用的性能,针对这种问题可以写一些宏来控制这些调试信息的输出. 在release版本禁止输出NSLog内容 因为NSLog的输出还是比较消耗系统资源的,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉. 我们可以在发布版本前先把所有NSLog语句注

DDLog-不同颜色打印信息

文章转载自:http://www.cnblogs.com/hxwj/p/5036358.html (一)下载安装 1.安装插件 XcodeColors Github 链接:https://github.com/robbiehanson/XcodeColors 打开XcodeColors项目,编译即可.它会在你的电脑中安装插XcodeColors.xcplugin.具体路径在:~/Library/Application Support/Developer/Shared/Xcode/Plug-ins

linux内核打印数据到串口控制台,printk数据不打印问题

linux内核打印数据到串口控制台问题 原文来源:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.查看当前控制台的打印级别 cat /proc/sys/kernel/printk 4    4    1    7 其中第一个“4”表示内核打印函数printk的打印级别,只有级别比他高的信息才能在控制台上打印出来,既 0-3级别的信息 2.修改打印 echo "新的打印级别  4    1    7" >/proc/sys/kernel/pr