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
 
相关文档:
页申请的核心调用是: __alloc_pages(). 页申请顺序如下:
首先找最大能符合的块, 如果一个空闲块不能满足, 更高一级的块将分割成2个buddy, 一个被占用, 一个放入低一级的freelist.
当块被释放时, 检查每对buddy, 如果两者都空闲, 把他们合并到更高一级的块数组 ......
初用Linux时可能有处处不方便感觉, 可是等使用段时间掌控了些窍门技巧后就会感到越来越顺手了
以下是使用Linux积累些经验和窍门技巧
1.使用虚拟控制台
登录后按Alt F2键这时又能够看到"login:"提示符这个就是第 2个虚拟控制台般新安装Linux有 4个虚拟控制
台能够用Alt F1~Alt F4来访问虚拟控制台最有用时候 ......
一般来讲,如果你有一个有线调制解调器或者数字用户线路,你就可以使用家里的电脑获取由你的服务提供商动态分配的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 ......