linux驱动调试小结
近期被赶鸭子上架整linux上的驱动,折腾了好些天,趁着还有印象将自己搜罗的尝试的学到的记录一下,以备今后查阅
一、一些基础
1.驱动文件形式 --> *.ko
2.安装命令 --> insmod 卸载命令--> rmmod 都需要root权限 ,也可用modprobe
3.其他可能用到的命令:
modinfo -- 查看模块信息
demsg --- 查看硬件信息
objdump---查看模块详细信息(功能很强大,具体man)
4.关于驱动模型 及char block stream等详细信息 可以参考 Linux Device Driver 3thd
二、关于调试
主要尝试过两种方法:打印或单步调试
1.打印: printk 分很多级别信息,功能类似于c语言的printf, 一般来说信息打印到/var/log/messages,可通过cat命令或tail命令查看
大多数问题都可以通过printk来解决,缺点在于不够直感
2.调试工具: GDB ,KDB,KGDB
都需要编译DEBUG版本内核。
KDB单机汇编级调试,需要单独下载kernel对应的patch,
GDB没整明白,只知道 gdb vmlinux启动后 通过add-symobl-file增加被调试模块的符号信息
KGDB 在2.6.*后就已缺省放在内核源码里了,其他的需要单独下载PATCH,反正我的2.6.18内核里没有(在kernel.org中,people/ark 下应该能找到2.6.18的patch,注意打patch的顺序) 查看是否有KGDB的方法是:源码路径下make menuconfig后能看到KGDB这一项。下面主要介绍2.6.18上KGDB环境的建立:
KGDB需要两台机器配合,一个开发机,一个测试机,两台机器通过串口线连接(该线是需要处理的,具体的与window上调试驱地的一致)
a.硬件连接性测试:在开发机上 执行 stty -ispeed 115200 -ospeed 115200 -F /dev/ttyS0
 
相关文档:
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......
一个文件,除了本身包含的内容以外,还会有一个名字和其他一些用于管理方面的“属性”信息,比如文件的建立/修改日志,它的访问权限等。这些属性都被保存到一中我们称之为inode(节点)的数据结构中,文件的长度和它在磁盘上的存放地点也保存在这里。系统使用的是文件的节点编号,而子目录结构只不过是为方便人们 ......
1 定义文件
linux/errno.h
#ifndef _LINUX_ERRNO_H
#define _LINUX_ERRNO_H
#include <asm/errno.h>
#ifdef __KERNEL__
/* Should never be seen by user programs */
#define ERESTARTSYS 512
#define ERESTARTNOINTR 513
#define ERESTARTNOHAND 5 ......
一般来讲,如果你有一个有线调制解调器或者数字用户线路,你就可以使用家里的电脑获取由你的服务提供商动态分配的IP地址。如果在调制解调器和本地网络之间安装了有线/数字用户线路的路由器,你的电脑很有可能是在启动过程中从路由器获取了IP地址。你也可以选择禁用本地路由器中DHCP服务器的功能,而设置 ......
Symptom:
This technote provides information on how to interpret a Linux core
dump file when an application running on the system, terminates
unexpectedly, due to a segmentation fault and generates a core file.
Reason for the problem:
A segmentation fault generally occu ......