关于LINUX某些驱动程序如GPIO编译的时候提示未定义的问题

从网上下载了DS18B20的驱动,在编译的时候总是提示 S3C2410_GPF0,S3C2410_GPF0_INP,S3C2410_GPF0_OUTP未定义问题,在网上找了一些,原来是内核版本问题,  在2.6.29和2.6.32中定义不同,如下:  

移植mini2440的驱动到2.6.31的时候,编译提示S3C2410_GPB5、S3C2410_GPB5_OUTPUT等类似的定义缺失。遂在内核中相关的部分arch/arm/mach-2410/include/mach中的头文件寻觅了一番,果然没有这些定义。而在2.6.29中是有这些定义的。

仔细看了一下,发现原来是新版本中采用了新的方式实现这两类定义。

1、引用端口的定义,旧版本直接通过S3C2410_GPmn来定义端口GPIOm的第n个引脚,比如GOIOB的第5个引脚引用为S3C2410_GPB5。在新版本中改为采用S3C2410_GPm(n)的方式,比如GPIOB的第5个引脚就改为S3C2410_GPB(5)。这里的S3C2410_GPm(n)函数在arch/arm/march-2410/include/mach/gpio-nrs.h中定义,共有S3C2410_GPA()~S3C2410_GPH()八组。

2、端口功能配置,比如端口的复用功能、输出或输入。在旧版本中采用的是”S3C2410_GPB_功能“的方式定义,比如S3C2410_GPB5_OUTP,直接把功能加在后面。而新版本中采用了一个宏函数S3C2410_gpio_cfgpin(端口引用, 功能),比如S3C2410_gpio_cfgpin(S3C2410_GPB(5),S3C2410_GPIO_OUTPUT)。关于端口功能的定义可以在arch/arm/march-2410/include/mach/regs-gpio.h中找到,复用功能的定义没有变化,增加了输入输出的定义S3C2410_GPIO_INPUT、S3C2410_GPIO_OUTPUT。以前的直接用宏定义配置,现在变成了需要用函数S3C2410_gpio_cfgpin来实现。这个函数的原型参见arch/arm/march-2410/include/mach/gpio-fns.h

被这个问题困扰了好久,终于有眉目了!!大家如果也遇到同样问题,记得留言顶一下,好让其他遇到此问题的哥们少走弯路!!!!!!
原帖地址:http://changhui0222.blog.sohu.com/158640420.html

你可能感兴趣的:(c,linux,input,output)