Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2695194
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: LINUX

2014-03-28 14:01:00

1.做字符设备驱动程序(此章讲的是按键点亮led),在编译内核模块时,遇到了如下问题:
CC[M]  drivers/char/s3c24xx_leds.o
drivers/char/s3c24xx_leds.c:7:32: error: asm/arch/regs-gpio.h: Nosuch file or directory
drivers/char/s3c24xx_leds.c:8:26: error: asm/hardware.h: No suchfile or directory
drivers/char/s3c24xx_leds.c:19: error: 'S3C2410_GPB5' undeclaredhere (not in a function)
drivers/char/s3c24xx_leds.c:20: error: 'S3C2410_GPB6' undeclaredhere (not in a function)
drivers/char/s3c24xx_leds.c:21: error: 'S3C2410_GPB7' undeclaredhere (not in a function)
drivers/char/s3c24xx_leds.c:22: error: 'S3C2410_GPB8' undeclaredhere (not in a function)

解决方法:头文件的路径不对,asm/arch/regs-gpio.h改为mach/regs-gpio

                     asm/hardware.h改为mach/hardware.h

2.继续编译又遇问题:

/home/pyf/linux/test/botton.c: In function`tope_buttons_init':
/home/pyf/linux/test/botton.c:170: error: implicit declaration offunction `class_device_create'
/home/pyf/linux/test/botton.c: In function`tope_buttons_exit':
/home/pyf/linux/test/botton.c:178: error: implicit declaration offunction `class_device_destroy'

方法: 经过查阅资料,发现创建设备节点使用了两个函数 class_create(),class_device_create(),当然在__exit()函数里,要使用class_destory()和class_device_desotry()注销创建的设备节点!

    问题来了,编译了之后,发现报错error:implicit declaration of function'class_device_create'等几个错误。经过分析,应该是Linux内核版本不同的原因!早期的版本,使用的是上面说的两个函数,但是在2.6.29以后(我用的是2.6.32的),使用的函数则变成了class_create()和device_create(),并且要在声明中加入#include,因为定义这些函数是在Linux2.6.32/include/linux/device.h里面!

所以修改class_device_create为device_create。class_device_destroy改为device_destroy
经过这些修改后,驱动编译成功,就能够自动创建设备节点了!
http://blog.csdn.net/lvy33/article/details/8246573

编译内核驱动时经常会出现这样的错误:implicit declaration of function 'class_device_create'或者是implicit declaration of function 'class_device_destroy'



这种错误我以前也有提到过,只要把'class_device_create'改成'device_create','class_device_destroy'改成'device_destroy'一般就可以正确通过编译了。这主要是由内核版本决定的,那么我们怎样看一个内核到底是支持'class_device_create'还是'device_create',每次都这样尝试可能有点麻烦。

 



我们可以通过查看

路径下的device.h文件来看到底是支持哪个的。

下面是2.6.30内核的关于'device_create'的声明linux-2.6.32.2/include/linux/



如果内核声明的是'class_device_create',那么编写内核的时候就改成'class_device_create'就可以了。




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