主题 : 关于LED驱动的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 57830
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2011-10-30
最后登录: 2011-11-11
楼主  发表于: 2011-10-30 13:38

 关于LED驱动的问题

刚写了一个LED驱动编译一大堆错误,不知道怎么解决。我想编译成模块,方式makefile
ifneq ($(KERNELRELEASE),)

obj-m :=led.o

else
KDIR:= /home/liuxiong/linux-2.6.32.2

all:
    make -C $(KDIR) M=$(PWD) modules
clean:
    rm -f *.ko *.o *.mod.o *.mod.c .symvers

endif


驱动为led.c
#include<linux/module.h>
#include<linux/init.h>
#include<linux/errno.h>
#include<mach/regs-gpio.h>
#include<mach/hardware.h>
#include<linux/fs.h>
#include<linux/kernel.h>
#include<mm.h>
#include<delay.h>
#include<linux/types.h>
#include<linux/slab.h>
#include<linux/ioctl.h>
#include<linux/string.h>
#include<linux/pci.h>
#include<linux/list.h>
#include<linux/cdev.h>
#include<linux/moduleparam.h>
#include<asm/unistd.h>
#include<asm/uaccess.h>
#include<asm/atomic.h>

#define device_name "myled"
#define major_number 0
#define led_on 0
#define led_off 1
static unsigned long led_table[] =
{
   s3c2410_GPB5,
    s3c2410_GPB6,
    s3c2410_GPB7,
    s3c2410_GPB8,
    
};

static unsigned int led_outtable[]=
{
  s3c2410_GPB5_OUTP,
  s3c2440_GPB6_OUTP,
  s3c2440_GPB7_OUTP,
  s3c2440_GPB8_OUTP,
  
};

struct file_operation led_dev_ops=
{
  .owner=  THIS_MODULE,
  .ioctl=  led_ioctl,
  
}


static int led_ioctl(struct node *node,struct file *file,int cmd,int arg)
{
      if(arg<1||arg>4)
     {
        return -EINVAL;

      }
     switch(cmd)
    {  
      case led_on:
      {s3c2410_gpio_setpin(led_table[arg],~(led_on));
    
     }
     case led_off:
      {
        s3c2410_gpio_setpin(led_table[arg],~(led_off));
      }
     default : -EINVAL;
     return 0;

    }

static struct miscdevice misc=
{
   .minor=MISC_DYNAMIC_MINOR,
   .name=driver_name,
   .fop=&dev_ops,

}
static int _init led_init()
{
  int ret;
  int i;
  for(i=1;i<5;i++)
    {
      s3c2410_gpio_cfgpin(led_table,let_outtable);
      s3c2410_gpio_setpin(led_table,0);
  


     }

  ret=misc_register(&misc);
  printk("initial ready!\n");
  return ret;
}  

static int _exit led_exit(void)
{
  int ret;
  ret=misc_unregister(&misc);
  return ret;
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSEN("GPL");
MODULE_AUTHOR("benren");

该做的我都坐了,把led.c放入char下,修改了makefile与kconfig,然后编译的时候出现
/qudong/led.c:8:15: error: mm.h: No such file or directory
/qudong/led.c:9:18: error: delay.h: No such file or directory
/qudong/led.c:28: error: 's3c2410_GPB5' undeclared here (not in a function)
/qudong/led.c:29: error: 's3c2410_GPB6' undeclared here (not in a function)
/qudong/led.c:30: error: 's3c2410_GPB7' undeclared here (not in a function)
/qudong/led.c:31: error: 's3c2410_GPB8' undeclared here (not in a function)
/qudong/led.c:37: error: 's3c2410_GPB5_OUTP' undeclared here (not in a function)
/qudong/led.c:37: error: initializer element is not constant
/qudong/led.c:37: error: (near initialization for 'led_outtable[0]')
/qudong/led.c:38: error: 's3c2440_GPB6_OUTP' undeclared here (not in a function)
/qudong/led.c:38: error: initializer element is not constant
/qudong/led.c:38: error: (near initialization for 'led_outtable[1]')
/qudong/led.c:39: error: 's3c2440_GPB7_OUTP' undeclared here (not in a function)
/qudong/led.c:39: error: initializer element is not constant
/qudong/led.c:39: error: (near initialization for 'led_outtable[2]')
/qudong/led.c:40: error: 's3c2440_GPB8_OUTP' undeclared here (not in a function)
/qudong/led.c:40: error: initializer element is not constant
/qudong/led.c:40: error: (near initialization for 'led_outtable[3]')
/qudong/led.c:44: error: variable 'led_dev_ops' has initializer but incomplete type
/qudong/led.c:46: error: unknown field 'owner' specified in initializer
/qudong/led.c:46: warning: excess elements in struct initializer
/qudong/led.c:46: warning: (near initialization for 'led_dev_ops')
/qudong/led.c:47: error: unknown field 'ioctl' specified in initializer
/qudong/led.c:47: error: 'led_ioctl' undeclared here (not in a function)
//qudong/led.c:47: warning: excess elements in struct initializer
/qudong/led.c:47: warning: (near initialization for 'led_dev_ops')
//qudong/led.c:52: error: expected ',' or ';' before 'static'

我不知道为什么说这些口没定义,请斑竹出来解决下,问题出在哪里,怎么解决??坐等解答
级别: 新手上路
UID: 57830
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2011-10-30
最后登录: 2011-11-11
1楼  发表于: 2011-10-30 15:44
ding
级别: 新手上路
UID: 57830
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2011-10-30
最后登录: 2011-11-11
2楼  发表于: 2011-10-30 17:20
wo kao meiren
级别: 新手上路
UID: 59384
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2011-11-23
最后登录: 2012-01-08
3楼  发表于: 2011-12-05 15:40
把s3c6410_addr.h放进去,然后include