免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3608 | 回复: 0
打印 上一主题 下一主题

[内核模块] make时没有规则可以创建modules [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-21 09:30 |只看该作者 |倒序浏览
本帖最后由 hgdyulei 于 2012-09-21 09:31 编辑

驱动程序:s2c2410-led.c

#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/hardware.h>
#include <linux/devfs_fs_kernel.h>
#include <asm/delay.h>
#include <asm/uaccess.h>

#undef DEBUG
//#define DEBUG
#ifdef DEBUG
#define DPRINTK( x... )        printk("s3c2410-led: " ##x)
#else
#define DPRINTK( x... )
#endif




#define DEVICE_NAME        "s3c2410-led"
#define DbLedRAW_MINOR                1

static int DbLedMajor = 0;
static int s3c2410_DbLed_open(struct inode *inode, struct file *filp)
{
        MOD_INC_USE_COUNT;
              GPDCON &=~ 0xffff;               
                GPDCON |= 0x5555;
      GPECON &=~ 0xffff;               
                GPECON |= 0x5555;
GPCCON &=~ 0xffff0000;               
                GPCCON |= 0x55555555;

        DPRINTK( "S3c2410 guet led device open!\n");
       
        return 0;
}


static int s3c2410_DbLed_release(struct inode *inode, struct file *filp)
{
        MOD_DEC_USE_COUNT;
DPRINTK( "DbLed closed\n");
        return 0;
}
static int s3c2410_DbLed_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned char arg)
{

        switch(cmd){
       
             case 1:
            GPCDAT=arg<<8;
            return 1;
           case 2:
            GPDDAT=arg;
            return 1;
                 case 3:
            GPEDAT=arg;
            return 1;
   
              }
        return 0;       
}

static struct file_operations s3c2410_fops = {
        owner:        THIS_MODULE,
        open:        s3c2410_DbLed_open,
        ioctl:        s3c2410_DbLed_ioctl,
        release:        s3c2410_DbLed_release,
};

#ifdef CONFIG_DEVFS_FS
static devfs_handle_t devfs_DbLed_dir, devfs_DbLedraw;
#endif

static int __init s3c2410_DbLed_init(void)
{
        int ret;

       

        ret = register_chrdev(0, DEVICE_NAME, &s3c2410_fops);
        if (ret < 0) {
                printk(DEVICE_NAME " can't get major number\n");
                return ret;
        }
        DbLedMajor = ret;

#ifdef CONFIG_DEVFS_FS
        devfs_DbLed_dir = devfs_mk_dir(NULL, "led", NULL);
        devfs_DbLedraw = devfs_register(devfs_DbLed_dir, "0", DEVFS_FL_DEFAULT,
                        DbLedMajor, DbLedRAW_MINOR, S_IFCHR | S_IRUSR | S_IWUSR,
                        &s3c2410_fops, NULL);
#endif

        printk(DEVICE_NAME " initialized\n");

        return 0;
}
module_init(s3c2410_DbLed_init);
#ifdef MODULE
static void __exit s3c2410_DbLed_exit(void)
{
#ifdef CONFIG_DEVFS_FS       
        devfs_unregister(devfs_DbLedraw);
        devfs_unregister(devfs_DbLed_dir);
#endif       
        unregister_chrdev(DbLedMajor, DEVICE_NAME);
}


module_exit(s3c2410_DbLed_exit);

#endif
MODULE_LICENSE("GPL");


Makefile如下:

ifneq ($(KERNELRELEASE),)
        obj-m := s3c2410-led.o
else
        KERNEL_DIR :=/lib/modules/$(shell uname -r)/build
        PWD := $(shell pwd)
all:
        $(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
endif
clean:
        rm -f *.o *.ko *.mod.c .s3c2410-led*


编译结果:

root@debian:/home/user/1# make
make -C /lib/modules/2.6.26-2-686/build SUBDIRS=/home/user/1 modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-686'
make[1]: *** 没有规则可以创建目标“modules”。 停止。
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-686'
make: *** [all] 错误 2

请问是什么原因?麻烦回答详细点,我还是个新手,谢谢!谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP