2018年3月31日

32、应用调试之编写输入模拟器

摘要: 1. 产品要经过测试才能发布,一般都是人工操作,比如手机触摸屏、遥控器2. 操作过程中发现错误,要再次复现,找到规律,修改程序3. 能否在驱动程序里把所有的操作记录下来,存为文件 当出错时,可以通过文件里的数据来"复现"输入 input_event上报的时候保存数据 1、使用之前仿照printk写的 阅读全文

posted @ 2018-03-31 13:50 拉风摊主 阅读(134) 评论(0) 推荐(0) 编辑

30、应用调试之配置内核输出应用程序的段错误信息

摘要: 应用程序在执行的时候,如果驱动程序出现问题,会打印oops或者堆栈分析信息,也是是从在内核态下会打印错信息,而如果应用程序本身有问题,其执行时在用户态,只会提示段错误信息,这时候需要修改内核,让其支持应用出错时打印更多信息,根据oops信息搜索“”“Unable to handle kernel ” 阅读全文

posted @ 2018-03-31 13:47 拉风摊主 阅读(351) 评论(0) 推荐(0) 编辑

31、应用调试之自制系统调用、编写进程查看器

摘要: 应用程序调用的read、open这些函数是glibc实现的,在调用的时候从用户态切换为内核态,其实质就是执行一条swi指令,并带有一个value,swi指令执行的时候会产生一个异常,CPU会跳到异常处理函数(vector_swi)去执行,会根据导致异常的指令里面的value调用对应的函数,比如sys 阅读全文

posted @ 2018-03-31 13:47 拉风摊主 阅读(164) 评论(0) 推荐(0) 编辑

29、应用调试之使用GDB来调试应用程序

摘要: 说明:gdb可以实现源代码单步调试 原理: 1、gdb在PC机上运行,gdbserver在arm开发板上运行,gdbserver在开发板上相当于父进程,应用相当于子进程,PC上gdb发命令给gdbserver,gdbserver在发命令给应用子进程 2、gdb在运行的时候需要一个带有调试信息的app 阅读全文

posted @ 2018-03-31 13:46 拉风摊主 阅读(189) 评论(0) 推荐(0) 编辑

28、应用调试之strace命令来跟踪系统调用

摘要: strace是个工具,在使用时需要先按照,见韦东山书籍: 1、tar xjf starce-4.5.15.tar.bz2 2、cd strace-4.5.15/ 3、patch -p1 < ../strace-fix-arm-bad-syscall.patch 4、./configure --hos 阅读全文

posted @ 2018-03-31 13:44 拉风摊主 阅读(490) 评论(0) 推荐(0) 编辑

2018年3月30日

27、驱动调试之修改系统时钟中断定位系统僵死问题

摘要: 该调试方法用于处理运行驱动的时候系统进入僵死状态,即无反应了,也不能输出信息 利用每时每刻系统时钟都会尝试中断的原理来处理,在该中断函数中加入打印一些信息保存信息来定位僵死的原因(中断发生的时候会保存现场,找到现场就知道僵死的函数地址) (2.6的内核中断总入口函数是asm_do_IRQ(),其形参 阅读全文

posted @ 2018-03-30 20:21 拉风摊主 阅读(221) 评论(0) 推荐(0) 编辑

25、驱动调试之打印到proc虚拟文件

摘要: 1、dmesg指令是通过读/proc/kmsg来获取打印信息,也可以通过cat /proc/kmsg打印; 说明:kmsg是环形缓存区,只能读一次 2、内核中fs/proc目录下有相关文件,比如proc_misc.c,在入口函数中可以看到(4.3.2内核改到kmsg.c文件中) #ifdef CIN 阅读全文

posted @ 2018-03-30 20:19 拉风摊主 阅读(274) 评论(0) 推荐(0) 编辑

26、驱动调试之根据oops信息和堆栈确定出错的代码

摘要: a.驱动作为模块:1. 根据pc值确定该指令属于内核还是外加的模块pc=0xbf000018 它属于什么的地址?是内核还是通过insmod加载的驱动程序?先判断是否属于内核的地址: 看System.map确定内核的函数的地址范围:c0004000~c03265a4 <System.map文件在内核m 阅读全文

posted @ 2018-03-30 20:19 拉风摊主 阅读(412) 评论(0) 推荐(0) 编辑

24、驱动调试之printk

摘要: 1、uboot跳转到内核启动的时候通过环境变量 console设置控制台 (console = ttySAC0表示输出到串口,并从串口结束输入,也可以设置console=tty1,表示输出到LCD,从inputevent接受输入事件) 2、内核用printk打印,printk肯定要调用硬件函数,其通 阅读全文

posted @ 2018-03-30 20:18 拉风摊主 阅读(296) 评论(0) 推荐(0) 编辑

2018年3月28日

23、uevent/hotplug热拔插机制

摘要: (class_device_create的目的是为了让mdev根据它注册的信息来创建设备节点) class_device_create class_device_register class_device_add kobject_uevent(&class_dev->kobj, KOBJ_ADD); 阅读全文

posted @ 2018-03-28 23:17 拉风摊主 阅读(210) 评论(0) 推荐(0) 编辑

导航