- 博客(22)
- 资源 (26)
- 收藏
- 关注
原创 LINUX内核调试相关--oops信息的定位
Ø 实验目的与意义 1 、掌握printk 的使用、设置及实现原理,理解分级别进行打印log 信息的实现方法 2 、掌握如何分析oops 的方法 3 、掌握strace 工具的移植和使用方法 Ø 基本原理和方法 1 、请回顾栈的工作原理,尤其是栈帧的作用 2 、请对照pr
2011-07-12 23:27:37 1861
原创 定位可动态加载的内核模块的OOPS代码行
定位可动态加载的内核模块的OOPS代码行 1. 从vmlinux获取具体的代码行 文章中albcamus版主也提到了,需要有自己编译的vmlinux,而且编译时打开compile with debug info. 这个选项打开之后会使vmlinux文件比不加调试-定位可动态加载的
2011-07-12 23:14:39 1377
原创 Linux 调试技术
本文讨论了四种调试 Linux 程序的情况。在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet Another Malloc Debugger(YAMD)工具来调试它们。在第 2 种情况中,我们使用了 Linux 中的 strace 实
2011-07-12 22:50:24 1077
原创 gpio模拟I2C总线c代码实现
<br />#include <reg52.h><br />#define uchar unsigned char<br />#define uint unsigned int<br />sbit I2C_SCL = P2^6; //模拟I2C总线的引脚定义<br />sbit I2C_SDA = P2^7;<br />#define I2C_DELAY_VALUE 12 //定义I2C总线时钟的延时值,要根据实际情况修改,取值1~255<br />
2011-03-07 23:46:00 2164
原创 linux等待队列使用步骤
<br /> <br />编写Linux驱动程序的一个问题是"到底如何使用等待队列呢"<br /> 等待队列很容易使用, 尽管它的设计很是微妙, 但你不需要知道它的内部细节, 处理等待队列的最佳方式就是依照如下操作:<br /> 1. 声明一个struct wait_queue * 变量. 你需要为每一个可以让进程睡眠的事件预备这样一个变量. 这就是我建议你放在描述硬件特性数据结构中的数据项.<br /> 2. 将该变量的指针作为参数传递给不同的sleep_on和wake_up函数.<br /> 这
2010-12-26 23:43:00 1059
转载 在 Linux 下用户空间与内核空间数据交换的方式,第 2 部分: procfs、seq_file、debugfs和relayfs
一、procfsprocfs是比较老的一种用户态与内核态的数据交换方式,内核的很多数据都是通过这种方式出口给用户的,内核的很多参数也是通过这种方式来让用户方便设置的。除了sysctl出口到/proc下的参数,procfs提供的大部分内核参数是只读的。实际上,很多应用严重地依赖于procfs,因此它几乎是必不可少的组件。前面部分的几个例子实际上已经使用它来出口内核数据,但是并没有讲解如何使用,本节将讲解如何使用procfs。Procfs提供了如下API:struct proc_dir_entr
2010-12-26 23:07:00 784
原创 proc源码解析-proc文件系统的内容--proc数据结构--proc初始化
<br />在linux系统中,伪文件系统是系统中重要的组成部分,它与普通文件的最大差别在于它的易失性。普通文件都有固定的存储介质,而伪文件系统则存储在内存中,这也使得伪文件系统在系统掉电后,它保存的内容就会挥发掉。<br />Linux系统中存在以下几类伪文件系统:<br />1.procfs:proc提供内核和用户交互的平台,由于其文件格式是ASCII,所以用户可以使用cat,vim,echo等命令查看或修改文件,当然必须在root用户下才有相应权限。<br />2.sysfs:与procfs类似,由于
2010-12-26 22:41:00 1552
原创 Linux内核中的seq操作
<br />1. 前言 在fs/seq_file.c中定义了关于seq操作的一系列顺序读取的函数,这些函数最早是在2001年就引入了,但以前内核中一直用得不多,而到了2.6内核后,许多/proc的只读文件中大量使用了seq函数处理。以下内核源码版本为2.6.17.11。<br />2. seq相关数据结构<br />2.1 seq文件结构struct seq_file {<br /> char *buf;<br /> size_t size;<br /> size_t from;<br /> size_t
2010-12-26 22:36:00 1096
原创 kernel module编程(八):读取proc文件之seq_file
<br /><br />在上次我们使用了read_proc的方式通过/proc文件读取kernel module的信息。作者给的例子他自己说是ugly。而我们在读取大量数据时发现,受到用户buffer大小的限制(page的大小),可能需要读取多次,不仅需要记录上次读取的位置,而且由于每次读取我们申请了信号量,读取完释放,那么如果多次读取的间隔中,如果信号量被写所获取就好出现混乱。linux kernel提供seq_file更好的方式来解决这个问题,除非我们确定读取的信息量非常少,能够在page中返回,我们应
2010-12-26 22:33:00 952 1
原创 Linux内核proc文件系统的冰山一角--源自对/proc/net/dev文件中各网卡参数的疑问
最近在调试网卡驱动时一直对/proc/net/dev 文件中各网卡参数是如何得来的有很大的疑问。insmod 以太网卡驱动后,cat /proc/net/dev 可以看到多了eth0的信息。开始,一直以为是驱动的代码调用某个写/proc文件的函数,从而把eth0的信息写到/proc/net/dev文件里。 可是反复看代码也没有发现相关的函数。今天突然想先拿/proc/interrupt 来分析一下,看了看linux-2.6.28的代码,就有了这篇《Linux内核proc文件系统的冰山一角--源自/pro
2010-12-26 22:29:00 1571 1
原创 inux procfs详解
<br /><br />目录<br />-----------------<br />0 序言<br />0.1 简介<br />0.2 责任<br />1 收集系统信息<br />1.0 proc文件系统概览<br />1.1 进程相关信息子目录<br />1.2 内核数据<br />1.3 IDE接口信息 /proc/ide<br />1.4 网络统计信息 /proc/net<br />1.5 SCSI接口信息 /proc/scsi<br />1.6 并行端口信息 /proc/parport<br />
2010-12-26 22:19:00 792
原创 platform_device和platform_driver
<br /><br /> <br />platform_device和platform_driver(一)<br />首先介绍一下注册一个驱动的步骤:<br />1、定义一个platform_driver结构<br />2、初始化这个结构,指定其probe、remove等函数,并初始化其中的driver变量<br />3、实现其probe、remove等函数<br />看platform_driver结构,定义于include/linux/platform_device.h文件中:<br /><br />s
2010-12-26 14:44:00 1113
原创 智能卡数据传输协议
<br /><br />智能卡数据传输协议<br /><br /> 当智能卡送出ATR和可能发生的PTS后,它等待着从终端来的第1条命令,后继的处理永远相应于主从原则,终端为主而卡为从。具体而言,终端发送命令给卡,而后者执行它随后并回送——应答,这种命令和响应来来往往的相互作用永不改变。<br /> 可以构造出与智能卡通信的不同方法。如果发生了一次干扰,这里也有大量的不同方法使之再同步通信。出现差错时命令的准确实现,相应的应答和采取的处理都规定在传输协议中。<br /> 总共有15种可以使用的通信协议
2010-12-19 23:33:00 2151
原创 智能卡接口控制器(SIM)ATR应答
<br /><br />智能卡接口控制器(SIM)ATR应答 <br /><br />ISO7816 标准是个标准的半双工接口,本模块作为主设备,控制SIM 卡的操作,SIM 卡<br />作为从设备只有在两种情况下产生应答信号:<br />收到RST 信号后发送ATR、接到命令后应答。<br />因此,SIM 卡驱动模块作为主设备,主要完成两个操作:发送RST 等待ATR,发送命令并等<br />待SIM 卡的应答。<br />TX, XMT, 发送transmit<br />RX, RCV, 接收Rec
2010-12-19 23:09:00 6202 3
原创 回调函数
<br /> <br />如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数(Callback Function)。<br /><br />回调机制包括两部分:服务执行者和服务方式制定者。<br /> 1. 服务执行者先制定服务规范;<br /> 2.服务方式制定者然后按照规范制定服务方式;<br /> 3.然后执行者按照这个方式提供服务。<br />回调函数的方式是把函数指针的作为参数传递进
2010-12-19 20:05:00 812
原创 request_irq() | 注册中断服务
<br /> <br />在 2.4 内核和 2.6内核中都使用 request_irq() 函数来注册中断服务函数。在 2.4 内核中,需要包含的头文件是 #include <linux/sched.h> ,2.6 内核中需要包含的头文件则是<br />#include <linux/interrupt.h> 。函数原型如下:<br />· 2.4 内核 <br />int request_irq (unsigned int irq, void (*handler)(int, void *, struct
2010-12-19 19:58:00 3977
原创 mknod详解Linux学习
<br />mknod - make block or character special files<br />mknod [OPTION]... NAME TYPE [MAJOR MINOR]<br /> option 有用的就是 -m 了<br /> name 自定义<br /> type 有 b 和 c 还有 p<br /> 主设备号<br /> 次设备号 <br />主设备号是由/usr/src/linux/include/linux/major.h定义的,如
2010-12-19 19:55:00 1330
原创 assert() 函数用法
<br />综合 资源 电子书 社区 <br />assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: <br />#include <assert.h> <br />void assert( int expression ); <br />assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 使用断言,常用于调试的时候。<br />请
2010-12-19 19:53:00 663
原创 内核驱动的一些技术处理函数
<br />//***********************************************************<br />1./* 工作队列: */<br />step 1)/* 定义和初始化: */<br />static struct workqueue_struct *wq = NULL;<br />static struct work_struct work_delayed;<br />wq = create_workqueue("skeleton_dev_wq")<br /
2010-12-19 19:51:00 542
原创 字符界面编程利器——vim + ctag + Taglist
<br />习惯了在windows下用sourceInsight编程的人,当然也希望在linux的字符终端下也能有一样酷的软件,这里要介绍给大家的是如题所示的三款软件:vim , ctag 和Taglist 。<br />很多时候我们需要在多个源程序之间实现函数、宏定义、外部变量等的跳转查询,甚至有时候需要到内核或库源代码里窥视他们真面目,我们也需要有列出程序内部所使用的各个函数、变量、宏等等信息的工具,这些功能仅仅靠vim完成是比较困难的,但也不必失望,因为我们还有两件利器:ctag负责建立标签,为实现文
2010-12-19 19:39:00 717
原创 ISO7816-1-2-3.doc
第一部分 卡片基本规范 目 次1 主要内容 32 参考资料 33 定义 34 缩略语和符号表示 5 物理特性、卡上信息记录方法和物理接口要求6 电特性7 卡的操作过程8 复位应答 1 主要内容 本规范的这一部分规定了ID-1型带触点集成电路卡的基本
2010-12-19 19:22:00 3812
转载 数字机顶盒原理
其实说白了,数字机顶盒就是一种把数字信号转换成模拟信号的变换设备。我们大部分时候会产生这样的疑问,既然从电视台发出的是模拟信号,接收到电视机的也必须是模拟信号,那为什么还要用到数字机顶盒呢?现在生活中,我们总是希望自己的电视机能播放清晰度高的电视节目,从模拟电视向高清晰度数字电视过渡,是一个跨越式的过渡,可以说无法直接兼容,也就是说目前的所有的模拟电视是不能使用的,所以一步到位是不现实的。通常现在的做法是:电视台将模拟信号先转换成数字信号,传送到家中的数字机顶盒后,将数字信号转变成模拟信号输入给现在的模
2010-12-16 00:16:00 979
vc调试方法
2012-02-28
智能卡数据传输协议T0
2010-12-19
putty.exe使用方法,简单中文教程
2010-12-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人