主题 : LED驱动程序问题-检查命令就不能运行(加入内核编译) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 54848
精华: 0
发帖: 23
金钱: 115 两
威望: 23 点
综合积分: 46 分
注册时间: 2011-09-07
最后登录: 2012-01-09
楼主  发表于: 2011-11-04 10:51

 LED驱动程序问题-检查命令就不能运行(加入内核编译)

#include<linux/miscdevice.h>
#include<linux/delay.h>
#include<asm/irq.h>
#include<mach/regs-gpio.h>
#include<mach/hardware.h>
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>
#include<linux/mm.h>
#include<linux/fs.h>
#include<linux/types.h>
#include<linux/delay.h>
#include<linux/moduleparam.h>
#include<linux/slab.h>
#include<linux/errno.h>
#include<linux/ioctl.h>
#include<linux/cdev.h>
#include<linux/string.h>
#include<linux/list.h>
#include<linux/pci.h>
#include<linux/gpio.h>
#include<asm/uaccess.h>
#include<asm/atomic.h>

#include "memdev.h"

#define DEVICE_NAME "leds"

static unsigned long led_table[]={
S3C2410_GPB(5),
S3C2410_GPB(6),
S3C2410_GPB(7),
S3C2410_GPB(8),
};

static unsigned int led_cfg_table[]={
S3C2410_GPIO_OUTPUT,
S3C2410_GPIO_OUTPUT,
S3C2410_GPIO_OUTPUT,
S3C2410_GPIO_OUTPUT,
};

static int mini2440_leds_ioctl(
struct inode* inode,
struct file* file,
unsigned int cmd,
unsigned long arg)
{
int i = 0;
int tmp = arg;

if (_IOC_TYPE(cmd) != MEMDEV_IOC_MAGIC)
return -EINVAL;

//问题就在这个黑体上面,如果我注释掉,在2440上/etc/rc.d/init.d/leds stop,再执行./led 1 0等等是正确的。
加上这句话,2440在启动后面不执行leds里面的程序,执行./led 1 0也没有反应。我觉得是不是我检查命令有问题,magic定义的是'k',
并且看了ioctl-number.txt,'k'没有定义。
现在不知道怎么解决这个问题?

请版主或者高人出马,帮初学者解决此问题,先谢谢啦!

if (_IOC_NR(cmd) > MEMDEV_IOC_MAXNR)
return -EINVAL;


switch(cmd)
{
case 0:
for (i = 0;i < 4; i++)
s3c2410_gpio_setpin(led_table,1);
return 0;
case 1:


for(i = 0; i < 4; i++)
s3c2410_gpio_setpin(led_table,0);

return 0;
default:
return -EINVAL;
}}


static struct file_operations dev_fops = {
.owner = THIS_MODULE,
.ioctl = mini2440_leds_ioctl,
};

static struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = &dev_fops,
};

static int __init dev_init(void)
{
int ret;
int i;
for (i =0; i < 4; i++)
{
s3c2410_gpio_cfgpin(led_table,led_cfg_table);
s3c2410_gpio_setpin(led_table,0);
}

ret = misc_register(&misc);
printk (DEVICE_NAME"\tinitialized\n");
return ret;
}

static void __exit dev_exit(void)
{
misc_deregister(&misc);
}

module_init(dev_init);
module_exit(dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("wilson Chen");

级别: 新手上路
UID: 54848
精华: 0
发帖: 23
金钱: 115 两
威望: 23 点
综合积分: 46 分
注册时间: 2011-09-07
最后登录: 2012-01-09
1楼  发表于: 2011-11-04 12:09
版主,帮忙看一下啊? 每次发的问题难道都不值一提?

初学者也没绍力提高深的问题啊?

每次发帖都要自己顶


级别: 新手上路
UID: 54848
精华: 0
发帖: 23
金钱: 115 两
威望: 23 点
综合积分: 46 分
注册时间: 2011-09-07
最后登录: 2012-01-09
2楼  发表于: 2011-11-04 12:27
顶,直到版主回答,太心寒了,mini2440
级别: 新手上路
UID: 54848
精华: 0
发帖: 23
金钱: 115 两
威望: 23 点
综合积分: 46 分
注册时间: 2011-09-07
最后登录: 2012-01-09
3楼  发表于: 2011-11-04 13:20
顶, 斑竹 干啥去了啊?
级别: 新手上路
UID: 54848
精华: 0
发帖: 23
金钱: 115 两
威望: 23 点
综合积分: 46 分
注册时间: 2011-09-07
最后登录: 2012-01-09
4楼  发表于: 2011-11-04 16:12
顶,继续顶