Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291350
  • 博文数量: 65
  • 博客积分: 1490
  • 博客等级: 上尉
  • 技术积分: 835
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-16 20:00
文章分类

全部博文(65)

文章存档

2015年(1)

2012年(3)

2010年(7)

2009年(54)

我的朋友

分类: LINUX

2009-06-22 14:32:14

 

概述

       在一个X86开发板上,要把并口当作GPIO来使用。

其硬件连接是:南桥芯片(ICH7)àsuperio芯片(smsc lpc47m997)à并口。其中,南桥芯片(ICH7)通过LPC总线和superio芯片相接。

LPC总线连接的superio芯片物理地址为:0x2e开始。0x2econfig port0x2fdata port

ICH7芯片手册中的下表,知道并口地址为0x378-0x37F

 

       superio芯片(smsc lpc47m997)手册,知道0x378Data Port0x379Status port

 

现象

       运行测试程序,发现其它功能如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)在内核启动的不同位置,打印并口的状态;发现GPIOBCSR初始化时并口状态正常,但后来又不正常了。

 

分析

       首先,硬件上没有问题。内核启动完时,相关电压不正常;但运行测试程序时相关电压正常。GPIOBCSR模块初始化时并口状态正常,但后来又不正常了,说明:

1GPIO相关驱动工作正常;

2)有东西把并口状态改变了。

       经过分析,想起来开发板使用的内核是从官方网站下载的linux-2.6.28.9,在内核make menuconfig配置时,大部分使用默认设置,所以并口驱动以模块方式编译了。

 

解决

1)删除/lib/modules/2.6.28.9/kernel/driver/中编译好的模块(paraport目录中所有模块);

2)去掉内核配置中的并口驱动模块编译。

 

/*

*By Neil Chiao ()

*转载请注明出处:neilengineer.cublog.cn

*欢迎访问:新星湾()

*/

 
 
 
阅读(2294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~