刚写了一个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'
我不知道为什么说这些口没定义,请斑竹出来解决下,问题出在哪里,怎么解决??坐等解答