全部博文(65)
分类: LINUX
2009-06-22 14:32:14
概述
在一个X86开发板上,要把并口当作GPIO来使用。
其硬件连接是:南桥芯片(ICH7)àsuperio芯片(smsc lpc
LPC总线连接的superio芯片物理地址为:0x2e开始。0x2e是config port,0x
由ICH7芯片手册中的下表,知道并口地址为0x378-0x
由superio芯片(smsc lpc
现象
运行测试程序,发现其它功能如eth link led无法正常工作。
调试
分析和调试的过程中,主要使用了下面方法:
0)先上电,用万用表测量相关电压,确认硬件是否正常;
1)用硬件部提供的测试程序进行调试;
2)用自己的测试程序进行调试;
3)在驱动源码的合适地方加printk(主要打印并口状态)。
在整个调试过程中,都使用万用表测量并口相关针脚的电压,来确认驱动是否正常。
对于加printk方法,我在看门狗驱动中加入一定时间打印一下并口状态,如下:
int i=100;
void wd_feed(void)
{
//for debug
#if 1
i--;
if(i<0){
printk("%s###Debug: inb(PARALLEL_DATA_PORT)=0x%x \n", __FUNCTION__,inb(PARALLEL_DATA_PORT));
i=100;
}
#endif
。。。。。。
}
调试结果
1)内核启动完,直接测量相关电压,不正常;如在驱动中使能的使能位没有正常使能。
2)用硬件部提供的测试程序测试,一切正常;说明硬件没问题。
3)用自己的测试程序进行测试,也正常。
4)在内核启动的不同位置,打印并口的状态;发现GPIO和BCSR初始化时并口状态正常,但后来又不正常了。
分析
首先,硬件上没有问题。内核启动完时,相关电压不正常;但运行测试程序时相关电压正常。GPIO和BCSR模块初始化时并口状态正常,但后来又不正常了,说明:
1)GPIO相关驱动工作正常;
2)有东西把并口状态改变了。
经过分析,想起来开发板使用的内核是从官方网站下载的linux-
解决
1)删除/lib/modules/
2)去掉内核配置中的并口驱动模块编译。