
驱动应用程序调试
文章平均质量分 88
qingkongyeyue
拼搏到无能为力,坚持到感动自己,有些路走下去很长,很累,但是不走会后悔。人生最大的痛苦,莫过于,坚持了不该坚持的,而放弃了不该放弃的
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
驱动程序调试方法之printk
转自http://www.cnblogs.com/lidabo/p/5414007.html1、基本原理(1)在UBOOT里设置console=ttySAC0或者console=tty1这里是设置控制终端,ttySAC0 表示串口, tty1 表示lcdPC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC在控制台上登录时,使用的是tty1。使用Alt+[F转载 2017-04-29 11:22:30 · 897 阅读 · 0 评论 -
printk的打印级别
转自http://blog.youkuaiyun.com/youxin2012/article/details/19563239printk 为内核调试常用的打印函数,如同应用层开发常用的printf打印函数。内核通过 printk() 输出的信息具有日志级别,日志级别是通过在 printk()输出的字符串前加一个带尖括号的整数来控制的,如 printk(KERN_ALERT "Hello,转载 2017-07-19 09:54:48 · 1729 阅读 · 0 评论 -
GDB十分钟教程
转自http://blog.youkuaiyun.com/liigo/article/details/582231/本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。GDB是一个由GNU开源组织发布的、UNIX/Linux操作系统下的、基于命令行的、功能强大的程序调试工具。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日转载 2017-07-18 18:52:17 · 274 阅读 · 0 评论 -
驱动程序调试常用方法
转自http://blog.youkuaiyun.com/caijp1090/article/details/7471862驱动程序开发的一个重大难点就是不易调试。本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是:利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用ioctl方法 利用/proc 文件系统 使用kgdb 一、利用prin转载 2017-07-09 11:39:11 · 9858 阅读 · 0 评论 -
超级终端使用简介
转自http://blog.youkuaiyun.com/Joetao/article/details/5849347超级终端使用简介Dec.11, 2007 in 常见问题 超级终端是windows自带的一个串口调试工具,其使用较为简单,被广泛使用在串口设备的初级调试上。 下面介绍一下一般使用的步骤:配置连接需要调试串口基本参数,其操作为:1) 选择菜单“文转载 2017-07-02 23:18:58 · 21498 阅读 · 0 评论 -
应用调试之配置修改内核打印用户态段错误信
转自http://liu1227787871.blog.163.com/blog/static/2053631972012613102341318/根据之前的调试我们知道,当应用程序出错的时候,会打印一些信息。但是有时候这些信息时不够的,那么我们能否配置内核使其输出更多的信息呢?答案是肯定的,本节我们就来详细讲一下:应用程序进入内核态调用驱动程序后,在驱动程序里面(内核态里面)原创 2017-05-09 22:55:18 · 1251 阅读 · 0 评论 -
应用调试之使用gdb和gdbserver
一、调试原理这里的gdb调试是在pc机上对在开发板上运行的程序进行调试。具体来说的话,在pc机上要运行gdb,在开发板上运行dbserver。gdb调试的时候,pc机上的gdb向开发板上的gdbserver发出命令,而开发板上的gdbserver(是应用程序的父进程)就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作!由此我们知道,pc机上要运行gdb,开发板上要运行gdbser转载 2017-05-08 23:03:45 · 1690 阅读 · 0 评论 -
驱动调试之打印到proc虚拟文件2--编写程序
文件名为mymsg.c参考kmsg.c,printk.c目的:想定义1个缓冲区如mulog_buf,在读函数里面把缓冲区里面的数据给/proc/mymsg,应用程序通过cat /proc/mymsg就会进入到内核态,发现是虚拟文件系统的文件,找到它的file_operation结构体,调用读函数,在读函数里面调用copy_to_user#define MYLOG_BUF_LEN 1原创 2017-05-06 22:53:29 · 552 阅读 · 0 评论 -
驱动调试之打印到proc虚拟文件1
printk会把数据放在内核的1个缓冲区里面,另外一路把信息从硬件上输出出来,当我们想查看之前的信息可以用dmesg命令打印出缓冲区里面的信息。dmesg命令打印出来的信息来自/proc/kmsgproc是虚拟的文件系统系统启动的时候里面有mount -a这里a代表把所有的文件系统都挂接上去。所有的文件系统在文件fstab中,如把proc文件系统挂载在/pr原创 2017-05-06 22:54:30 · 1076 阅读 · 0 评论 -
驱动调试之打印到proc虚拟文件3--实验
编译编写的驱动并拷贝到网络文件系统装载模块,用cat /proc/mymsg是没有用的,因为cat时会调用到读函数,读函数里环形缓冲区还没有内容。编译另外的驱动出现没有定义的函数,链接时会帮我们找到的,因为这是1个外部函数,把编译好的驱动拷贝到文件系统里面如果函数myprink的驱动没有装载,先装载我们的first_drv驱动原创 2017-05-06 22:52:51 · 475 阅读 · 0 评论 -
应用调试之使用strace命令跟踪系统调用
一、安装:1、解压:tar xvf strace-4.5.15.tar.bz2 2、打补丁:cd strace-4.5.15 patch -p1 ---是原来的文件,+++是修改后的文件,+是添加的代码,要加参数把第1个斜杠前的内容去掉,才能找到要给哪一个文件打补丁。-p1这里的数字1是从补丁文件原创 2017-05-06 16:32:06 · 3878 阅读 · 0 评论 -
驱动调试之printk的使用
用printk来调试驱动程序先引进错误(不用虚拟地址,直接用物理地址)编译驱动程序和测试程序并拷贝到网络文件系统里面去装载驱动程序,运行测试程序无法卸载驱动,因为程序崩溃,一直占用驱动,智能通过reboot重启重启后安装驱动看打印运行测试程序,打印出了26行,就知道是在后面的行死了原因是访问了非法地址查看gpf原创 2017-05-06 15:32:06 · 832 阅读 · 0 评论 -
驱动调试之printk的原理
1、启动开发板进入uboot输入print命令打印环境变量2、启动参数(上面bootargs部分)uboot的目的是启动内核,启动内核前要设置一些参数,修改启动参数不添加console=ttySAC0(内核打印信息显示的地方)没有内核的任何打印信息出来uboot设置参数,console=ttySAC0,这里0表示第1个串口,用tty1打印到LCD原创 2017-05-06 11:51:41 · 1783 阅读 · 0 评论 -
驱动调试之修改系统时钟中断定位系统僵死问题
转自http://blog.youkuaiyun.com/bytxl/article/details/38292829在first_drv.c中故意引入错误,在点灯时引入死循环,当应用程序调用write函数就会在while里面卡住。重新编译驱动,并拷贝到网络文件系统中,装载驱动并把灯点亮,但是系统卡死了。可以看测试程序的源代码,看涉及什么系统调用,找到对应的驱动程序并进行分析。转载 2017-05-02 22:48:24 · 712 阅读 · 0 评论 -
驱动调试之自制工具——寄存器编辑器
转自http://liu1227787871.blog.163.com/blog/static/2053631972012610101614610/当我们调试驱动程序的时候,可能要调整寄存器的设置。按照我们之前的作法就是直接在程序里面修改,然后重新编译程序。但是这种方法比较麻烦,我们可以编写一个工具,可以直接对寄存器进行修改,这就是我们说的寄存器编辑器。其具体程序如下:这个工具可以转载 2017-05-02 21:21:11 · 2264 阅读 · 0 评论 -
应用调试之自制系统调用
转自http://liu1227787871.blog.163.com/blog/static/20536319720126135157567/一、原理要想自制系统调用,当然首相要做的就是明白系统调用的过程:我们拿open函数来举个例子:当用户空间执行open函数时,会通过glibc函数库的作用最终去调用sys_open函数,sys_open函数最终又会调用我们具体注册的open函转载 2017-05-10 21:55:48 · 490 阅读 · 0 评论 -
驱动调试之段错误分析_根据栈信息确定函数调用过程
一. 根据栈信息分析函数调用过程在函数调用中,一方面要执行,一方面要调回# ./firstdrvtest onUnable to handle kernel paging request at virtual address 56000050pgd = c3e78000[56000050] *pgd=00000000Internal error: Oops: 5 [#1]原创 2017-05-01 17:33:45 · 1062 阅读 · 0 评论 -
linux驱动调试--段错误之oops信息分析
发生段错误原因就是访问了不该访问的地址,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等。下面根据Oops信息来分析一下段错误驱动程序中不能够直接使用物理地址,需要通过ioremap进行映射first_drv.c点击(此处)折叠或打开 #include linux/module.h>#include linux/kerne原创 2017-05-01 15:45:06 · 2400 阅读 · 0 评论 -
编写Linux驱动常见错误
转自http://neilengineer.cublog.cn/工作中遇到的编写Linux驱动的常见错误和注意事项整理。 1、init函数返回值问题,exit函数不需要返回值 2、头文件不存在的问题 3、缺少某些符号如 “}” “;” 4、模块调用内核中函数时的编译 5、No such device or address 问题1、驱动的init函数声明错误转载 2017-09-12 11:08:27 · 3185 阅读 · 0 评论