2279|2

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

驱动加载出错 [复制链接]

我写了个驱动程序,编译没错,但是insmod的时候就出现
moduletest: please compile with -fno-common
insmod: cannot insert `moduletest.ko': Invalid module format (-1): Exec format error的错误,不知道为什么,求高手指教.
源码如下:
#include

#ifndef __KERNEL__
# define __KERNEL__
#endif

#ifndef MODULE
# define MODULE
#endif
MODULE_LICENSE("GPL");

#include
#include
#include
#include
#include

#include //for udelay
#include
#include
#define GPFCON (*(volatile unsigned long *) 0x56000050)
#define GPFDAT (*(volatile unsigned long *) 0x56000054)
#define GPF4_in  ~(1<<(4*2))

unsigned long dwdat;
       
unsigned int fs_major = 0;
static char *data;
static dev_OPEN=0;
static ssize_t GPIO_read(struct file *file,char *buf,size_t count,loff_t *f_pos);
static ssize_t GPIO_write(struct file *file,const char *buffer,size_t count,loff_t *f_pos);
static int  GPIO_open(struct inode *inode,struct file *file);
static int  GPIO_release(struct inode *inode,struct file *file);
static ssize_t  GPIO_ioctl(struct inode *inode,struct file *file,unsigned int ret,unsigned long data);
int init_module(void);
void cleanup_module(void);
static struct file_operations GPIO_fops = {       
        read: GPIO_read,
        write: GPIO_write,
        ioctl: GPIO_ioctl,
        open: GPIO_open,
        release: GPIO_release,
};

static ssize_t GPIO_read(struct file *file,char *buf,size_t count,loff_t *f_pos)
{
        int len;
        if(count<0)
                return -EINVAL;
        len = strlen(data);
        if(len                 count = len;
        copy_to_user(buf,data,count+1);
        return count;
}

static ssize_t GPIO_write(struct file *file,const char *buffer,size_t count,loff_t *f_pos)
{
        if(count < 0)
                return -EINVAL;
        kfree(data);
        data = (char *)kmalloc(sizeof(char)*(count+1),GFP_KERNEL);
        if(!data)
        return -ENOMEM;
        copy_from_user(data,buffer,count+1);
        return count;
}

static int  GPIO_open(struct inode *inode,struct file *file)
{
        //MOD_INC_USE_COUNT;
        dev_OPEN++;
        printk("This is open\n");
        return 0;
}

static ssize_t  GPIO_ioctl(struct inode *inode,struct file *file,unsigned int ret,unsigned long data)
{        GPFCON=GPF4_in;
        dwdat=GPFDAT;
        ret=dwdat&(1<<4);
        if(ret)   //如果是高电平返回1
        {
                return ret;       
        }
}

static int GPIO_release(struct inode *inode,struct file *file)
{
        //MOD_DEC_USE_COUNT;
        dev_OPEN--;
        //module_put(fs_major);
        printk("this is released\n");
        return 0;
}

int init_module(void)
{
        int res;
        res=register_chrdev(0,"my2440dev",&GPIO_fops);
        printk("can get major name %d!\n ",res);
        if(res<0)
        {
                printk("can't get major name!\n");
                return res;
        }
        if(fs_major ==0)
                fs_major = res;
        return 0;
}
void cleanup_module(void)
{
        unregister_chrdev(fs_major,"my2440dev");
}

最新回复

这就是对应的makefile,如果不要那个ioctl函数就没问题,不知道为什么,第一次编译驱动遇到的问题实在有点棘手, CFLAGS=-D__KERNEL__ -DMOUDULE -DDEBUG_PRINTK -I/opt/FriendlyARM/QQ2440V3/kernel-2.6.13/include/ ifneq ($(KERNELRELEASE),)         obj-m     := moduletest.o else KDIR :=/opt/FriendlyARM/QQ2440V3/kernel-2.6.13/ PWD := $(shell pwd) default:         $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules endif   详情 回复 发表于 2009-3-1 19:00
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
Invalid module format (-1): Exec format error
你的.ko文件怎么编译出来的?把你写的Makefile文件也贴出来看看
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这就是对应的makefile,如果不要那个ioctl函数就没问题,不知道为什么,第一次编译驱动遇到的问题实在有点棘手,
CFLAGS=-D__KERNEL__ -DMOUDULE -DDEBUG_PRINTK -I/opt/FriendlyARM/QQ2440V3/kernel-2.6.13/include/
ifneq ($(KERNELRELEASE),)
        obj-m     := moduletest.o
else
KDIR :=/opt/FriendlyARM/QQ2440V3/kernel-2.6.13/

PWD := $(shell pwd)
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
endif
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表